这是一个贫血的领域模型吗?

时间:2011-05-03 10:13:07

标签: oop zend-framework design-patterns anemic-domain-model

我正在尝试构建我的第一个CRUD应用程序,我不明白是否应该使用包含getter和setter的对象。

考虑到Zend Framework Quick Start tutorial的模型结构包含:{/ p>

  • 网关
  • 的DataMapper
  • 域对象(模型类)

如果域对象(如Zend快速入门教程中所示)仅由getter和setter组成,那么这是一种反模式吗?从某种意义上说,我们将域对象与事务脚本分开?

请告知。

2 个答案:

答案 0 :(得分:3)

如果您正在尝试构建真正的域模型(又称域驱动设计的域模型)并最终只有状态且没有行为的实体,那么贫血域模型就是反模式。

对于简单的CRUD应用程序,贫血域模型可能是最佳实践,尤其是当您拥有使您的工作非常轻松的框架时。

请参阅Martin Fowler关于Anemic Domain Model以及Greg Young's Article的文章。

答案 1 :(得分:2)

域对象与软件的业务逻辑分离。这是procedural programming的一个重要概念。

然而,这种模式被一些开发人员认为是反模式的候选者,这意味着它可能是一种无效的实践。

事实上你可以考虑不利之处

  • 你的模型不那么富有表现力,吸气者和制定者不太适合描述模型
  • 代码更难以重用,您可以在事务脚本中获得被公开的代码
  • 你必须使用隐藏实际数据结构的包装器(所以可能不是真正的OOP)
  • 始终存在对实体的全局访问权

我认为最值得考虑的一点是,域模型的对象无法在任何时候保证其正确性。因为它们的突变发生在分离的层中。

我也使用zend框架开发了一个CRUD应用程序。逻辑和数据之间的明确分离非常好,但是当你进步时,你意识到层和映射器的数量越来越大。尽可能多地重用您的代码并避免出版。