贫血模型,充血模型(领域驱动设计)
? ? 很多業務系統都是基于 MVC 三層架構來開發的。雖然這種開發模式已經成為標準的 Web 項目的開發模式,但它卻違反了面向對象編程風格,是一種徹徹底底的面向過程的編程風格。?MVC 三層架構中的 M 表示 Model,V 表示 View,C 表示 Controller。它將整個項目分為三層:展示層、邏輯層、數據層。MVC 三層開發架構是一個比較籠統的分層方式,落實到具體的開發層面,很多項目也并不會 100% 遵從 MVC 固定的分層方式,而是會根據具體的項目需求,做適當的調整。
? ?目前幾乎所有的業務后端系統,都是基于貧血模型的。
?
貧血模型(Anemic Domain Model)
??很多業務系統都是基于 MVC 三層架構來開發的。實際上,更確切點講,這是一種基于貧血模型的 MVC 三層架構開發模式。
??在貧血模型中,數據和業務邏輯被分割到不同的類中。
?
?
??領域驅動設計(Domain Driven Design,簡稱 DDD)充血模型(Rich Domain Model)
? ??數據和對應的業務邏輯被封裝到同一個類中。
? ??領域驅動設計,即 DDD,主要是用來指導如何解耦業務系統,劃分業務模塊,定義業務領域模型及其交互。
? ??除了監控、調用鏈追蹤、API 網關等服務治理系統的開發之外,微服務還有另外一個更加重要的工作,那就是針對公司的業務,合理地做微服務拆分。而領域驅動設計恰好就是用來指導劃分服務的。所以,微服務加速了領域驅動設計的盛行。領域驅動設計有點兒類似敏捷開發、SOA、PAAS 等概念,聽起來很高大上,但實際上只值“五分錢”。
?
? ?面向過程編程風格有種種弊端,比如,數據和操作分離之后,數據本身的操作就不受限制了。任何代碼都可以隨意修改數據
? ?
? ??為什么基于貧血模型的傳統開發模式如此受歡迎?
第一點原因是,大部分情況下,我們開發的系統業務可能都比較簡單,簡單到就是基于 SQL 的 CRUD 操作.
第二點原因是,充血模型的設計要比貧血模型更加有難度。
第三點原因是,思維已固化,轉型有成本。
?
什么項目應該考慮使用基于充血模型的 DDD 開發模式?
??基于充血模型的 DDD 開發模式,更適合業務復雜的系統開發。比如,包含各種利息計算模型、還款模型等復雜業務的金融系統。
?
? ?這兩種開發模式,落實到代碼層面,區別不就是一個將業務邏輯放到 Service 類中,一個將業務邏輯放到 Domain 領域模型中嗎?為什么基于貧血模型的傳統開發模式,就不能應對復雜業務系統的開發???那就是兩種不同的開發模式會導致不同的開發流程?;诔溲P偷?DDD 開發模式的開發流程,在應對復雜業務系統的開發的時候更加有優勢。
?
?
?
??
總結
以上是生活随笔為你收集整理的贫血模型,充血模型(领域驱动设计)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抽象类,接口
- 下一篇: leetcode 35. 搜索插入位置