cyberma / laravel-layer-frame
Laravel的分层框架
Requires
- php: >=8.2
- ext-openssl: *
- laravel/framework: >=10.0
Requires (Dev)
- mockery/mockery: ^1.6.12
- phpunit/phpunit: ^11.1.3
README
为您的Laravel项目提供分层结构
动机
Laravel的原生Active Record方法对模型和数据库的处理提供了一个易于使用的环境来处理数据和数据库。然而,模型很大,执行许多不同的任务,因此不遵循单一职责原则(SRP)。模型可能会随着时间的推移而变得庞大。
除此之外,Active Record在代码和数据库结构之间创建了一个非常紧密的耦合。
尽管需要更多的对象和类,Layer Frame仍然带来了更好的代码结构。特别是较大的项目可以从更好的可测试性和不同任务的分离中受益。
主要原则
- 组合优于继承
- 单一职责原则
- 分层数据流
- 尽可能使用类型
层
控制器
控制器验证输入数据并将它们映射到内部表示,即模型。然后,控制器调用服务。服务返回数据后,控制器将数据格式化为API所需的格式,并将数据发送到API。
输入映射器
包含输入数据的验证规则
输入解析器
InputParser是一个通用类,它接受InputModel并使用InputModel中的验证规则验证传入的数据。它使用laravel Validator处理验证。如果有数据验证的特殊情况,您可以创建自己的inputParser并继承基类。通常不需要这样做。
服务
服务处理业务逻辑
仓储
连接模型映射、数据映射器和模型工厂,将模型映射到发送到SQL查询的原始数组。
数据映射器
DataMapper是一个知道如何与SQL通信的层。它包含一些标准查询并为任何自定义查询提供接口。
SQL数据库
对象
输入映射
模型
模型是基本的数据处理器。每个模型都是继承自Model的 - 注意,这不是Eloquent模型!基本模型定义了用于属性的__set和__get魔术方法以及其他有用的功能。
小心处理fill和setAttributes函数。它们在处理原始数据方面有所不同。请查看注释。
模型映射
ModelMap是一个知道如何将模型属性映射到MySQL列的类。这是一个将SQL与我们的代码分离的层。其他代码不知道任何关于数据库及其结构的信息。这是与Active Record的主要区别,Active Record在代码中使用列名,并在数据库和代码之间创建非常紧密的关系。这是一个非常糟糕的方法,只适用于较小的项目。
这种方法的优势在于,如果您创建任何新内容,您通常只需设置参数,而无需编写很多新代码。
类的主要参数是const ATTRIBUTES_MAP。以下参数包括
protected $table = 'users'; protected $primaryKey = 'id';
public $timestamps = true;
这些参数设置表名、主键名称,在大多数情况下应该是id,我们可以关闭或开启软删除和时间戳。在大多数情况下,我们使用两者。const JSON_COLUMNS包含那些应从数组类型传输到json的列。
此文件夹中的所有类都继承自ModelMap,包含所有重要函数。
异常
最后更新:2023年11月27日。