2010-03-29 7 views
6

Versionierung
Wenn sich Ihre Ereignisse ändern, würden Sie eine neue Version dieses Ereignisses erstellen und die alten beibehalten. Um zu verhindern, dass Ihr Domänencode bei der Verarbeitung aller Versionen von Ereignissen aufgebläht wird, würden Sie grundsätzlich eine Komponente einführen, die Ihre Ereignisse von früheren zu neueren Versionen konvertiert und sie dann auf die Domäne anwendet. Denken Sie daran, dass es sich bei Ereignissen um Dinge handelt, die in Ihrer Domäne tatsächlich aufgetreten sind. In den meisten Fällen sind die Informationen in veralteten Ereignissen daher wertvoll.CQRS-Ereignisversionierung

Ich habe noch kein Beispiel dafür gefunden.

Irgendwelche Hilfe?

Antwort

3

Es gibt zwei Möglichkeiten, Ereigniskonvertierungen zu verarbeiten. Beide passieren während Ereignis Deserialisierung:

  1. Sie neue Klassen mit Versionsnummern hinzufügen (SomethingHappened, SomethingHappened2, SomethingHappened3). Der Deserializer wird die Klasse instanziieren und bevölkern und sie an einen Konverter übergeben, um dasselbe Ereignis in der höheren Version zu erhalten, hier SomethingHappened3. Eines der Probleme besteht darin, dass Sie auch Ereignishandler aktualisieren müssen, um die letzte Version des Ereignisses zu verwenden. Um dies zu verringern, können Sie eine Konvention verwenden, dass SomethingHappened immer die letzte Version ist. Benennen Sie "SomethingHappened" als "SomethingHapped1" und erstellen Sie "SomethingHappened" als v2, wenn Sie zu v2 wechseln. Dazu müssen Sie die Klassen steuern, die aus serialisierten Ereignissen erstellt wurden, da der Name der serialisierten Klasse nicht die Versionsnummer enthält. Sie sollten sie daher beiseite legen.

  2. Anstatt jede Version der Klassen in Ihrem Code beizubehalten, erhält der Konverter ein Dokument (eine Struktur wie ein Xml-Dokument oder ein JSon-Objekt) und ändert sie, um die zum Erstellen der letzten Version erforderlichen Informationen bereitzustellen.

All dies hängt von der Kontrolle ab, die Sie in Ihrer Deserialisierungspipeline haben.

+0

Sinn macht. Wäre cool, einen Beispielcode zu sehen. Gibt es irgendetwas? –

+0

Könnten Sie bitte einige Beispiele für Änderungen im Domänenmodell oder den Ereignissen und deren Handhabung zeigen? – Khaled