Alexander Miertsch, seines Zeichens Gründer und CEO der prooph software GmbH, kam mit einem sehr interessanten Thema zur SymfonyLive: dem Event Sourcing. Das von ihm mitentwickelte Framework prooph ist kompatibel zu allen großen PHP-Frameworks wie Symfony, Zend und Laravel und auch mit diversen anderen Systemen nutzbar.
Beginnen sollte man immer mit einem Event Storming, bei dem man sich mit seinen Stakeholdern zusammensetzt und ein Brainstorming hinsichtlich der Domain Events und Ziele vollzieht und mögliche Szenarien betrachtet. Anschließend erstellt man Ablaufdiagramme aus den Domain Event-Systemen – dies können beispielsweise bei einem Bestellsystem die Domains OrderPlaced, OrderPayed und OrderShipped sein. Die Richtung der Benachrichtigungen werden durch Pfeile symbolisiert. OrderShipped wird erst ausgeführt, wenn es sowohl von OrderPlaced, als auch von OrderPayed eine Benachrichtigung erhalten hat.
Speichert man die States eines Objekts direkt beim Objekt selbst, kann es passieren, dass beim sequentiellen Abarbeiten der jeweiligen Funktion Fehler auftreten und die Buchungen nur teilweise ausgeführt werden, beispielsweise wenn die Datenbank für einen Moment streikt – hier kann Event Sourcing effektiv helfen, Fehler zu vermeiden. Die States werden nicht mehr in der Datenbank gespeichert, sondern in einem Event Stream, der kontinuierlich die Events chronologisch sichert. Der aktuelle Stand des Systems kann nun durch ein Left Folding jederzeit aus dem Event Stream berechnet werden. Auch können durch Betrachtung vergangener Event-Teilketten die Gründe für Problemfälle schnell rekonstruiert und dadurch gefunden werden. Zudem besteht die Möglichkeit für zeitbasierte Queries, beispielsweise wenn man herausfinden möchte, welche Nutzer ihren Benutzernamen innerhalb der ersten fünf Minuten nach ihrer Anmeldung geändert haben.
Für die Nutzung mit Symfony kann man auf das Bundle prooph/event-store-symfony-bundle zurückgreifen, das sowohl das Event-Sourcing-Modul, als auch den Event-Store enthält.