ZF + Doctrine 2:重型模型类还是Lightweight模型+服务层?

Mat*_*oli 5 php architecture zend-framework service-layer doctrine-orm

我正在整合Zend FrameworkDoctrine 2,我正在发现服务层.

现在我明白了(我错了吗?)我有2种架构可能:

  • 一个模型,其中类包含域逻辑,即属性+ getter/setter +复杂方法
  • 一个轻量级模型,其中类包含属性+ getter/setter和Service层,包含域逻辑和修改模型类

每个的优点/缺点是什么?

通过将域逻辑放在模型外部来丢失OOP对我来说似乎很奇怪,所以我不明白为什么要使用服务层.

tim*_*dev 14

是什么让您认为您的服务层在您的模型外部?事实并非如此.事实上,它是模型的核心部分,还有实体,存储库等.

如果您使用的是Doctine2,则需要服务层.一个原因是您不希望您的实体知道EntityManager(伤害可测试性).另一个原因是你也不希望你的控制器驱动EM(控制器的工作不是知道持久性).

我通常使用一种架构,其中服务层是控制器与模型的接口.服务层公开对实体进行操作的函数(将它们作为参数,或返回它们,或两者都有).服务层隐藏实体的持久性.服务类驱动EM和存储库本身,或将其委托给控制器永远不会知道的其他代码.

因此,服务层提供了控制器可用于操纵业务数据的API.

  • 或者是一个带有评论帖子的外部博客帖子,以便其他人 - 比如我,提示,提示 - 可以从交换中受益.我对这个讨论很感兴趣.;-) (2认同)