boulzy / specification
遵循 Specification 模式的 PHP 实现。
1.2.1
2023-11-01 12:52 UTC
Requires
- php: ^8.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.37
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.4
- symfony/var-dumper: ^6.3
README
实现 Specification 模式 的 PHP 库。
安装
推荐通过 Composer 进行安装。运行以下命令来安装包并将其添加到项目的 composer.json 中
$ composer require boulzy/specification
用法
设计模式 "Specification" 用于描述业务规则。规范可以链式或组合使用以应用更复杂的业务规则。
规范必须实现 Boulzy\Specification\Specification
接口,尽管推荐扩展已经实现了规范组合的抽象类 Boulzy\Specification\CompositeSpecification
。
<?php
class TrueSpecification extends Boulzy\Specification\CompositeSpecification
{
public function isSatisfiedBy($candidate) : bool
{
return true === $candidate;
}
}
class FalseSpecification extends Boulzy\Specification\CompositeSpecification
{
public function isSatisfiedBy($candidate) : bool
{
return false === $candidate;
}
}
$trueSpecification = new TrueSpecification();
$falseSpecification = new FalseSpecification();
$isSatisfied = $trueSpecification->isSatisfiedBy(true); // true
$isSatisfied = $trueSpecification->isSatisfiedBy(false); // false
$isSatisfied = $falseSpecification->isSatisfiedBy(true); // false
$isSatisfied = $falseSpecification->isSatisfiedBy(false); // true
$isSatisfied = $trueSpecification->not()->isSatisfiedBy(true); // false
$isSatisfied = $trueSpecification->not()->isSatisfiedBy(false); // true
$isSatisfied = $trueSpecification->and($falseSpecification)->isSatisfiedBy(true); // false
$isSatisfied = $trueSpecification->and($falseSpecification)->isSatisfiedBy(false); // false
$isSatisfied = $trueSpecification->andNot($falseSpecification)->isSatisfiedBy(true); // true
$isSatisfied = $trueSpecification->or($falseSpecification)->isSatisfiedBy(true); // true
查看 单元测试 以获取简单示例。
许可协议
此项目采用 MIT 许可协议。