php - ZF + 学说 2 : Heavy model classes or Lightweight model + Service layer?

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

我正在集成 Zend FrameworkDoctrine 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/

相关文章:

php - 如何知道php文件是从源代码加载的

zend-framework - 如何在 zend Mail 中向两个电子邮件 ID 地址发送电子邮件

c# - 组件、行为和 MonoBehaviour 之间有什么区别?为什么这些要分开?

android - 单个 Activity 应用程序中的启动画面方法

php - 从数据库中获取用户喜欢的文章列表的最佳做法是什么?

c# - 我可以从 foreach 中访问索引吗?

php - 我如何使用 PHP 来混淆电子邮件地址,使它们不容易被垃圾邮件发送者获取?

php - 使用 Windows Server 2008 计划任务执行 PHP 文件

zend-framework - Zend_Db_Table - 更新不起作用

wcf - 如果WCF在MVC应用程序中,它是否应该使用 Controller 访问数据库以保留 'DRY'