【发布时间】:2013-07-26 21:04:56
【问题描述】:
我来自 Java/Grails 背景,似乎无法在线找到关于 CakePHP 应用程序的服务逻辑应该存储在哪里的明确答案。通过“服务”,我指的是通常通过依赖注入实例化以在域对象上执行业务逻辑的类。他们应该能够查询任何域对象并做出更改以响应控制器操作。
目前,CakePHP 的“组件”类似乎最接近这种行为。我可以将组件加载到任何控制器中并根据需要执行其方法。但是,我在几个地方读到过组件永远不应该访问数据库,这样做会导致性能急剧下降。
我还研究了 CakePHP 的“行为”类,它似乎根本不符合要求。将域对象组织到数据结构设置中似乎装备精良,但这不是服务将执行的那种逻辑。此外,要将任何模型定义导入行为,我必须编辑模型定义本身以允许访问,这非常尴尬。
所以我问这个问题:服务逻辑应该存储在哪里?当然不是控制器,因为它应该只包含处理请求和发送响应的最小逻辑。
【问题讨论】:
-
这里有一个免费的提示:远离 CakePHP。它是 PHP 中最糟糕的框架之一,它绝对没有像 MVC 那样远程实现任何东西。如果想使用至少能识别“服务”概念的东西,你可以试试 Symfony2。
-
参数 1:全局状态。 CakePHP 基本上基于单例和其他静态范围参数的使用。
-
论据 2:静态类:大部分 CakePHP 核心由静态方法组成。这使得所有代码都与特定的类名称紧密耦合,最终被用作命名空间。
-
@tereško 我没有删除它猜它是一些版主。我同意1和2,也不喜欢。我不同意 3,它可能不是 MVC,但它的工作方式很好。我个人喜欢愚蠢的模板。 4 部分正确,5 对于 2.0 不正确。而且我已经尝试自己对 CakePHP 进行一些更改,但老实说,让事情发生变化是一件很痛苦的事情,更多的讨论而不是一天结束时的生产力。所以我放弃了,寄希望于 3.0。
-
因为其他人可以来这里看到这些 cmets,我只是想给新手一个提示。我认为这里的所有论点都可以通过 CakePHP 3.X 版本解决。我们的团队发现它非常易于维护,并且在必要时可以轻松调整不同类型的架构。
标签: php cakephp model-view-controller service dependency-injection