5

I am integrating Zend Framework and Doctrine 2, and I am discovering the Service layer.

Now I understand (am I wrong ?) that I have 2 architectures possible :

  • A model, where classes contain domain logic, i.e. properties + getters/setters + complex methods
  • A lightweight model, where classes contain properties + getters/setters and a Service layer, containing domain logic, and modifying the model classes

What are the pros/cons of each ?

It seems weird to me to lose OOP by putting domain logic as external to the model, so I don't understand why use a Service layer.

4

1 回答 1

14

是什么让您认为您的服务层在您的模型之外?它不是。事实上,它是模型的核心部分,还有实体、存储库等。

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

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

因此,服务层提供了控制器可以用来操作您的业务数据的 API。

于 2011-05-01T19:31:57.530 回答