您好,登錄后才能下訂單哦!
光 明新零售模式,光明新零售模式開發(fzb威246性724),光明新零售模式開發案例,(內容忽視,詳情+v)
如果一個聚合只有一個實體,那么這個實體就是聚合根;如果有多個實體,那么我們可以思考聚合內哪個對象有獨立存在的意義并且可以和外部直接進行交互。
倉儲被設計出來的原因:領域模型中的對象自從創建后不會一直留在內存活動,當它不活動時會被持久化到DB中,當需要的時候會重建該對象。所以,重建對象是一個和DB打交道的過程,需要提供一種機制,提供類似集合的接口來幫助我們 管理對象。
倉儲里存放的對象一定是聚合,因為之前提到的領域模型是以聚合的概念來劃分邊界的。我們 只對聚合設計倉儲 ,把整個聚合看成一個整體,要么一起取出來,要么一起被刪除,不會單獨對某個聚合內的子對象進行單獨查詢和更新。倉儲還有一個重要的特征就是分為倉儲定義部分和倉儲實現部分,在領域模型中定義倉儲的接口,而在基礎設施層實現具體的倉儲。
根據需求建立初步的領域模型,識別明顯的領域概念和之間的關聯(1:1, 1:n的關系),用文字精確沒有歧義的描述出每個領域概念的含義;
分析主要的軟件功能,識別主要的應用層的類,這樣有助于及早發現哪些是應用層的職責,哪些是領域層的職責;
進一步分析領域模型,識別出實體、值對象、領域服務;
分析關聯,通過對業務的深入分析和軟件設計原則及性能方面的權衡,明確關聯的方向,去掉一些不需要的關聯;
找出聚合邊界及聚合根,在分析過程中會出現難以清洗判斷的選擇問題,這就依賴平時分析經驗的積累了;
為聚合根配置倉儲,一般情況下為一個聚合分配一個倉儲,此時設計好倉儲的接口即可;
遍歷所有場景,確定設計的領域模型能有效解決業務需求;
考慮如何創建實體和值對象,是通過工廠還是構造函數;
重構模型,尋找模型中有疑問或蹩腳的地方,比如思考:聚合的設計是否正確,模型的性能等等;
領域建模是一個不斷重構,持續完善的過程,大家會在討論中將變化的部分反映到模型中,從而模型不斷細化并朝正確的方向走。
現實世界中的領域包括 問題空間(Problem Space)和 解決方案空間(Solution Space):
問題空間:是核心域和其他子域的組合,思考的是 業務面臨的挑戰
解決方案空間:一組特定的 軟件模型,包括一個或多個限界上下文,思考的是如何實現軟件(限界上下文 即是一個 特定的解決方案,通過軟件的方式實現解決方案)以 解決這些業務挑戰
一個 顯式的邊界(主要是一個語義上的邊界),領域模型便存在于這個邊界之內;每一個模型概念(包括它的屬性和操作)在邊界之內都具有特殊的含義;
一個 給定的業務領域 會包含多個限界上下文,想與一個限界上下文溝通,則需要通過顯示邊界進行通信;系統通過確定的限界上下文來進行解耦,而每一個上下文內部緊密組織,職責明確,具有較高的內聚性;
一個很形象的隱喻:細胞質所以能夠存在,是因為細胞膜限定了什么在細胞內,什么在細胞外,并且確定了什么物質可以通過細胞膜(引用);
對 領域中 所發生的事件(領域專家所關心的發生在領域中的一些事件)進行建模,即 領域事件(領域模型 的組成部分)
領域事件的特點
領域事件 用來捕獲領域中發生的一些事情,開始使用領域事件時,要 對不同的事件進行定義;
“當...時,請通知我” 等等場景
限界上下文內,觀察者模式 是一種簡單高效的發布領域事件的方法;
限界上下文外,利用 消息機制 將本地限界上下文產生的事件發送到 遠程限界上下文 中(我們要保證 所有限界上下文 的最終一致性);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。