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

时间:2011-05-01 17:55:41

标签: php zend-framework architecture doctrine-orm service-layer

我正在整合 Zend Framework Doctrine 2 ,我发现了服务层

现在我理解(我错了?)我有2种架构可能:

  • 模型,其中类包含域逻辑,即属性+ getter / setters +复杂方法
  • 轻量级模型,其中类包含属性+ getters / setter和服务层,包含域逻辑,并修改模型类

每个人的利弊是什么?

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

1 个答案:

答案 0 :(得分:14)

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

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

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

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