大圣/决策管道

简单的中间件型决策方法

0.1.0 2016-05-25 13:47 UTC

This package is auto-updated.

Last update: 2024-09-26 20:22:52 UTC


README

使用中间件方式决策,而不是使用事件管理器

用法

此用法非常简单。向管道提供一个问题对象,决策将传递此问题给所有决策参与者(决策者)。每个决策者依次可以选择做出最终决策或做出可能被以后阶段覆盖的决策。

示例

理想的用法是创建自己的问题和决策类,但如果使用PHP7,则可以使用匿名类。传递给管道的决策者必须实现PipelineDecider接口或是一个闭包。

$pipeline = new DecisionPipeline([
    function (Question $question, Decision $decision, callable $next = null) {
        if($question->cannot()) {
            throw new \RuntimeException('I cannot!');
        }
        return $next($question, $decision);
    },
    new SpecialDecider()
]);
$decision = $pipeline->decide(new SpecialQuestion());

如果没有做出决策,将返回NoDecision类。您可以通过简单地将自定义默认决策作为构造函数的第二个参数传递来返回一个自定义默认决策。

$pipeline = new DecisionPipeline([], new SpecialDefaultDecision());

每个决策者总是按照它传递给构造函数的顺序运行,因此任何优先级必须在构造函数中设置。