4

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

考虑到我们有Zend Framework 快速入门教程,其模型结构包含:

  • 网关
  • 数据映射器
  • 领域对象(模型类)

如果域对象(如 Zend 快速入门教程中所述)仅包含 getter 和 setter,那是一种反模式吗?从某种意义上说,我们不必要地用事务脚本划分域对象?

请指教。

4

2 回答 2

3

仅当您尝试构建真正的域模型(也称为域驱动设计中的域模型)并最终得到只有状态且没有行为的实体时,贫血域模型才是反模式。

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

请参阅 Martin Fowler 关于贫血域模型的文章以及Greg Young 的文章

于 2011-05-03T11:14:38.667 回答
2

领域对象与软件的业务逻辑分离。这是过程式编程的一个重要思想。

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

其实你可以考虑缺点

  • 您的模型表现力较差,getter 和 setter 并不能很好地描述模型
  • 代码更难重用,你会在事务脚本中得到重复的代码
  • 您必须使用隐藏实际数据结构的包装器(因此可能不是真正的 OOP)
  • 始终可以全局访问实体

我认为要考虑的最有趣的一点是域模型的对象在任何时候都不能保证它们的正确性。因为它们的突变发生在分离的层中。

我也使用 zend 框架开发了一个 CRUD 应用程序。逻辑和数据之间的清晰分离确实很棒,但是当您进步时,您会意识到层和映射器的数量越来越大。尽量重用你的代码,避免重复。

于 2011-05-03T11:35:32.897 回答