課程描述:
需求分析人員不了解軟件設計,無法進行軟件設計人員經常會曲解需求內容,這是軟件開發中容易出現的第一帶來。它帶來的後果是設計不斷變化,設計的軟件不滿足客戶需求。
需求分析雖然在文字表達上看起來明白無誤,設計人員卻無法正確識別地域領域模型,從而無法實施有效的軟件設計,這是軟件開發中容易出現的第二個替代。它帶來的後果是設計質量糟糕,開發的代碼不具有良好的出色性,增加了軟件的開發與維護成本。
系統的業務需求複雜多變,設計人員卻總是喜歡從實現角度以及數據庫建模思考業務問題,這是軟件開發中容易出現的第三種原因。它會導致開發的系統過于複雜,且可擴展性差,無法有效應對需求發生的變化。
本次培訓的內容-領域驅動設計正好是解決這三個常見替代的最佳藥方。
培訓對象:
- 産品經理,産品人員,開發人員,測試人員
培訓特色:
- 充分了解案例分析與實踐,提倡動手實驗,而非單純以講授性質的培訓;通過真實案例的演練,熟悉開發過程與設計方法;
- 采用最新的領域驅動設計思想與方法,並輔以可視化的設計手段,以工作坊的形式實施培訓,如何更好地理解領域驅動設計;
- 編碼與設計,二者不可偏廢。沒有優秀的個人設計能力,團隊就會成爲無根之木,無法保證軟件的高質量。必須幫助團隊的每個人都能熟練運用領域驅動的分析與設計能力,才能保證生産力的高效;
學時:
2天12學時(1小時 / 學時)
課程安排:
DDD領域驅動設計 | |
時間 | |
第一單元 領域建模的方法 | 1、領域建模與設計的關系 優秀的軟件系統與好的軟件設計息息相關,但最關鍵的還是在于對需求的理解。如果不能正確的理解軟件需求,那麽再好的設計也不能設計出好的軟件。正確的做事情固然重要,更重要的是要做正確的事。然而,需求到設計存在巨大的鴻溝,因爲需求是站在業務角度來考慮,而設計往往會站在實現角度。領域建模就是爲這二者搭建一個溝通與轉換的橋梁。 |
第二單元 領域驅動設計的分析 | 1、限界上下文 若要進行領域建模,並將業務需求逐步演化爲架構設計,則需要引入DDD(領域驅動設計)的戰略設計作爲指導。場景圖與限界上下文可以很好地結合,幫助架構師很好地識別各個子領域的概念邊界與設計邊界。如此則可以運用“分而治之”的思 想識別出整個系統的業務邏輯邊界與物理邊界。 演練:識別電子商務系統的限界上下文 2、領域模型 通過限界上下文,可以幫助我們分析系統的領域模型,包括系統的核心領域與子領域。確定系統的核心領域與子領域可以幫助架構師合理分配資源(包括時間資源與人力資源)。而對子領域的進一步識別,可以幫助架構師更好地識別可重用資源, 包括可重用的功能模塊,確定技術棧,決定構建還是購買的架構戰略。 3、上下文映射圖 本部分內容會講解限界上下文之間主要存在的組織模式與集成模式,這其中包括防腐層,開放服務調用等。利用上下文映射圖,有助于識別上下文之間的關系,思考處于上下文內領域模型之間的通信方式,從而幫助架構師驅動出最終的應用邏輯架構。 演練:OTA機票預訂系統 |
第三單元 領域驅動設計的實戰 | 1、領域驅動設計的專用術語 領域驅動設計的一個特點是針對領域層,提出了統一的設計術語,包括關聯、實體、值對象、聚合、服務、模塊。注意區分它與傳統業務層設計在概念上的區別。甄別這些概念之間的區別,有利于我們正確地運用領域驅動設計。 整體而言,領域驅動設計的這些術語涵蓋了領域對象的整個生命周期,包括領域對象從創建、存儲、重建、歸檔、修改到刪除的整個生命周期。 2、實體與值對象 這兩個概念都是領域對象的體現,二者的主要區別在于對“標識”的運用。本部分的內容深入展開對實體標識的討論,揭示實體的本質特征,挖掘實體的關鍵行爲。通過識別角色與職責對實現進行分析。 本部分內容還將通過深入講解值對象的特征幫助我們分辨值對象與實體,使得我們可以在領域驅動設計中有效地運用實體與值對象。本部分內容還包括持久化值對象,以及領域驅動設計與ORM之間的關系。 3、領域服務 通過講解什麽是領域服務,什麽不是領域服務理清領域服務的概念,並講解如何建模領域服務。討論領域服務和面向接口設計思想。 4、領域事件 事件驅動架構的主要對象即爲領域事件,我們要分清在何時以及爲什麽要使用領域事件,並對領域事件進行建模。通過講解發布者-訂閱者模式講解如何在領域模型和限界上下文中發布領域事件。同時,針對事件進行存儲的Event Source也與CQRS架構風格直接相關。 5、模塊 模塊化設計是優良架構的保障,同時也是軟件複用最重要的單元。領域驅動設計將模塊視爲與對象相等的一等公民,這使得整個設計在微觀層面符合面向對象的思想,同時也能夠爲宏觀層面的架構設計提供有力地支持。本部分將結合限界上下文講解基本的模塊設計原則與設計模式。 6、聚合 聚合是領域驅動設計最爲重要的領域概念。本部分內容將深入探討聚合的設計原則,並辨別在聚合設計中可能出現的壞味道,並提出針對性的解決方案。這些原則和方案包括:在一致性邊界之內建模真正的不變量,設計小的聚合,通過唯一標識引用其他聚合,在邊界外滿足最終一致性。 7、工廠和資源庫 工廠和資源庫都是管理領域對象(實體、值對象和服務)生命周期的對象。工廠主要針對內存中對象從無到有的創建過程,與設計模式的工廠模式基本相似。 6、 資源庫則分爲面向集合的資源庫與面向持久化的資源庫。本部分內容將重點講解與資源庫直接相關的技術細節,包括如何選擇資源庫的方式,如何針對聚合持久化資源庫,如何管理事務,以及分辨資源庫與數據訪問對象(DAO)之間的異同。 8、應用層設計 作爲爲UI提供的應用服務,其目的在于管理和協調領域對象,並爲領域對象提供橫切關注點的內容。好的應用服務設計不應該承擔任何與領域邏輯有關的職責。應用層是架構層面的外觀與適配器模式的體現。它可以提高軟件系統架構的可用性與簡單性,也能夠更好地與面向服務架構或RESTful架構風格結合。 9、DDD實踐 用DDD重構中台業務模型 使用DDD設計微服務代碼模型 |
第四單元 案例實戰 | DDD建模案例: 房屋租賃産品案例實戰 |