2017 © Pedro Peláez
 

library commander

Command bus implementation: Commands and domain events

image

jildertmiedema/commander

Command bus implementation: Commands and domain events

  • Tuesday, October 28, 2014
  • by jildertmiedema
  • Repository
  • 1 Watchers
  • 0 Stars
  • 684 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 2 Versions
  • 4 % Grown

The README.md

# Domain commander

This package is able run domain commands easily. Commands are used to separate domain logic from your php framework., (*1)

This package is based on Laravel Commander build by JeffreyWay., (*2)

Installation

Install through Composer., (*3)

"require": {
    "jildertmiedema/commander": "~0.1"
}

What does it do

  • It creates a command object. The command object is data transfer object between the framework/controller and the domain logic.
  • It will fill the command object with the request data (For example $_GET, $_POST, $app['request']->query->all()).
  • It will try to find a validator class, when it's found it will validate the input.
  • If decorators have been set it will execute the decorators. (For example a sanitizer).
  • It will find and execute the handler for the command.

Integrate to the framework

Silex

This package can easily be used in Silex., (*4)

It will try to find a handler(required) and a validator (not required) from application container using the following convention., (*5)

//without namespace "ExampleCommand"
$app[$className . '.handler']; // exampleCommand.handler
$app[$className . '.validator']; // exampleCommand.validator

//with namespace "Acme\Domain\ExampleCommand"
$app[$className . '.handler']; // acme.domain.exampleCommand.handler
$app[$className . '.validator']; // acme.domain.exampleCommand.validator

Usage:, (*6)

$app->register(new JildertMiedema\Commander\Silex\CommanderServiceProvider());

Example:, (*7)

class TestCommand {
    public $test;
    public $extra;

    public function __construct($test, $extra)
    {
        $this->test = $test;
        $this->extra = $extra;
    }
}

class TestCommandHandler implements CommandHandler
{

    public function handle($command)
    {
        //handle the command
    }
}

$app['testCommand.handler'] = $app->share(function() use ($app) {
    return new TestCommandHandler();
});

$app->get('/', function() use ($app) {
    return $app['commander.executor']->execute('TestCommand');
});

For a full example see silex.php, (*8)

For usage in controllers see CommanderController.php, (*9)

Vanilla php

To use commander in another framework you can use this code:, (*10)

use JildertMiedema\Commander\Manager;
use JildertMiedema\Commander\Vanilla\Executor;

$manager = new Manager();
$executor = new Executor($manager);

echo $executor->execute('TestCommand', null, ['TestSanitizer']);

The vanilla php solution does not support out-of-the-box dependency injection, therefore you need to implement a translator and a resolver., (*11)

An example vanilla.php, (*12)

Creating your own translator and resolver

For integration with a another framework you can implement your own translator and resolver., (*13)

$translator = new YourOwnCommandTranslator; // Must implement `JildertMiedema\Commander\CommandTranslatorInterface`
$resolver =  new YourOwnResolver; // Must implement `JildertMiedema\Commander\ResolverInterface`
$defaultCommandBus = new DefaultCommandBus($translator, $resolver);
$commandBus = new ValidationCommandBus($defaultCommandBus, $translator, $resolver);
$manager = new Manager($commandBus);

Examples

Run the examples, (*14)

cd YOUR_PACKAGE_DIR
cd examples
php -S localhost:8000

Visit:, (*15)

http://localhost:8000/silex.php?test=test%20%20%20&extra=123
http://localhost:8000/silex.php/sanitizer?test=test%20%20%20&extra=123
http://localhost:8000/silex.php/controller?test=test%20%20%20&extra=123
http://localhost:8000/vanilla.php?test=test%20%20%20&extra=123

The Versions

28/10 2014

dev-master

9999999-dev

Command bus implementation: Commands and domain events

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

by Jildert Miedema

command bus silex commander domain events

04/08 2014

v0.1.0

0.1.0.0

Commands and domain events

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

by Jildert Miedema

command bus silex commander domain events