boulzy/specification

遵循 Specification 模式的 PHP 实现。

1.2.1 2023-11-01 12:52 UTC

This package is auto-updated.

Last update: 2024-09-30 01:38:13 UTC


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 许可协议