我知道领域模型和数据映射器是 OOP 势利小人的选择(以互补的方式使用“势利小人”,正如 Martin Fowler 自称的那样)——然而,即使是 Fowler在 POEAA 中也说
“对于不太复杂的领域逻辑,Active Record 是一个不错的选择……”
我有一个简单的产品和发票域模型,没有太多要建模的表/对象/概念,而且关系也没有那么复杂。那么,这对 Active Record 来说是一个很好的用例吗?
Fowler 还指出,Active Record 类似于 Row Data Gateway,不同之处在于 Active Record 具有域逻辑。
假设这是一个有效的 Active Record 用例,并且由于 Zend 提供 Row Data Gateway,扩展这些对象的智能(而不是简单地添加表名)解决方案似乎是使用 Zend 框架创建 Active Record 对象的好方法. 事实上,这个概念在这个 SO answer 中讨论过。这是在 Zend 框架内实现 Active Record 的一种可接受的方式吗?
当然,这个问题最流行的答案是Bill Karwin(他曾参与 Zend 的 Db 实现)的一个答案,他建议不要使用Zend_Db_Table
或Zend_Db_Row
以这种方式(至少我是这么读的)。
如果有问题的域模型变得更加复杂,我完全接受想要迁移到 Data Mapper 解决方案。我查看了各种 ORM/DataMappers(不仅仅是所讨论的域模型,最近还阅读了有关 OOP 设计模式的更多内容),对于某些事情来说,它们似乎真的太多了。