/commander

Command Bus abstraction.

Primary LanguagePHPMIT LicenseMIT

Commander

Software License Build Status codecov

Command Bus abstraction for PHP.

Installation

composer require robotusers/commander

Command Bus abstraction

This library provides a CommandBusInterface which a command bus should implement.

Using the command bus

use Robotusers\Commander\CommandBusAwareInterface;
use Robotusers\Commander\CommandBusAwareTrait;

class OrdersController implements CommandBusAwareInterface
{
   use CommandBusAwareTrait;

   public function makeOrder()
   {
        ...
        $command = new MakeOrderCommand($data);
        $this->handleCommand($command);
        ...
   }

}

Adapters

The library provides adapters for the most common command bus implementations.

Tactician

composer require league/tactician
use League\Tactician\CommandBus;
use Robotusers\Commander\Adapter\TacticianAdapter;

$commandBus = new CommandBus($middleware);
$adapter = new TacticianAdapter($commandBus);

$controller->setCommandBus($adapter);

SimpleBus/MessageBus

composer require simple-bus/message-bus
use Robotusers\Commander\Adapter\SimpleBusAdapter;
use SimpleBus\Message\Bus\Middleware\MessageBusSupportingMiddleware;

$commandBus = new MessageBusSupportingMiddleware();
$adapter = new SimpleBusAdapter($commandBus);

$controller->setCommandBus($adapter);

PSB - ProophServiceBus

composer require prooph/service-bus
use Prooph\ServiceBus\CommandBus;
use Robotusers\Commander\Adapter\ServiceBusAdapter;

$commandBus = new CommandBus();
$adapter = new ServiceBusAdapter($commandBus);

$controller->setCommandBus($adapter);

Writing a custom adapter

You can write your custom adapter. The adapter must implement Robotusers\Commander\CommandBusInterface.

class MyAdapter implements CommandBusInterface
{
    public function handle($command)
    {
        //handle a command
    }
}