go1 / command_bus
此包的官方仓库似乎已不存在,因此该包已被冻结。
dev-master
2018-02-01 01:54 UTC
Requires
- php: ^7.1
This package is not auto-updated.
Last update: 2024-05-04 13:43:16 UTC
README
定义一个简单的命令
- 创建一个新的类,扩展自
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 } }
- 通过
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
- 创建一个新的类,扩展自
go1\command\Command
namespace devel; use go1\command\Command; class CommandFoo extends Command { # Now command only contains data }
- 创建一个新的类,实现自
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 } }
- 通过 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
- 创建一个新的类,实现自
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(); } }
- 将中间件附加到 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);