貧血模型 - DDD - The Domain Driven Design
貧血模型Anemic Model是一種領域模型,其中領域物件包含很少或沒有業務邏輯。這個模型最初由Martin Fowler描述,他認為這種做法是反模式。
這種反模式的根本恐怖之處在於它與物件導向設計的基本思想相悖; 這是將資料和過程結合在一起。
Vaughn Vernon,IDDD,2013年:
貧血領域模型每天都出現在我們行業的各個角落。問題是,大多數開發人員似乎認為這是完全正常的,並且不認識到在他們的系統上使用時會產生嚴重的副作用。這是一個真正的問題。
因為貧血模型中沒有邏輯,因此,負責呼叫貧血模型的 客戶端負責解釋領域物件的用途和用途。通常,業務邏輯最終會在名為服務Services等其他類中實現,這些類會轉換領域物件的狀態。當然,這種方法會導致許多設計問題和缺點。貧血模型導致耦合的大服務
避免貧血領域模型的方法
- 使用private setters.。如果讓模型物件的屬性直接由外部客戶端直接定義,您將失去使用領域事件的機會,您將不得不在實體外的外部方法中驗證您的實體。
- 始終驗證您的實體的狀態,您的實體必須自我驗證。
- 避免沒有引數的建構函式。當然,您的物件需要一些初始化資料來維持有效狀態。
- 領域服務被開發人員用作真正的銀子彈,但最終成為貧血模型的最大原因。
- 小心ORM,他們負責自動建立域物件,生成真正的公共setter和公共getter容器,這導致了一個貧血模型。
- 不要使用事務指令碼[EAA第110頁的P]。
- 使用OOP,當然程式程式設計比物件導向程式設計更容易,請記住正確使用OOP是對付貧血模型的一個很好的補救措施。
為什麼人們喜歡貧血模型?
我們的許多行業都是由樣本程式碼追隨者組成的,但是,通常,示例程式碼專注於以最簡單的方式演示某些概念,而不必擔心良好的設計原則。
過度簡化的示例程式碼(通常演示了幾個getter和setter)每天都會被複制,而無需考慮專案。
相關文章
- 貧血模型與充血模型比較 - DDD - The Domain Driven Design模型AI
- 領域驅動設計(DDD:Domain-Driven Design)AI
- 領域驅動設計(DDD:Domain-Driven Design)轉AI
- 實戰DDD(Domain-Driven Design領域驅動設計)AI
- 讀《實戰DDD(Domain-Driven Design領域驅動設計:Evans DDD)》想到的AI
- 關於貧血模型模型
- <實戰DDD(Domain-Driven Design領域驅動設計:Evans DDD)>讀後疑問AI
- 從貧血模型到充血模型模型
- Implementing Domain Driven Design中文版出版AI
- 貧血模型-Martin Fowler 翻譯模型
- 充血模型與貧血模型的再論模型
- 貧血模型與充血模型的對比模型
- 談DDD與貧血領域模型:再次為失血模型辯護 -Codecentric AG部落格模型
- 聊一聊領域驅動與貧血模型模型
- 使用Domain-Driven建立Hypermedia APIAIAPI
- 貧血,充血模型的解釋以及一些經驗模型
- [譯文]Domain Driven Design Reference(五)—— 為戰略設計的上下文對映AI
- 說說領域驅動設計和貧血、失血、充血模型模型
- Martin Fowler大神 - 微服務、貧血模型、重構、敏捷開發方法論微服務模型敏捷
- Domain-Driven+Design+Tackling+Complexity+in+the+Heart+of+Software.pdf 英文原版 免費下載AI
- 請問沒有複雜邏輯的領域模型和貧血模型有什麼區別?模型
- 四色原型是貧血的設計原型
- domain-driven-hexagon:領域驅動六邊形的Javascript案例AIGoJavaScript
- 阿里技術專家詳解 DDD 系列- Domain Primitive阿里AIMIT
- cqrs模式下ddd中的domain service如何實現模式AI
- 貧血和充血模型的比較之我見->有興趣的朋友進來參與討論模型
- DDD深思,物件裝備模型物件模型
- domain-driven-hexagon: 領域驅動六邊形架構學習資料AIGo架構
- 區分DDD中的Domain, Subdomain, Bounded Context, Problem/Solution SpaceAIContext
- DDD(Domain Driver Designer) 領域驅動設計簡介AI
- 運用領域模型——DDD模型
- 大家看看我設計的這個關於圖書館借書還書的模型屬於貧血還是充血?模型
- ddd-crew/core-domain-charts:幫助查詢DDD核心子域的複雜性分析工具集AI
- 在DDD中建立領域模型模型
- DDD聚合的數學模型 -Thomas Ploch模型
- DDD中簡單模型比複雜模型更危險模型
- 領域模型驅動設計(DDD)之模型提煉模型
- 關於暴露業務模型(Exposed Domain Model Pattern)2模型AI