我正在集成 Zend Framework 和 Doctrine 2,我正在探索服务层。
现在我明白(我错了吗?)我有两种可能的架构:
- 模型,其中类包含领域逻辑,即属性 + getters/setters + 复杂方法
- 一个轻量级模型,其中类包含属性 + getter/setter 和一个服务层,包含领域逻辑,并修改模型类
各自的优缺点是什么?
在我看来,通过将领域逻辑置于模型外部来失去 OOP 似乎很奇怪,所以我不明白为什么要使用服务层。
最佳答案
是什么让您认为您的服务层外部在您的模型中?它不是。事实上,它是您模型的核心部分,还有实体、存储库等。
如果您使用的是 Doctine2,您将需要一个服务层。一个原因是您不希望您的实体知道 EntityManager(损害可测试性)。另一个是您也不希望您的 Controller 驱动 EM(了解持久性不是 Controller 的工作)。
我通常使用一种架构,其中服务层是 Controller 与模型的接口(interface)。服务层公开了对实体进行操作的函数(将它们作为参数,或返回它们,或两者兼而有之)。实体的持久性被服务层隐藏。服务类要么驱动 EM 和存储库本身,要么将其委托(delegate)给 Controller 永远不知道存在的其他代码。
因此,服务层提供了 Controller 可以用来操纵您的业务数据的 API。
关于php - ZF + 学说 2 : Heavy model classes or Lightweight model + Service layer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850249/