go1/command_bus

此包的官方仓库似乎已不存在,因此该包已被冻结。

dev-master 2018-02-01 01:54 UTC

This package is not auto-updated.

Last update: 2024-05-04 13:43:16 UTC


README

定义一个简单的命令

  1. 创建一个新的类,扩展自 go1\command\Command
namespace devel;

use go1\command\Command;

class CommandFoo extends Command 
{
    # Inject dependencices
    public function __constructor() 
    {
    }
    
    public function execute()
    {
        $payload = $this->getPayload();
        // Do your bussiness
    }
} 
  1. 通过 CommandBus 运行 CommandFoo
namespace devel;

use go1\command\CommandBus;

$commandFoo = new CommandFoo();
$commandFoo->setPayload($data = 'your data');

$commandBus = new CommandBus();
$commandBus->execute($commandFoo);

定义具有处理器的命令

如果你的逻辑相当复杂,并且想将其移动到处理器服务中,你可以创建一个新的处理器类并将其附加到命令总线。

注意:CommandBus 会自动映射你的命令与处理器。遵循命名模式,如果命令是 CommandFoo,则处理器必须是 CommandFooHandler

  1. 创建一个新的类,扩展自 go1\command\Command
namespace devel;

use go1\command\Command;

class CommandFoo extends Command 
{
    # Now command only contains data
} 
  1. 创建一个新的类,实现自 go1\command\CommandHandlerInterface
 namespace devel;
 
 use go1\command\CommandHandlerInterface;
 
 class CommandFooHandler implements CommandHandlerInterface 
 {
     # Inject dependencices
     public function __constructor() 
     {
     }
     
     public function handle(CommandInterface $command) 
     {
       # Do your bussiness here
     }
 } 
 
  1. 通过 CommandBus 运行命令
namespace devel;

use go1\command\CommandBus;
use go1\command\CommandFooHandler;
use go1\command\CommandFoo;

$commandFoo = new CommandFoo();
$commandFoo->setPayload($data = 'your data');

$commandFooHandler = new CommandFooHandler();

$commandBus = new CommandBus([$commandFooHandler]);
$commandBus->execute($commandFoo);

将中间件附加到 CommandBus

  1. 创建一个新的类,实现自 go1\command\CommandMiddlewareInterface
namespace devel;
  
use go1\command\CommandMiddlewareInterface;

class CommandFooHandler implements CommandMiddlewareInterface 
{
    # Inject dependencices
    public function __constructor() 
    {
    }
    
    public function invoke(CommandInterface $command) 
    {
        # Do your bussiness here
        
        # If you can interrups command by:
        $command->stopPropagation();     
    }
  
}  
  1. 将中间件附加到 CommandBus
namespace devel;

use go1\command\CommandBus;
use go1\command\CommandFooHandler;
use go1\command\CommandFoo;

$commandFoo = new CommandFoo();
$commandFoo->setPayload($data = 'your data');

$commandFooHandler = new CommandFooHandler();
$commandFooMiddleware = new CommandFooMiddleware()

$commandBus = new CommandBus([$commandFooHandler], [$commandFooMiddleware]);
$commandBus->execute($commandFoo);