CakePHP:把'服务'逻辑放在哪里

我来自Java / Grails背景,似乎无法在网上找到明确的答案,应该在哪里存储CakePHP应用程序的服务逻辑。 通过“服务”,我正在讨论通常通过依赖注入实例化的类,以在域对象上执行业务逻辑。 他们应该能够查询任何域对象,并根据控制器操作进行更改。

目前,CakePHP的“组件”类似乎与此行为最接近。 我可以将组件加载到任何控制器中并根据需要执行其方法。 但是,我已经在几个地方看到组件不应该访问数据库,并且这样做会导致一些陡峭的性能命中。

我也研究过CakePHP的“行为”类,它似乎根本不适合票据。 它似乎能够将域对象组织到数据结构设置中,但这不是服务执行的逻辑。 另外,要将任何模型定义导入到行为中,我必须自己编辑模型定义以允许访问,这非常尴尬。

所以我问这个问题:应该在哪里存储服务逻辑? 当然不是控制器,因为它应该只包含处理请求和发送响应的最小逻辑。


组件是CakePHP中的服务层。 它们由依赖注入容器(Components Collection)构造并通过要处理的控制器,请求和响应。

除了保持图层之间的分离之外,组件可以做什么没有限制。 直接从组件使用数据库连接或使用模型并修改请求是很好的。

如果您只是针对特定情况采取行动,组件实际上非常轻量化。 检查操作名称是限制组件范围的常用方法。 您还可以注入设置,以便可以知道什么时候可以执行自定义服务逻辑。


所以我问这个问题:应该在哪里存储服务逻辑? 当然不是控制器,因为它应该只包含处理请求和发送响应的最小逻辑。

听起来像分派器过滤器的理想用例。 即使在实例化控制器之前它也会被调用。 如果您需要查询数据库,只需通过ClassRegistry :: init('YourModelName')加载模型并将请求参数传递给模型方法,并返回您的请求中所需的任何内容。 根本不需要控制器。 我们已经使用分派器过滤器实现了oauth + xhttp,而无需调用任何控制器。

如何在组件中使用模型应该影响性能...我不知道谁有这个奇怪的想法,听起来不像是你找到的最好的文章。 的确,您不应该将模型层相关的逻辑放入其中,但您可以通过控制器实例和控制器模型调用模型。

链接地址: http://www.djcxy.com/p/72943.html

上一篇: CakePHP: Where to put 'Services' logic

下一篇: On Understanding ConfigurationManager in .NET