【发布时间】:2017-04-30 13:46:31
【问题描述】:
我正在使用symfony 2,我对代码分离有疑问。我想确保我正确理解控制器中应该包含哪些元素、服务中应该包含哪些元素以及实体中应该包含哪些元素。
假设我有需要显示的文档列表。在显示之前在每个文档上我还必须执行一些逻辑操作(例如添加两个变量)。
正如理解实体类只关心数据检索和单个实体上的操作。我不应该在那里输入任何自定义代码。据我了解,这应该由服务完成。
但是我应该:
- 使用服务将基于某些文档的列表传递给控制器
执行所需逻辑后的标准, - 或使用控制器下载文件列表,然后通过 文档到服务以执行一些逻辑?
我宁愿认为第一种方法适合保持控制器精简(瘦控制器,大型模型),但这种方法是否正确? 实体中应该有什么代码,控制器中应该有什么,服务中应该有什么?
特别是我应该在哪里与实体管理器相关 - 在控制器中还是在服务中?
我们还假设在我的应用程序的许多地方,我需要在允许用户执行任何操作(例如,编辑它)之前检查文档是否已完成。这绝对应该在服务中,因为需要另一个服务来检查它。但是,我是否应该在控制器中加载文档实体对象,将其发送到服务以验证它是否可以完成,或者更确切地说,在服务中加载文档并执行检查?
【问题讨论】:
-
Symfony2 的理念是:瘦控制器,胖服务。您与实体存储库类中的实体管理器相关。如果您想使用服务修改数据,请将存储库服务传递给它。
-
所以我应该主要为每个实体创建服务(“实体存储库类”)来处理所有请求。我理解正确吗?
标签: symfony model-view-controller