phpddd/repository
Composer 安装命令:
composer require phpddd/repository
包简介
Implementation of a base repository
关键字:
README 文档
README
Generic implementation and definition of a Repository and its in-memory implementation.
Installation
Use Composer to install the package:
$ composer require nilportugues/repository
InMemory Implementation
A custom repository can be easily created by extending the InMemoryRepository class provided.
use NilPortugues\Foundation\Infrastructure\Model\Repository\InMemory\InMemoryRepository class MyInMemoryRepository extends InMemoryRepository { //... your custom implementation. }
Implementation can be seen here.
The base InMemoryRepository implements the following interfaces:
NilPortugues\Foundation\Domain\Model\Repository\Contracts\RepositoryNilPortugues\Foundation\Domain\Model\Repository\Contracts\PageRepositoryNilPortugues\Foundation\Domain\Model\Repository\Contracts\ReadRepositoryNilPortugues\Foundation\Domain\Model\Repository\Contracts\WriteRepository
InMemoryRepository Example
An example with a complete implementation can be found in the /example directory.
In the example:
- Colors are defined as a class implementing the
Identityinterface. - A
ColorRepositoryis implemented. Will throw exception if Color is not found. - Examples on how to filter are provided in the
example.phpfile.
Foundation Classes
Interaction with the repository requires the usage of the following classes or classes implementing interfaces.
-
NilPortugues\Foundation\Domain\Model\Repository\Fields
public function __construct(array $fields = [])public function add($field)public function get()
-
NilPortugues\Foundation\Domain\Model\Repository\Filter
public function filters()public function must()public function mustNot()public function should()public function clear()
-
NilPortugues\Foundation\Domain\Model\Repository\BaseFilter
public function notStartsWith($filterName, $value)public function notEndsWith($filterName, $value)public function notEmpty($filterName)public function empty($filterName)public function notNull($filterName)public function empty($filterName)public function startsWith($filterName, $value)public function endsWith($filterName, $value)public function equal($filterName, $value)public function notEqual($filterName, $value)public function includeGroup($filterName, array $value)public function notIncludeGroup($filterName, array $value)public function range($filterName, $firstValue, $secondValue)public function notRange($filterName, $firstValue, $secondValue)public function notContain($filterName, $value)public function contain($filterName, $value)public function beGreaterThanOrEqual($filterName, $value)public function beGreaterThan($filterName, $value)public function beLessThanOrEqual($filterName, $value)public function beLessThan($filterName, $value)public function clear()public function get()public function hasEmpty($filterName)//alias of empty() for BC reasons.
-
NilPortugues\Foundation\Domain\Model\Repository\Order
public function __construct($direction)public function isDescending()public function isAscending()public function __toString()public function equals($object)public function direction()
-
NilPortugues\Foundation\Domain\Model\Repository\Pageable
public function __construct($pageNumber, $pageSize, SortInterface $sort = null, FilterInterface $filter = null, FieldsInterface $fields = null)public function offset()public function pageNumber()public function sortings()public function next()public function pageSize()public function previousOrFirst()public function hasPrevious()public function first()public function filters()public function fields()
-
NilPortugues\Foundation\Domain\Model\Repository\Page
public function __construct(array $elements, $totalElements, $pageNumber, $totalPages, SortInterface $sort = null, FilterInterface $filter = null, FieldsInterface $fields = null)public function content()public function hasPrevious()public function isFirst()public function isLast()public function hasNext()public function pageSize()public function pageNumber()public function totalPages()public function nextPageable()public function sortings()public function filters()public function fields()public function previousPageable()public function totalElements()public function map(callable $converter)
-
NilPortugues\Foundation\Domain\Model\Repository\Sort
public function __construct(array $properties = [], OrderInterface $order = null)public function andSort(SortInterface $sort)public function orders()public function equals(SortInterface $sort)public function orderFor($propertyName)public function setOrderFor($propertyName, OrderInterface $order)public function property($propertyName)
Interfaces
-
NilPortugues\Foundation\Domain\Model\Repository\Contracts\Identity
public function id()public function __toString()
-
NilPortugues\Foundation\Domain\Model\Repository\Contracts\Repository
public function count(Filter $filter = null)public function exists(Identity $id)
-
NilPortugues\Foundation\Domain\Model\Repository\Contracts\PageRepository
public function findAll(Pageable $pageable = null)
-
NilPortugues\Foundation\Domain\Model\Repository\Contracts\ReadRepository
public function find(Identity $id, Fields $fields = null)public function findBy(Filter $filter = null, Sort $sort = null, Fields $fields = null)public function findByDistinct(Fields $distinctFields, Filter $filter = null, Sort $sort = null, Fields $fields = null)
-
NilPortugues\Foundation\Domain\Model\Repository\Contracts\WriteRepository
public function add($value)public function addAll(array $values)public function remove(Identity $id)public function removeAll(Filter $filter = null)public function transactional(callable $transaction)
Quality
To run the PHPUnit tests at the command line, go to the tests directory and issue phpunit.
This library attempts to comply with PSR-1, PSR-2, PSR-4.
If you notice compliance oversights, please send a patch via Pull Request.
Contribute
Contributions to the package are always welcome!
- Report any bugs or issues you find on the issue tracker.
- You can grab the source code at the package's Git repository.
Support
Get in touch with me using one of the following means:
- Emailing me at contact@nilportugues.com
- Opening an Issue
Authors
License
The code base is licensed under the MIT license.
phpddd/repository 适用场景与选型建议
phpddd/repository 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 598 次下载、GitHub Stars 达 27, 最近一次更新时间为 2015 年 06 月 17 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「repository」 「pagination」 「ddd」 「adapters」 「hexagonal」 「nil portugues」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 phpddd/repository 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 phpddd/repository 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 phpddd/repository 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
repository php library
Runn Me! Value Objects Library
Build a domain-oriented application on Laravel Framework
Laravel 5 - Repositories to the database layer
Symfony bundle for broadway/broadway.
Provides Symfony param converters for mediagone/types-common package.
统计信息
- 总下载量: 598
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 27
- 点击次数: 20
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-06-17