貧血模型 - 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與貧血領域模型:再次為失血模型辯護 -Codecentric AG部落格模型
- Domain-Driven+Design+Tackling+Complexity+in+the+Heart+of+Software.pdf 英文原版 免費下載AI
- 使用Domain-Driven建立Hypermedia APIAIAPI
- [譯文]Domain Driven Design Reference(五)—— 為戰略設計的上下文對映AI
- 聊一聊領域驅動與貧血模型模型
- Martin Fowler大神 - 微服務、貧血模型、重構、敏捷開發方法論微服務模型敏捷
- domain-driven-hexagon:領域驅動六邊形的Javascript案例AIGoJavaScript
- 阿里技術專家詳解 DDD 系列- Domain Primitive阿里AIMIT
- domain-driven-hexagon: 領域驅動六邊形架構學習資料AIGo架構
- 區分DDD中的Domain, Subdomain, Bounded Context, Problem/Solution SpaceAIContext
- ddd-crew/core-domain-charts:幫助查詢DDD核心子域的複雜性分析工具集AI
- 運用領域模型——DDD模型
- 在DDD中建立領域模型模型
- 不同於DDD有界上下文:SAP One Domain統一領域模型試圖成為整合智慧套件的通用語言 | SAP BlogsAI模型套件
- DDD聚合的數學模型 -Thomas Ploch模型
- DDD中簡單模型比複雜模型更危險模型
- DDD模型探索的Whirl pool設計流程模型
- 領域驅動模型DDD(一)——服務拆分策略模型
- 模型驅動設計的構造塊(上)——DDD模型
- document.domainAI
- 精準扶貧新姿勢,扶貧辦聯合微信推出扶貧小遊戲遊戲
- <mvc:annotation-driven/>使用介紹MVC
- 領域驅動模型DDD(三)——使用Saga管理事務模型
- 寶付“雙節”助力貧困群眾脫貧增收
- 英文DDD培訓線上課程推薦: 從失血模型重構到充血模型模型
- 遷移學習(DIFEX)《Domain-invariant Feature Exploration for Domain Generalization》遷移學習AI
- 遷移學習(DCCL)《Domain Confused Contrastive Learning for Unsupervised Domain Adaptation》遷移學習AIASTAPT
- Cookie domain 屬性CookieAI
- Programming languages Domain summaryAI
- 論文解讀(CDCL)《Cross-domain Contrastive Learning for Unsupervised Domain Adaptation》ROSAIASTAPT
- ddd
- 領域驅動設計(DDD)中模型的重要性 - Jeronimo模型
- pages bookmarks for machine learning domainMacAI
- wildfly 21的domain配置AI
- Error Domain=kAFAssistantErrorDomain Code=7ErrorAI
- 遷移學習(JDDA) 《Joint domain alignment and discriminative feature learning for unsupervised deep domain adaptation》遷移學習AIAPT