2017 © Pedro Peláez
 

library minibus

A lightweight command bus implementation

image

austinhyde/minibus

A lightweight command bus implementation

  • Saturday, January 2, 2016
  • by austinhyde
  • Repository
  • 1 Watchers
  • 2 Stars
  • 11 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Minibus - A tiny Command Bus

Minibus helps separate your interface from your implementation - like your REST handlers from your database calls., (*1)

It was inspired by Grafana's command bus and the Tactician command bus library., (*2)

Why do I need this?

What a command bus allows is the decoupling of what needs done from how it gets done. As systems get more complex, keeping the interface separate from the implementation like this improves maintainability., (*3)

Ross Tuck gave an exemplary talk outlining service layers and command busses - I recommend you watch this if you think you need a command bus., (*4)

Installation

Via composer: composer require austinhyde/minibus, (*5)

Usage

Minibus provides an extremely simple command bus implementation out of the box: Minibus\Bus., (*6)

This gives you everything you need to begin dispatching commands and publishing events:, (*7)

$bus = new Minibus\Bus;

$bus->addHandler(function(NewUserCommand $cmd) use ($db, $bus) {
  $row = $db->query("INSERT INTO users (username, email) VALUES (?, ?) RETURNING *",
    [$cmd->username, $cmd->email]);
  $user = User::fromRow($row);
  $bus->publish(new UserAddedEvent($user));
  return $user;
});

$bus->addListener(function(UserAddedEvent $event) use ($log) {
  $log->info("Added user: " . $event->getUser()->getUsername());
});

$router->get(function($req, $res) use ($bus) {
  $cmd = new NewUserCommand($req->body->username, $req->body->email);
  $user = $bus->dispatch($cmd);
  return $user->toJson();
});

addHandler and addListener take any callable as their first argument, and automatically infer the type of command or event they'll be registered for by reflecting the type hint of the first parameter. If you want to override the "type" of the command or event (not necessarily a class name), you can specify a type as the second parameter., (*8)

dispatch and publish will accept any value as a command or event, although if they're an object, Minibus will use the class name to automatically find the correct command handler or event listeners. Again, you can override the "type" by passing it as the second parameter., (*9)

The Versions

02/01 2016

dev-master

9999999-dev

A lightweight command bus implementation

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

by Austin Hyde

02/01 2016

v0.1.1

0.1.1.0

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

by Austin Hyde

27/12 2015

v0.1.0

0.1.0.0

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

by Austin Hyde