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

Ben*_*ney 12 cakephp cakephp-3.0

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

- 意见

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

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

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

...使用域对象(现在是Cake PHP 3中的"实体")在层之间遍历.

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

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

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

Jos*_*uez 15

您的业​​务层可以放在src目录下的任何位置.例如,您可以拥有一个名为的文件夹src/Core,src/MyBusiness或者您可以拥有多个文件夹src/Command src/Handler,除了提供Web请求或访问数据库中的数据之外,您还需要如何构建应用程序.

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

// in src/MyBusiness/BusinessRules.php

namespace App\MyBusiness;
class BusinessRules
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

...
$rules = new BusinessRules();
Run Code Online (Sandbox Code Playgroud)

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