天天看點

《領域驅動設計——精簡版》随筆

基本構成要素:

通用分層:基礎設施層、領域層、應用層、使用者界面/展現層

1.實體

    包含一個唯一的标示符

2.值對象

    沒有标示符

    值對象通常是不可變的對象

3.服務

    領域中的重要行為,但不能合并到實體或者值對象中

    應用服務和領域服務

    服務建立在領域實體和值對象的上層

4.子產品

    模型越來越大,就要講模型組織緊子產品

    子產品應該定義對外接口

    子產品間僅有極少的連接配接會讓人更容易了解系統如何工作

    設計人員習慣一開始就建立子產品

5.聚合

    聚合是一個用來定義對象所有權和邊界的領域模式

    每一個聚合都有一個根(實體),是外部可以通路的唯一對象

    不能将聚合的内部對象指針或者引用傳遞出去,隻能傳遞内部對象的拷貝

6.工廠

    複雜的組裝操作不是對象的建立過程

    工廠是違反對象封裝原則的,因為對象的建立是他自身的職責

7.資源庫

    資源庫的目的是封裝所有擷取對象引用所需的邏輯

    資源庫作為一個全局可通路的對象存儲點存在

    資源庫類似于基礎設施,但其接口是完全的領域模型,是以處于領域層

    工廠關注的是對象的建立;資源庫關注的是已存在的對象

    當一個新對象被添加入資源庫時,他應該先由工廠建立過,然後傳遞給資源庫

面向深層了解的重構

1.持續重構

    設計重構

    重構離不開自動化測試

    設計必須靈活,僵硬的設計很難做重構

2.凸顯關鍵概念

    重構是小幅進行的,産生小的改進;很小的變更造成很大的改進,就是突破

    從一個粗糙的,膚淺的模型開始,然後基于對領域的深層了解以及對關注點的了解來細化它和設計

    讓概念顯示化時,有用的方法

    1)傾聽話語

    2)使用領域文獻

    3)限制:簡單的表示不變量的方式

    4)過程:代碼中表現為procedure;面向對象中,需要為過程選擇一個對象,并為它添加行為;最好的方法是使用服務

    5)規約:用來測試一個對象是否滿足特定條件的;規則被封裝緊負責它的對象,這就成為了客戶的規約,被保留在領域層

保持模型一緻性

1.界定的上下文

    每個模型都有一個上下文

    模型應該足夠小,以便能夠分給一個團隊去做

    主要思想是定義模型的範圍,畫出他的上下文的邊界,然後盡最大的可能保持模型的一緻性

    被界定的上下文不是模型,它提供了模型參與的邏輯架構。子產品用來組織模型的要素,上下文包含模型

    不能在不同的模型間傳遞任何對象,也不能在沒有邊界的情況下自由的激活行為

    為每一個領域建立一個獨立的模型

2.持續內建

    對小的團隊,每日內建

3.上下文映射(Context Map)

    指抽象出不同界定上下文和他們之間關系的文檔

4.上下文之間的進階互動模式

    共享核心(Shared Kernel):減少重複

    客戶-供應商(Customer-Supplier):2個子系統之間的接口需要預先明确定義;2個團隊之間确定明顯的客戶-供應商關系

5.讓上下文高度獨立和分開運作

    隔離通道(Separate Way)

6.系統和繼承系統或者外部系統之間的互動

    開放主機服務(Open Host Service):當一個子系統要和許多子系統內建時,為每一個系統定制一個轉換器回事整個團隊陷入困境;定義一個能以服務的形式通路你子系統的協定,開放他,是所有需要和你內建的人都能擷取到,然後優化和擴充這個協定

    防崩潰層(Anticorruption Layer):facade+Adaptor