Synchronizing the Write Model with the Read Model

Here comes the tricky part. How do we synchronize the Read Model with the Write Model? We already said we would do it by using Domain Events captured in a Write Model transaction. For each type of Domain Event captured, a specific projection will be executed. So a one-to-one relationship between Domain Events and projections will be set.

Let's have a look at an example of configuring projections so that we can get a better idea. First of all, we need to define a skeleton for the projections:

interface Projection {     public function listensTo();     public function project($event); }

So defining an Elasticsearch projection for a PostWasCreated event would be as simple as this:

namespace Infrastructure\Projection\Elasticsearch; ...

Get Domain-Driven Design in PHP now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.