DDD簡單介紹幻燈片_第1頁
DDD簡單介紹幻燈片_第2頁
DDD簡單介紹幻燈片_第3頁
DDD簡單介紹幻燈片_第4頁
DDD簡單介紹幻燈片_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、ABP簡介,2018,1,2020/10/19,1,領域驅(qū)動設計,DDD,2,2020/10/19,3,2020/10/19,基本概念,領域驅(qū)動設計不是架構方法,也并非設計模式,而是一種思維方式 傳統(tǒng)方式:針對數(shù)據(jù)進行建模 領域驅(qū)動: 將需要解決的業(yè)務概念和業(yè)務規(guī)則,通過合理運用面向?qū)ο蟮囊恍┗疽兀D換為軟件系統(tǒng)中的類型以及類型的屬性與行為。DDD中解決這一問題的核心方法是通用語言。,4,2020/10/19,普通的三層,5,2020/10/19,領域驅(qū)動的分層,用戶展現(xiàn)層:負責向用戶展現(xiàn)信息以及解釋用戶命令 應用層:很薄的一層,用來協(xié)調(diào)應用的活動,它不包含業(yè)務邏輯,它不保留業(yè)務對象的狀態(tài)

2、,但是它保有應用任務的進度狀態(tài) 領域?qū)樱罕緦影P于領域的信息,這是業(yè)務軟件的核心所在。這里保留業(yè)務對象的狀態(tài),對業(yè)務對象和他們狀態(tài)的持久化委托給了基礎設施層 基礎設施層:本層作為其他層的支撐庫存在。它提供了層間的通訊,實現(xiàn)對業(yè)務對象的持久化,包含對用戶界面層的支撐庫,6,2020/10/19,7,2020/10/19,領域驅(qū)動設計過程,領域驅(qū)動設計不是架構方法,也并非設計模式,而是一種思維方式。貫穿了整個軟件開發(fā)的生命周期,包括對需求的分析,建模,架構,設計,甚至最終的編碼實現(xiàn),乃至對編碼的測試與重構。 領域驅(qū)動設計從業(yè)務需求中提煉出統(tǒng)一語言(Ubiquitous language),再基于

3、統(tǒng)一語言建立領域模型,這個領域模型會指導這程序設計以及編碼實現(xiàn),最后,通過重構來發(fā)現(xiàn)隱式概念,并運用設計模式改進設計與開發(fā)質(zhì)量。,8,2020/10/19,9,2020/10/19,基本術語,通用語言:通用語言包含術語和用例場景,且能夠直接反映在代碼中 領域 領域模型:形似UML類圖 統(tǒng)一建模語言:UML 實體(entity) 值對象(value object) 聚合及聚合根(aggregate、aggregate root) 工廠(factories) 倉儲(Repository),10,2020/10/19,實體(entity),與面向?qū)ο笾械母拍铑愃疲I域模型的基本元素,11,2020/

4、10/19,實體(entity),與面向?qū)ο笾械母拍铑愃?,領域模型的基本元素,12,2020/10/19,領域,一個領域本質(zhì)上可以理解為就是一個問題域,只要是同一個領域,那問題域就相同。所以,只要我們確定了系統(tǒng)所屬的領域,那這個系統(tǒng)的核心業(yè)務,即要解決的關鍵問題、問題的范圍邊界就基本確定了。 比如MIS系統(tǒng) 商品子域 用戶子域 銷售子域 訂單子域 支付子域 物流子域,13,2020/10/19,值對象(value object),和我們說的編程中數(shù)值類型的變量是不同的,它僅僅是沒有唯一標識符的實體,比如有兩個收獲地址的信息完全一樣,那它就是值對象,并不是實體。值對象在領域模型中是可以被共享的,

5、他們應該是“不可變的”(只讀的),當有其他地方需要用到值對象時,可以將它的副本作為參數(shù)傳遞。,14,2020/10/19,聚合及聚合根(aggregate、aggregate root),聚合被看作是多個模型單元間的組合,它定義了模型的關系和邊界。每個聚合都有一個根,根是一個實體,并且是唯一可被外訪問的。 customer是該聚合的根,其他的都是內(nèi)部對象,15,2020/10/19,工廠(factories),和設計模式中的工廠模式一個意思,把創(chuàng)建對象的細節(jié)封裝起來,實現(xiàn)了依賴反轉,16,2020/10/19,倉儲(Repository),倉庫封裝了獲取對象的邏輯,領域?qū)ο鬅o須和底層數(shù)據(jù)庫交互

6、,它只需要從倉庫中獲取對象即可。,17,2020/10/19,參考資料,DDD理論學習系列,18,2020/10/19,2,ASP.NET Boilerplate Project,ABP,19,2020/10/19,ABP,ASP.NET Boilerplate是一個用最佳實踐和流行技術開發(fā)現(xiàn)代WEB應用程序的新起點,它旨在成為一個通用的WEB應用程序框架和項目模板。 ASP.NET Boilerplate 基于DDD的經(jīng)典分層架構思想,實現(xiàn)了眾多DDD的概念(但沒有實現(xiàn)所有DDD的概念)。,20,2020/10/19,服務器端技術,ASP.NET MVC 5、ASP.NET Core 、We

7、b API 2、C# 5.0 DDD領域驅(qū)動設計 (Entities、Repositories、Domain Services、Domain Events、Application Services、DTOs等) Castle windsor (依賴注入容器) Entity Framework 6 NHibernateDapper,數(shù)據(jù)遷移 Log4Net(日志記錄) AutoMapper(實現(xiàn)Dto類與實體類的雙向自動轉換),21,2020/10/19,客戶端技術,Bootstrap Less Angular,Vue jQuery Modernizr 其他JS庫: jQuery.validat

8、e、jQuery.form、jQuery.blockUI、json2,22,2020/10/19,ABP框架已實現(xiàn)了以下特性,多語言/本地化支持 多租戶支持(每個租戶的數(shù)據(jù)自動隔離,業(yè)務模塊開發(fā)者不需要在保存和查詢數(shù)據(jù)時寫相應代碼) 軟刪除支持(繼承相應的基類或?qū)崿F(xiàn)相應接口,會自動實現(xiàn)軟刪除) 統(tǒng)一的異常處理(應用層幾乎不需要處理自己寫異常處理代碼) 數(shù)據(jù)有效性驗證(Asp.NET MVC只能做到Action方法的參數(shù)驗證,ABP實現(xiàn)了Application層方法的參數(shù)有效性驗證) 日志記錄(自動記錄程序異常) 模塊化開發(fā)(每個模塊有獨立的EF DbContext,可單獨指定數(shù)據(jù)庫) Repo

9、sitory倉儲模式(已實現(xiàn)了Entity Framework、NHibernate、MangoDB、內(nèi)存數(shù)據(jù)庫) Unit Of Work工作單元模式(為應用層和倉儲層的方法自動實現(xiàn)數(shù)據(jù)庫事務),23,2020/10/19,EventBus實現(xiàn)領域事件(Domain Events) DLL嵌入資源管理 通過Application Services自動創(chuàng)建Web Api層(不需要寫ApiController層了) 自動創(chuàng)建Javascript 的代理層來更方便使用Web Api 封裝一些Javascript 函數(shù),更方便地使用ajax、消息框、通知組件、忙狀態(tài)的遮罩層等等,24,2020/10/19,項目說明,各層概念: 1. 表現(xiàn)層(Presentation Layer):圖中的用戶界面層包括用戶接口層,用戶輸入和數(shù)據(jù)展示。 2. 應用層(Application Layer):

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論