一次關於聚合根的激烈討論

背景

因爲這是面向頁面建模,不是面向領域建模,將微服務拆分和領域建模混爲一談了

於是我以聚合根定義作爲引子,結合組內在實踐 DDD 過程中,聚合根隨着業務查詢複雜而導致聚合根不斷膨脹的問題,提出借鑑 CQRS 讀寫分離的理念,來解這個問題。 詳見 DDD-CQRS 能解聚合根的問題嗎引發了大家對領域模型的重新思考和激勵討論。歷經 3 小時得出了一些結論,達成了共識。

過程

通常我們說領域建模不應該去考慮微服務架構,工程結構,應該專注於業務。

但在實踐過程中發現這並不是一個好的方式,或者說是可落地的。因爲業務領域建模完成後,還是要反映到系統架構中,

最終是要落地到代碼實現,通過代碼來表達出領域模型。所以說我們的討論不應該是脫離

系統架構的。但是當我們發現業務領域建模完,通過代碼實踐一段時間後,發現代碼模型腐化了,這時候

我們首先思考的方向不應該是通過代碼來糾正,而是應該回歸到業務建模。

結論

聚合根

實體

注意,聚合根裏面沒有實體,並不意味着數據庫就只有一張表,可以設計成多張表。DB 設計和領域建模沒有關係

  1. 不是說只能有一個方法saveAggr(),可以有saveEntity()方法

案例

case 1:

品牌信息和店鋪

店鋪依賴品牌,但是店鋪有自己獨立的生命週期。他們的數據沒有一致性要求。所以店鋪是一個聚合根

case 2: 門店與門店商品

門店商品有自己的價格,返傭。需要單獨編輯,是一個實體。脫離了門店後沒有生命終結。

目前我們只討論了實體類型的聚合根,沒有討論業務過程的聚合根,比如轉賬

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s?__biz=MzI4NjI3MDc1NA==&mid=2247483822&idx=1&sn=85bd5d90da63654e55508b08226afb8b&chksm=ebde35e3dca9bcf500c2f4ee17d01712e7244fabfb9950ff5b8114fc9f9ec314847dbfc11e1b&scene=21#wechat_redirect