规范模式

0.3.2 2016-11-03 08:38 UTC

This package is auto-updated.

Last update: 2024-09-25 21:49:35 UTC


README

Build Status

Spec 是 PHP 实现的规范模式,可用于构建简单或复杂的业务规则。

在计算机编程中,规范模式 是一种特定的 软件设计模式,其中可以通过使用布尔逻辑将业务规则连接起来以重新组合业务规则。该模式常用于 领域驱动设计 的上下文中。

https://en.wikipedia.org/wiki/Specification_pattern

该库使用惊人的 expression-language 组件来提供表达式 DSL。

安装

$ composer require danfekete/spec

使用

1. 简单表达式

$d = [2];
$spec = new Specification(new ExpressionSpec('1 > d[0]'));
$spec->isSatisfiedBy(['d' => $d]); // return false

2. 布尔链

/*
 * You can use classes in expression code
*/
class Nan {

    public function isNan($value)
    {
        return is_nan($value);
    }

}

$spec = new Specification(new AndSpec(
    new NotSpec(new ExpressionSpec('checker.isNan(d)')),
    new OrSpec(
        new ExpressionSpec('d != 12'),
        new ExpressionSpec('d > 10')
    ),
    new AndSpec(
        new ExpressionSpec('d > 5'),
        new ExpressionSpec('d < 20')
    )
));

$spec->isSatisfiedBy(['d' => 17, 'checker' => new Nan()]); // return true

待办事项

  1. 永久缓存解析代码
  2. 数组构建器,从数组构建规范
  3. JSON 构建器

许可

MIT,见 LICENSE