CQRS and Event Sourcing are becoming buzzwords nowadays. This presentation tries to clarify both concepts and present a simple example application, written with those powerful architectures
! namespace AcmeShop\Billing\DomainModel\Order; ! interface OrderRepository { /** @return Order */ public function get(OrderId $anId); ! /** @return Order[] */ public function getByUser(UserId $aUserId); }
! namespace AcmeShop\Billing\DomainModel\Order; ! interface OrderRepository { /** @return Order */ public function get(OrderId $anId); ! /** @return Order[] */ public function byUser(UserId $aUserId); ! /** @return OrderWithAge[] */ public function allGroupedByAge(); }
! namespace AcmeShop\Billing\DomainModel\Order; ! interface OrderRepository { /** @return Order */ public function get(OrderId $anId); ! /** @return Order[] */ public function byUser(UserId $aUserId); ! /** @return OrderWithAge[] */ public function allGroupedByAge(); ! /** @return OrderWithCarrier[] */ public function allGroupedByCarrier(); }
Command sends Command Handler is handled by Write Model uses Event Subscriber triggers writes reads from Read Model queries User Interface synchronizes with returns
Command sends Command Handler is handled by Write Model uses Event Subscriber triggers writes reads from Read Model queries Eventual Consistency™ User Interface synchronizes with returns