領域驅動設計學習筆記 1

2021-08-29 11:08:25 字數 1010 閱讀 5580

關聯簡化,從而讓模型更清晰

指定乙個導航的方向

加入限定符減少關聯的多重性

清除不必要的關聯

模型分為實體,值物件,服務物件三種

實體應具有唯一標識(id)來進行區分

值物件則為只關心它們是什麼,而不關心它們誰是誰的物件,所以不需要分配標識。通常是臨時物件,經常作為實體的屬性和其他值。設計時需要對複製,共享和不變性作出選擇。值物件之間的雙向關聯是沒有意義的

服務,強調與其它物件的聯絡,往往代表一種行為,而不是乙個實體,它有乙個定義好的職責,呼叫的引數和返回的結果應該是領域物件。

服務的特徵

與領域概念相關的操作不是實體和值物件中固有的部分。

介面根據領域模型中的其他元素來定義

操作是無狀態的

如果乙個功能在該領域中有意義並且相關,則屬於服務物件,否則則為應用層物件

實現聚合的規則

根實體具有全域性標識,並最終負責對不變數的檢查

根實體具有全域性標識,邊界之內的實體具有本地標識,這些標識僅在聚合內部是唯一的

聚合邊界以外的任何物件除了可以引用根實體,不能持有任何對其內部物件的引用。根實體可以把其內部實體的引用傳遞給其他物件,但是它們只能臨時使用這種引用,而不能持有這種引用。根還可以複製乙個值物件的副本傳給另乙個物件,它並不關心這個副本會發生什麼變化,因為那只是乙個值,而且與聚合已經不再有任何關聯了。

作為上一條規則的推論,能通過資料庫查詢直接獲得的物件只有聚合根,所有其它物件必須通過導航關聯來訪問

聚合內的物件可以持有其他聚合根的引用

刪除操作必須一次性刪除聚合邊界內的所有物件

當在聚合邊界內發生的任何物件修改被提交時,整個聚合的所有不變數必須都被滿足。

將建立複雜物件或聚合的例項分離到乙個單獨的物件中來,這個物件提供了乙個將所有複雜的組合封閉起來的介面,這樣客戶就無需引用它要例項化的物件的具體類了,用工廠建立聚合,並保證不變數得到滿足

工廠的要求

每個建立方法是原子的,並保證滿足不變數

應該將構造結果抽象到所需的型別,而不是它所建立的具體類的型別

領域驅動設計學習筆記 1

關聯簡化,從而讓模型更清晰 指定乙個導航的方向 加入限定符減少關聯的多重性 清除不必要的關聯 模型分為實體,值物件,服務物件三種 實體應具有唯一標識 id 來進行區分 值物件則為只關心它們是什麼,而不關心它們誰是誰的物件,所以不需要分配標識。通常是臨時物件,經常作為實體的屬性和其他值。設計時需要對複...

領域驅動設計 學習筆記

模型設計 1 分解概念 2 聯絡起來 設計要點 1 軟體的核心是它為使用者解決領域相關問題的能力 2 沒有持久化內容,也沒有使用者介面,這使得我能夠專注於行為本身 先中間,後兩頭 的做法。重點考量領域問題,最後在進行ui和持久化結構的設計 3 當發現模型能夠明確所有細節意義的抽象概念時,這項工作就獲...

領域驅動設計 學習筆記一

第四章 分離領域 程式 必須包括 1 在螢幕上繪製乙個螢幕元件 widget 2 查詢資料庫,調出所有可能的 城市 3 解析並驗證使用者輸入 4 將所選城市與貨物關聯 5 向資料庫提交此次資料修改。上面所有的 都在同乙個程式中,但是只有一小部分 與運輸業務相關。4個常用概念層 使用者介面層 或表示層...