kodcube/command-bus

此包的最新版本(dev-master)没有可用的许可证信息。

中间件命令总线

dev-master 2016-07-17 06:24 UTC

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);