Download the PHP package zeeloengineering/php-shared-kernel without Composer
On this page you can find all versions of the php package zeeloengineering/php-shared-kernel. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download zeeloengineering/php-shared-kernel
More information about zeeloengineering/php-shared-kernel
Files in zeeloengineering/php-shared-kernel
Package php-shared-kernel
Short Description Simple shared kernel for DDD applications, with many scaffolding code for Hexagonal architecture, event sourcing, etc.
License MIT
Informations about the package php-shared-kernel
Shared kernel
Simple shared kernel for DDD applications, with many scaffolding code for Hexagonal architecture, event sourcing, etc.
Entities
You can create a new entity just inheriting from Entity class:
Implementing constructor is mandatory as Id is controlled from base class.
As far as you have inherited from Entity, you have an EventStreamAvailable, so you can record events and retrieve the EventStream:
Entity collections
As you are eventually going to return arrays of entities from your repositories, I have prepared a simple entity collection for you to inherit:
DomainEvents
You have a base class DomainEvent to inherit from when you want to create an Event. As simple as that:
UseCase
A very simple way to access Domain and Infrastructure layers from your console commands or controllers is through an Application UseCase. A UseCase receives a Request and may return (or null) a Response. Let's see an example:
Probably you have noted the DataTransformer object. It provides functionality to transform any object into any other in the application layer. This means you can use the same UseCase to retrieve information in different formats just injecting a different data transformer. This is basic to not return domain objects to the infrastructure layer.
I recommend defining your use cases with different names based in the data transformer you inject. For example:
- get_user_by_id_use_case_data_transformed_to_array
- get_user_by_id_use_case_data_transformed_to_json
This can be easily done if you use a decent dependency injector.
CQRS
CQRS stands for Command Query Responsibility Segregation and basically means that a method should either return a value of modify it's context, never both things at the same time.
I have provided with some useful interfaces to work both with Commands (to change context) and Queries (to retrieve information). This is used to be done through command and query buses. A bus accepts some kind of request (a Command or a Query) and processes it through a handler (a CommandHandler or a QueryHandler). Middlewares can be added along the process.
So in the namespace StraTDeS\SharedKernel\Application\CQRS you have abstract classes for both Command and Query, and interfaces for both CommandHandler and QueryHandler.
Repositories
There are some useful interfaces to implement repositories, including get, find, all interface and save interface. Apart, I have included two basic doctrine repositories, DoctrineRepository and DoctrinePersistentRepository. You can use it to have some features for free:
All versions of php-shared-kernel with dependencies
doctrine/orm Version ^2.5
php-amqplib/php-amqplib Version ^2.7
guzzlehttp/guzzle Version ^6.3