clean / repository

2.0.4 2017-08-29 12:10 UTC

This package is auto-updated.

Last update: 2024-09-06 09:24:21 UTC


README

Build Status Code Climate Test Coverage Issue Count Latest Stable Version Total Downloads License

使用存储库来分离检索数据并将其映射到实体模型与作用于模型的业务逻辑。业务逻辑应该对数据源层组成的数据类型不可知。例如,数据源层可以是数据库或Web服务。

目标

  • 您从许多位置访问数据源,并希望应用集中管理、一致的访问规则和逻辑。
  • 您希望实现和集中化数据源的缓存策略。
  • 您希望通过将业务逻辑从数据或服务访问逻辑中分离出来,来提高代码的可维护性和可读性。

安装

通过Composer

"require": {
  "clean/repository": "dev-master"
}

想法和实现

存储库是一个包含多个标准的对象。这些标准可以代表对数据库的查询、GET请求参数或其他需要根据各种参数创建请求的情况。想法是将生成查询或请求的特定实现隐藏在语义层之后,例如。

/*
   get 
   4 'toyota' cars,
   not older than 10 year,
   only with diesel engine,
   with information about last 2 owners,
   include pictures of car
*/
$carRepository
    ->limit(4)
    ->filterByMark('toyota')
    ->notOlderThan(10)
    ->onlyDiesel()
    ->includeOwners([
        'getLatest' => 2,
    ])
    ->includePictures()
    ->assemble();

以下是一些值得遵循的规则

  • 当需要减少结果时使用filter...only...方法
  • 当需要排序结果时使用sortBy...方法
  • 当需要扩展结果时使用with...方法
  • 当需要包含相关实体时使用include...方法
  • 您还可以定义适用于您项目的自定义规则,例如notOlderThan

工作示例