Reusable domain layers. Shipped with industry standard infrastructure.
msgphp/* repositories are not actively developed/supported anymore.
Use in production on your own risks.
If you want to do some hotfixes - please do PR directly in target repository instead of this monorepository.
MsgPHP is a project that aims to provide reusable domain layers for your application. It has a low development time
overhead and avoids being overly opinionated.
It follows Semantic Versioning, yet during development phase a package can be marked @experimental
to indicate
“BC breaks” could be introduced.
The domain layer is a collection of entity objects and related business logic that is designed to represent the
enterprise business model. The major scope of this layer is to create a standardized and federated set of objects, that
could be potentially reused within different projects. (source)
Currently supported domain layers are:
On the roadmap are:
Organization
File
Taxonomy
msgphp/domain
) integrates with YOUR domain layer (it’s dependency free by design)Each domain layer provides a set of messages to consume it. Typically the messages are categorized into command-, event-
and query-messages.
The main advantage is we can intuitively create an independent flow of business logic. It provides consistency in
handling our business logic by dispatching the same message in e.g. web as well as CLI.
$anyMessageBus->dispatch(new CreateSomething(['field' => 'value']));
A command-message is dispatched and picked up by its handler to do the work. This handler on itself dispatches a new
event-message (e.g. SomethingCreated
) to notify the work is done.
A custom handler can subscribe to the SomethingCreated
event to further finalize the business requirements (e.g.
dispatch another commmand-message).
class MakeSomethingWork
{
private $bus;
public function __construct(YourFavoriteBus $bus)
{
$this->bus = $bus;
}
public function __invoke(SomethingCreated $event)
{
// do work, or better delegate work:
$this->bus->dispatch(new LetSomethingWork($event->something));
}
}
#msgphp
channel or raise an issueSee CONTRIBUTING.md