DDD領域驅動設計和充血模型

貧血模型

什麼是貧血模型

貧血模型就是缺血了,缺東西,也就是隻有數據但是沒有業務邏輯或者有業務邏輯但是沒有數據。

比如你有一個計算類,他有一個加法計算的方法。但是他不持有計算的數據。

和貧血模型對應的就是充血模型。

什麼是充血模型

充血模型就是不缺血了,有數據同樣有業務邏輯。

比如你的計算類現在不只有加法計算,還有需要的數據。

我們現在進行的開發基本上都是基於貧血模型開發的。

比如一個電商系統,有商品模型,但是一個商品模型只有商品的基本信息,數據。如果需要獲取一個商品的總價,那麼我們需要調用model裏面的一個方法來計算。這就是典型的貧血模型。

如果我們在商品模型裏面提供一個計算總價的方法。把數據和業務邏輯放在一起,這就是充血模型。

充血模型

充血模型要將數據和業務高度內聚在一個類中,使得類更加飽滿,也是高內聚低耦合的一種實踐。不過充血模型需要更好的設計整個類才能實現。因爲要考慮到擴展性,測試性,可讀性,複用性等。充血模型註定比貧血模型更加耗費時間,更加難以實現。

現在更推崇敏捷開發。快速實現需求,慢慢迭代升級。如果使用充血模型也容易搞得四不像。也因此貧血模型更讓人喜歡。貧血模型也更容易設計和實現,日常開發中隨便寫的都是貧血模型。而充血模型需要進行好好的設計。那怎麼設計充血模型呢?可以根據DDD領域驅動設計來實現。

領域驅動設計DDD

DDD的概念很早就有了,但是一直沒有火起來。現在又出現了充血模型的概念。

DDD的核心思想其實就是根據不同的領域,功能來設計建模,劃分模塊。微服務的劃分就可以借鑑DDD的思想,根據不同的業務領域來劃分。

DDD可以用來指導我們如果做軟件設計,但是想要用好DDD,需要對自身的業務足夠理解,足夠熟練。

領域是一個組織所做的事情以及其包含的一切。領域驅動設計就是從自身的領域出發,分析自身領域內的一切關聯關係,根據其設計我們的軟件。構造充血模型。也就是充血模型是和業務高度耦合的,完全從自身的領域出發進行設計。可以先將自身的領域細分出多個子領域,然後再每個子領域中設計出各自的領域模型。也就是充血模型。

比如電商領域可以分成用戶,商品,訂單,物流等子領域。然後設計出各自的實體對象,根據全局領域的上下文來分析需要承擔哪些責任也就是哪些數據和業務邏輯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章