tag:blogger.com,1999:blog-4021402902609986484.post6162835569122356710..comments2017-01-04T00:39:31.122+01:00Comments on Oregami.org (German): Domain Driven Design, CQRS, Event Sourcing, Hexagonale Architektur & mehrAnonymoushttp://www.blogger.com/profile/01044014289492674994noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-4021402902609986484.post-24782104044595653352017-01-04T00:39:31.122+01:002017-01-04T00:39:31.122+01:00Danke für den ausführlichen Kommentar!
Muss darübe...Danke für den ausführlichen Kommentar!<br />Muss darüber gut nachdenken 😎Anonymoushttps://www.blogger.com/profile/01044014289492674994noreply@blogger.comtag:blogger.com,1999:blog-4021402902609986484.post-36770165342414635452016-12-27T00:21:25.625+01:002016-12-27T00:21:25.625+01:00Hi Sebastian,
seit einigen Jahren verfolge ich nu...Hi Sebastian,<br /><br />seit einigen Jahren verfolge ich nun schon die Entwicklung dieses Projekts und finde es immer wieder interessant - Mir geht es als Software-Entwickler genau so (und so sollte es wohl auch sein). Die gesamte Thematik verändert sich fortwährend, was das Ganze auch so spannend macht.<br /><br />Allerdings sind mir hier ein paar (wenige :-) ) Dinge aufgefallen:<br /><br />Beim Event-Sourcing werden zum Lesen nicht alle Events jedes Mal erneut durchgespielt. Viel mehr wird ein Read-Model aufgebaut (Was die Verbindung zu CQRS mehr oder weniger notwendig macht), welches dann für Abfragen genutzt wird. In der Tat ist aber das Read-Model (bzw. die Read-Models) durch ein "Replay" der Events beliebig oft erneut wieder aufbaubar (Siehe Dein Punkt 7).<br /><br />Allerdings ist Event-Sourcing auch mit ein paar Fallstricken verbunden: Man muss als relativ "neue" Technologie aufpassen, was man tut (Und auch die Teammitglieder, da vielen dieses Konzept nicht bekannt ist). Wenn man Busniessregeln später ändert, muss man auf schon existierende Events achten (z. B. durch Versionierung der Eventtypen). Wie handhabt man asynchrones Processing der Events. Größerer initialer Aufwand (Commands, Events, Handling usw.) - Es sind schon einige Sachen :-)<br /><br />> Die Benutzer von Oregami senden bei der Eingabe von Daten Commands, deren Zustandsänderungen als Events gespeichert werden. Nach einer Kontrolle der Eingaben durch so etwas wie einen Moderator werden die Events (oder nur einige davon) "freigegeben", was zu einer dauerhaften Änderung führt und dann zukünftige lesenden Abfragen entsprechend bedient.<br /><br />Dies ist auf der Ebene der Business-Logik, nicht derer von Event Sourcing angesiedelt.Ein Beispiel aus der Buchhaltung:<br />1. Mitarbeiter erzeugt bei einem Geschäftsessen Kosten<br />2. Er reicht die Kosten ein<br />3. Jemand prüft, ob das gerechtfertigt ist<br />4. Die Kosten werden gebucht.<br />5. Die Buchung fließt in den Geschäftsbericht ein<br /><br />(Nur um sicherzugehen, dass der springende Punkt ankommt: Das Buchen entspricht der Persistierung und kann nicht so ohne weiteres rückgängig gemacht werden.) <br /><br />Nur die Punkte 4 und 5 haben mit Event-Sourcing zu tun. Der Rest ist Busines-Logik und hat damit nichts zu tun. Analog zu Deinem Beispiel würde es hingegen so aussehen:<br /><br />1. Mitarbeiter erzeugt bei einem Geschäftsessen Kosten<br />2. Er reicht die Kosten ein<br />3. Die Kosten werden gebucht.<br />4. Die Buchung fließt in den Geschäftsbericht ein<br />5. Jemand prüft, ob das gerechtfertigt ist<br /><br />Stattdessen ist es eher so, dass Du bei Deinem Beispiel folgenden Use-Case hast:<br />1. User tut etwas<br />2. Validierung<br />3. Persistiere UserDidSomething<br />4. Ändere ggf. das Read-Model<br />5. Admin schaltet die Aktion frei<br />6. Validierung<br />7. Persistiere SomethingConfirmed<br />8. Ändere ggf. das Read-Model<br /><br />An Punkt 3 und 7 sieht man, dass es sich hier um zwei getrennte Vorgänge und nicht um einen handelt.<br /><br /><br />Aus meiner Erfahrung heraus würde ich auch erst mal nur mit einem kleinen Subset der Bounded Contextes beginnen, da Du garantiert auch hier auf Dinge stoßen wirst, die Dir umso doller auf die Füße fallen, je größer Deine Anfangsbasis ist. Immer an das MVP denken und nicht in Schönheit sterben :-)<br /><br />Sehr unterhaltsamer Blog übrigens!Anonymoushttps://www.blogger.com/profile/14870813227345650953noreply@blogger.com