我正在整合 Zend Framework 和 Doctrine 2 ,我发现了服务层。
现在我理解(我错了?)我有2种架构可能:
每个人的利弊是什么?
通过将域逻辑放在模型外部来丢失OOP似乎很奇怪,所以我不明白为什么要使用服务层。
答案 0 :(得分:14)
是什么让您认为您的服务层外部到您的模型?事实并非如此。事实上,它是模型的核心部分,还有实体,存储库等。
如果您使用的是Doctine2,则需要服务层。一个原因是您不希望您的实体知道EntityManager(伤害可测试性)。另一个原因是你也不希望你的控制器驱动EM(控制器的工作不是知道持久性)。
我通常使用一种架构,其中服务层是控制器与模型的接口。服务层公开对实体进行操作的函数(将它们作为参数,或者将它们作为参数,或者返回它们)。服务层隐藏实体的持久性。服务类驱动EM和存储库本身,或将其委托给控制器永远不会知道的其他代码。
因此,服务层提供了控制器可用于操纵业务数据的API。