2012-04-08 2 views
1

Ich mache mich auf die Verwendung von Event Sourcing-Muster, und es gibt eine Sache, die mich stören.Wie mit Code-Änderung in Ereignishandlern mit Event Sourcing-Muster umgehen

Was passiert, wenn ich den Quellcode für einige Event-Handler ändere, das nächste Mal, wenn ich den Object-State neu bilde (Wiedergabe-Ereignisse), bekomme ich möglicherweise ein völlig anderes Objekt, oder schlimmer kann ich nichts von einer Ausnahme in einem bekommen von Handlern, die eine Regelprüfung durchführen.

Bedeutet es, dass Ereignisbehandlungscode unveränderlich sein sollte? (Sobald Sie es geschrieben haben, berühren Sie es nie wieder). Ich mag diese Idee wirklich nicht.

Nach nicht langer Forschung und zu denken, kam ich zur Schlussfolgerung, dass Ereignis eine Nachricht ist und wie jede mögliche Mitteilung in zum Beispiel SOA es sollte versioniert werden.

Antwort

1

Ich gehe davon aus, dass wir die Implementierung von http://www.martinfowler.com/eaaDev/EventSourcing.html in C# 4.0 diskutieren.

Wenn Sie als Bibliotheksautor eine öffentliche Methode, Eigenschaft oder ein Ereignis veröffentlichen, versprechen Sie den Verbrauchern, dass Sie sie nicht ändern.

Wenn Sie zusätzliche Flexibilität in der Art der Objekte wünschen, die das Ereignis liefert, senden Sie ein Argument vom Typ Objekt, und verwenden Sie Reflexion bei der Bearbeitung, um zu entscheiden, was Sie erhalten haben, und senden Sie es ordnungsgemäß.

Regelprüfung und Ausnahmepropagierung kann durch abrechenbare Ereignisse oder einfach durch Verpacken und Senden der Ausnahme im arg behandelt werden. Aber Sie müssen sich fragen - wie beeinflussen diese Dinge den Zustand des beobachteten Objekts?

+0

Ich bin bewusst, offen/geschlossen-Prinzip. –

+0

Übrigens gibt es Fowler's Gedanken zum Thema Codeänderungen unter http://www.martinfowler.com/eaaDev/EventSourcing.html. Das Lesen hat mich dazu gebracht, die Einführung von Event-Versionsverwaltung in meinen Code einzuführen. –

Verwandte Themen