【问题标题】:What is anemia in domain model?什么是领域模型中的贫血?
【发布时间】:2012-07-10 13:11:30
【问题描述】:

据我从Martin Fowler 了解到,贫血意味着将业务逻辑与领域对象分离,将其简化为琐碎的 getter 和 setter,而将领域行为移至服务层。我错过了什么吗?

如果某个对象没有任何行为,我们如何调用它domain?您能否提供一些非常简短的贫血域模型代码?

【问题讨论】:

标签: design-patterns language-agnostic anemic-domain-model


【解决方案1】:

通过以下代码展示:

大多数代码都以域对象(例如 Account 或 TransactionEntity)的名义处理传递数据结构(如果您愿意,可以使用属性包)。它们是“域对象”,主要是因为它们具有域中存在的事物的名称。

大部分逻辑驻留在外部“服务”中 - 包含对(或单个)数据结构列表进行操作的脚本。结果,服务需要访问/修改域对象的内部信息。因此,域对象自发地产生了许多 getter 和 setter。 RIP 封装。

贫血是指领域类中领域逻辑/行为的缺失或缺乏。

更多指标:

  • “询问”方法的数量超过“告诉/执行”方法

【讨论】:

  • 那么可以通过将“域对象”重命名为“包”(仍然缺乏封装)并给服务对象域名来“解决”吗?我的意思是 - 这更多的是设计问题还是只是命名约定?
  • 贫血设计通常是人们使用 OO 语言进行过程编程。解决方案是将相关逻辑移近它需要的数据——从而将行为和需要的数据封装到一个盒子中。这意味着状态可以被完全封装,对象暴露行为并通过消息进行交流。这意味着更好地本地化更改,因为每个对象仅依赖于其协作者公开的合约,而不依赖于它们的内部数据表示。
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 2010-12-26
  • 2012-02-04
  • 2014-01-05
  • 2020-01-29
  • 2011-08-17
  • 1970-01-01
  • 2011-12-19
相关资源
最近更新 更多