2010-03-29 18 views
6

Versioning
Se i tuoi eventi cambiano, crei una nuova versione di quell'evento e mantieni quelli vecchi. Per evitare che il codice del dominio si gonfia con la gestione di tutte le versioni degli eventi, in pratica introduci un componente che converte i tuoi eventi da versioni precedenti a versioni più recenti e quindi li applica al dominio. Ricorda che gli eventi sono cose realmente accadute nel tuo dominio, quindi nella maggior parte dei casi le informazioni degli eventi deprecati sono preziose.Versioning evento CQRS

Non ho ancora trovato alcun esempio di questo.

Qualsiasi aiuto?

risposta

3

Esistono due modi principali per gestire le conversioni di eventi. Entrambi accada durante la deserializzazione evento:

  1. È possibile aggiungere nuove classi con numeri di versione (SomethingHappened, SomethingHappened2, SomethingHappened3). Il deserializzatore installerà e popolerà la classe, passandola a un convertitore per ottenere lo stesso evento nella sua versione superiore, qui SomethingHappened3. Uno dei problemi è che dovrai aggiornare anche i gestori di eventi per usare l'ultima versione dell'evento. Per mitigare questo, è possibile utilizzare una convenzione che SomethingHappened è sempre l'ultima versione. Quando vai a v2, rinomina SomethingHappened come SomethingHappened1 e crea SomethingHappened che sarà la v2. Per fare ciò è necessario avere il controllo sulle classi create da eventi serializzati poiché il nome di classe serializzato non conterrà il numero di versione, dovresti tenerlo da parte.

  2. Invece di mantenere tutte le versioni delle classi nel codice, il convertitore riceverà un documento (un albero, come un documento Xml o oggetto JSon) e lo modificherà per fornire le informazioni necessarie per creare l'ultima versione.

Tutto ciò dipende dal controllo che si ha sulla propria pipeline di deserializzazione.

+0

Ha senso. Sarebbe bello vedere qualche codice di esempio. C'è qualcosa? –

+0

Potresti mostrare alcuni esempi di modifiche nel modello di dominio o negli eventi e come gestirli? – Khaled