在 CakePHP 3 的什么地方放置单独的业务逻辑 class 或 classes?

Where to put a separate business logic class or classes in CakePHP 3?

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

-- 观看次数

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

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

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

...使用域对象(现在在 Cake PHP 3 中 "Entities")在层之间遍历。

我看到 Cake PHP 3 在默认架构中仍然缺少任何业务层的概念,这令人失望,但并非无法克服。但毕竟,我的问题实际上是相当乏味的。它是:我把MyBusinessLayer.php放在哪里?在 Cake PHP 2 中,我会把它放在 app/Lib 中,然后用

加载它

App::导入('Lib', 'MyBusinessLayer');</pre>

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

您的业务层可以放在src目录下的任意位置。例如,您可以有一个名为 src/Coresrc/MyBusiness 的文件夹,或者您可以有多个文件夹,例如 src/Command src/Handler,这取决于您希望如何构建您的应用程序其他而不是服务网络请求或访问数据库中的数据。

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

// in src/MyBusiness/BusinessRules.php

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

您可以使用 use 关键字从另一个自动加载此 class:

// In another file
use App\MyBusiness\BusinessRules;

...
$rules = new BusinessRules();

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