在CakePHP 3中放置单独的业务逻辑类或类的位置?

时间:2015-03-16 14:36:14

标签: cakephp cakephp-3.0

我正在设计一个新的应用程序并计划使用CakePHP 3.通常在PHP MVC框架(CakePHP,CodeIgniter)之上设计应用程序时,我实现了一组代表业务层或服务层的单独的类(取决于你喜欢用什么词)。因此,堆栈:

- 观看次数

- 控制器[实际上只是视图的另一部分;来自C#land的代码隐藏]

- 业务层[业务逻辑所在的位置,因为业务逻辑跨越多个域对象并且不适用于单个Model / DAO]

- 模型[又名数据访问对象]

...使用域对象(现在Cake 3中的“实体”)遍历各层。

我发现Cake PHP 3在默认架构中仍缺乏业务层的任何概念,这令人失望,但难以克服。但毕竟,我的问题实际上是行人。它是:我在哪里放MyBusinessLayer.php?在Cake PHP 2中,我会把它放在app / Lib中,并用

加载它

App::Import('Lib', 'MyBusinessLayer');

CakePHP 3中的等价物是什么,我该如何加载它?我意识到我可以把它粘贴到任何旧的地方和require_once(),但我想知道是否有一种方法更符合Cake PHP标准。这个问题可以很容易地应用于十行实用程序类,但在我的情况下,它适用于业务层。

1 个答案:

答案 0 :(得分:14)

您的业务层可以放在src目录下的任何位置。例如,您可以拥有一个名为src/Coresrc/MyBusiness的文件夹,或者您可以拥有多个文件夹,例如src/Command src/Handler,您可以自行决定如何构建其他应用程序而不是提供Web请求或访问数据库中的数据。

如果给定正确的命名空间,则会自动加载放在src内的任何文件夹中的类。

// in src/MyBusiness/BusinessRules.php

namespace App\MyBusiness;
class BusinessRules
{
    ...
}

您可以使用use关键字

自动从另一个类加载此类
// In another file
use App\MyBusiness\BusinessRules;

...
$rules = new BusinessRules();

当涉及到这类对象时,CakePHP不会为您做出假设,因为它们通常非常特定于您的应用程序。它提供了各种各样的工具,可以帮助您更快速地构建更好的架构,并减少代码。例如,使用面向方面编程的Event系统,创建自适应实现的配置特性或使用功能方法处理数据的Collection库。