kodcube / command-bus
此包的最新版本(dev-master)没有可用的许可证信息。
中间件命令总线
dev-master
2016-07-17 06:24 UTC
Requires
- php: >=7.0.0
- kodcube/dependency-injection: ^0.1.0
- kodcube/invoker: ^0.1.0
This package is not auto-updated.
Last update: 2024-09-14 19:31:11 UTC
README
一个简单的命令总线,使用中间件模式处理命令。
它被设计为利用依赖注入和自动装配支持。所有的依赖都可以通过依赖注入容器进行配置和重写。
主要功能
- 所有依赖项都在构造时注入
- 所有依赖项都基于接口
- 根据自定义中间件不同地路由命令
- 使用简单的数组进行中间件配置
- 加载中间件时使用依赖注入容器
- 加载处理程序时使用依赖注入容器
限制
- 除了 __constructor 方法之外,不注入其他方法的依赖项
- 不注入设置器方法的依赖项
要求
- PHP 7
- Container-Interop - 依赖注入容器
- GunnaPHP\Invoker
可选
- KodCube\DependencyInjection - 依赖注入容器
- KodCube\MessageBus - 将命令调度到后台进程
用法
创建命令总线
这将创建一个具有默认处理程序检测功能的命令总线
$commandbus = new KodCube\CommandBus\CommandBus( new KodCube\CommandBus\MiddlewareManager( new KodCube\DependencyInjection\Container() ) );
或使用依赖注入容器
DI Config [ MiddlewareManagerInterface::class => MiddlewareManager::class, ContainerInterface::class => Container::class ] $commandbus = $di->get(KodCube\CommandBus\CommandBus::class);
调度命令
假设您有以下命令和处理程序
命令类:MyCommand
处理程序类:MyHandler
$command = new MyCommand(); $response = $commandbus($command); or $response = $commandbus->handle($command);
相当于
$command = new MyCommand(); $handler = new MyHandler(); $response = $handler($command);
重写命令处理程序
默认处理程序中间件允许您重写负责处理命令的处理程序
$commandbus = new KodCube\CommandBus\CommandBus( new KodCube\CommandBus\MiddlewareManager( new KodCube\DependencyInjection\Container(), new KodCube\CommandBus\Middleware\Handler( [ MyCommand::class => MyNewHandler::class ] ) ) );
相当于
$command = new MyCommand(); $handler = new MyNewHandler(); $response = $handler($command);
或使用依赖注入容器
DI Config [ MiddlewareManagerInterface::class => MiddlewareManager::class, ContainerInterface::class => Container::class Handler::class => [ [ MyCommand::class => MyNewHandler::class ] ] ] $commandbus = $di->get(KodCube\CommandBus\CommandBus::class);
多个中间件处理程序
使用中间件功能,我们可以轻松地添加多个命令处理程序,以便将一些命令与其他命令以不同的方式处理。
在这个例子中,我们添加了一个可队列的中间件处理程序,该处理程序将查找实现了 CommandQueueInterface::class 的命令。
这些命令将被路由到消息总线进行后台进程处理,而所有其他命令将由最终中间件处理程序处理。
$commandbus = new KodCube\CommandBus\CommandBus( new KodCube\CommandBus\MiddlewareManager( [ KodCube\CommandBus\Middleware\Queue::class, KodCube\CommandBus\Middleware\Handler::class ], new KodCube\DependencyInjection\Container(), ) );
或使用依赖注入容器
DI Config [ MiddlewareManagerInterface::class => MiddlewareManager::class, MiddlewareManager::class => [ Middleware\Queue::class, Middleware\Handler::class ], ContainerInterface::class => Container::class, Handler::class => [ [ MyCommand::class => MyNewHandler::class ] ] ] $commandbus = $di->get(KodCube\CommandBus\CommandBus::class);