2017 © Pedro Peláez
 

library domain-event

Tools to create the domain layer of your DDD application

image

gpslab/domain-event

Tools to create the domain layer of your DDD application

  • PHP
  • 3 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 15 Versions
  • 25 % Grown

The README.md

Latest Stable Version PHP from Travis config Total Downloads Build Status Coverage Status Scrutinizer Code Quality StyleCI License, (*1)

Domain event

Library to create the domain layer of your Domain-driven design (DDD) application, (*2)

Installation

Pretty simple with Composer, run:, (*3)

composer require gpslab/domain-event

Base usage

Create a domain event, (*4)

use GpsLab\Domain\Event\Event;

final class PurchaseOrderCreatedEvent implements Event
{
    private $customer_id;

    private $create_at;

    public function __construct(CustomerId $customer_id, \DateTimeImmutable $create_at)
    {
        $this->customer_id = $customer_id;
        $this->create_at = $create_at;
    }

    public function customerId()
    {
        return $this->customer_id;
    }

    public function createAt()
    {
        return $this->create_at;
    }
}

Raise your event, (*5)

use GpsLab\Domain\Event\Aggregator\AbstractAggregateEvents;

final class PurchaseOrder extends AbstractAggregateEventsRaiseInSelf
{
    private $customer_id;

    private $create_at;

    public function __construct(CustomerId $customer_id)
    {
        $this->raise(new PurchaseOrderCreatedEvent($customer_id, new \DateTimeImmutable()));
    }

    /**
     * The raise() method will automatically call this method.
     * Since it's an event you should never do some tests in this method.
     * Try to think that an Event is something that happened in the past.
     * You can not modify what happened. The only thing that you can do is create another event to compensate.
     * You do not obliged to listen this event and are not required to create this method.
     */
    protected function onPurchaseOrderCreated(PurchaseOrderCreatedEvent $event)
    {
        $this->customer_id = $event->customerId();
        $this->create_at = $event->createAt();
    }
}

Create listener, (*6)

class SendEmailOnPurchaseOrderCreated
{
    private $mailer;

    public function __construct($mailer)
    {
        $this->mailer = $mailer;
    }

    public function __invoke(PurchaseOrderCreatedEvent $event)
    {
        $this->mailer->send('recipient@example.com', sprintf(
            'Purchase order created at %s for customer #%s',
            $event->createAt()->format('Y-m-d'),
            $event->customerId()
        ));
    }
}

Dispatch events, (*7)

use GpsLab\Domain\Event\Bus\ListenerLocatedEventBus;
use GpsLab\Domain\Event\Listener\Locator\DirectBindingEventListenerLocator;

// first the locator
$locator = new DirectBindingEventListenerLocator();
// you can use several listeners for one event and one listener for several events
$locator->register(PurchaseOrderCreatedEvent::class, new SendEmailOnPurchaseOrderCreated(/* $mailer */));

// then the event bus
$bus = new ListenerLocatedEventBus($locator);

// do what you need to do on your Domain
$purchase_order = new PurchaseOrder(new CustomerId(1));

// this will clear the list of event in your AggregateEvents so an Event is trigger only once
$bus->pullAndPublish($purchase_order);

Documentation

License

This bundle is under the MIT license. See the complete license in the file: LICENSE, (*8)

The Versions

02/10 2017

dev-master

9999999-dev https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

02/10 2017

2.1.x-dev

2.1.9999999.9999999-dev https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

02/10 2017

v2.1.0

2.1.0.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

14/07 2017

v2.0.1

2.0.1.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

13/07 2017

v2.0.0

2.0.0.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

13/07 2017

2.0.x-dev

2.0.9999999.9999999-dev https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

23/06 2017

1.6.x-dev

1.6.9999999.9999999-dev https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

predis symfony infrastructure ddd domain-event

21/04 2017

v1.3.1

1.3.1.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

21/04 2017

v1.3.0

1.3.0.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

16/11 2016

v1.2.0

1.2.0.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

30/09 2016

v1.1.0

1.1.0.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires

29/09 2016

v1.0.0

1.0.0.0 https://github.com/gpslab/domain-event

Tools to create the domain layer of your DDD application

  Sources   Download

MIT

The Requires

  • php >=5.5.0

 

The Development Requires