战术/命令总线包

通过命令总线使用CommandHandlers处理命令

安装次数7,036

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 10

分支: 0

公开问题: 0

类型:symfony-bundle

v2.0.0 2024-06-26 12:36 UTC

This package is not auto-updated.

Last update: 2024-09-30 08:33:32 UTC


README

Build Status Scrutinizer Code Quality

假设我们有一个名为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/