战术 / 命令总线包
通过命令总线使用CommandHandlers处理命令
v2.0.0
2024-06-26 12:36 UTC
Requires
- php: >=5.5
- symfony/dependency-injection: ^4.2|^5.0|^6.0|^7.0
- symfony/framework-bundle: ^4.2|^5.0|^6.0|^7.0
This package is not auto-updated.
Last update: 2024-09-30 08:33:32 UTC
README
假设我们有一个名为RegisterUser的命令。
<?php use Pringles\DomainBundle\CommandBus\Command; class RegisterUser implements Command { public $firstname; public $lastname; }
我们希望处理该命令。
<?php use Pringles\DomainBundle\CommandBus\CommandHandler; class RegisterUserHandler implements CommandHandler { private $personRepository; public function __construct(PersonRepository $personRepository) { $this->personRepository = $personRepository; } public function handle(RegisterUser $registerUser) { $person = Person::register($registerUser->firstname, $registerUser->lastname); } }
我们可以设置SimpleCommandBus,注册处理程序并处理该命令。
<?php use Pringles\DomainBundle\CommandBus\SimpleCommandBus; function someController() { $bus = new SimpleCommandBus(new ShortNameStrategy()); $bus->registerHandler(new RegisterUserHandler($personRepository)); $cmd = new RegisterUser; $cmd->firstname = 'Aaron'; $cmd->lastname = 'Muylaert'; $bus->handle($cmd); }
SimpleCommandBus根据其名称查找处理程序。名为Test的命令需要名为TestHandler的注册处理程序。如果没有找到处理程序,则不执行任何操作。
哦,还有一个小的规则,命令处理程序不允许返回值。
有一个名为command_bus的命令总线服务。您可以通过将处理程序注册为服务并将服务标记为command_handler来注册处理程序。使用方法如下
<?php $cmd = new Test; $cmd->value = 'Foo'; $this->get('command_bus')->handle($cmd);
\m/