關聯簡化,從而讓模型更清晰
指定乙個導航的方向
加入限定符減少關聯的多重性
清除不必要的關聯
模型分為實體,值物件,服務物件三種
實體應具有唯一標識(id)來進行區分
值物件則為只關心它們是什麼,而不關心它們誰是誰的物件,所以不需要分配標識。通常是臨時物件,經常作為實體的屬性和其他值。設計時需要對複製,共享和不變性作出選擇。值物件之間的雙向關聯是沒有意義的
服務,強調與其它物件的聯絡,往往代表一種行為,而不是乙個實體,它有乙個定義好的職責,呼叫的引數和返回的結果應該是領域物件。
服務的特徵
與領域概念相關的操作不是實體和值物件中固有的部分。
介面根據領域模型中的其他元素來定義
操作是無狀態的
如果乙個功能在該領域中有意義並且相關,則屬於服務物件,否則則為應用層物件
實現聚合的規則
根實體具有全域性標識,並最終負責對不變數的檢查
根實體具有全域性標識,邊界之內的實體具有本地標識,這些標識僅在聚合內部是唯一的
聚合邊界以外的任何物件除了可以引用根實體,不能持有任何對其內部物件的引用。根實體可以把其內部實體的引用傳遞給其他物件,但是它們只能臨時使用這種引用,而不能持有這種引用。根還可以複製乙個值物件的副本傳給另乙個物件,它並不關心這個副本會發生什麼變化,因為那只是乙個值,而且與聚合已經不再有任何關聯了。
作為上一條規則的推論,能通過資料庫查詢直接獲得的物件只有聚合根,所有其它物件必須通過導航關聯來訪問
聚合內的物件可以持有其他聚合根的引用
刪除操作必須一次性刪除聚合邊界內的所有物件
當在聚合邊界內發生的任何物件修改被提交時,整個聚合的所有不變數必須都被滿足。
將建立複雜物件或聚合的例項分離到乙個單獨的物件中來,這個物件提供了乙個將所有複雜的組合封閉起來的介面,這樣客戶就無需引用它要例項化的物件的具體類了,用工廠建立聚合,並保證不變數得到滿足
工廠的要求
每個建立方法是原子的,並保證滿足不變數
應該將構造結果抽象到所需的型別,而不是它所建立的具體類的型別
領域驅動設計學習筆記 1
關聯簡化,從而讓模型更清晰 指定乙個導航的方向 加入限定符減少關聯的多重性 清除不必要的關聯 模型分為實體,值物件,服務物件三種 實體應具有唯一標識 id 來進行區分 值物件則為只關心它們是什麼,而不關心它們誰是誰的物件,所以不需要分配標識。通常是臨時物件,經常作為實體的屬性和其他值。設計時需要對複...
領域驅動設計 學習筆記
模型設計 1 分解概念 2 聯絡起來 設計要點 1 軟體的核心是它為使用者解決領域相關問題的能力 2 沒有持久化內容,也沒有使用者介面,這使得我能夠專注於行為本身 先中間,後兩頭 的做法。重點考量領域問題,最後在進行ui和持久化結構的設計 3 當發現模型能夠明確所有細節意義的抽象概念時,這項工作就獲...
領域驅動設計 學習筆記一
第四章 分離領域 程式 必須包括 1 在螢幕上繪製乙個螢幕元件 widget 2 查詢資料庫,調出所有可能的 城市 3 解析並驗證使用者輸入 4 將所選城市與貨物關聯 5 向資料庫提交此次資料修改。上面所有的 都在同乙個程式中,但是只有一小部分 與運輸業務相關。4個常用概念層 使用者介面層 或表示層...