gestori di eventi di dominio - Dovrebbero essere utilizzati per problemi di livello di applicazione?

StackOverflow https://stackoverflow.com/questions/4631697

Domanda

Quando si implementa eventi dominio dovrebbero i gestori di eventi essere utilizzati solo per ovvie relazioni dominio; qualcosa che si dovrebbe discutere con gli esperti di business, o sono aprire per essere utilizzati da tutto ciò che ha un interesse nel modello di dominio?

Questa è probabilmente meglio spiegata con un semplice esempio, si consideri un'applicazione di calendario per il lavoro di programmazione per i dipendenti.

Si può avere la seguente eventi dominio ...

AppointmentAdded AppointmentRemoved AppointmentContentChanged AppointmentMoved

Abbiamo i gestori di questi eventi, per esempio quando un appuntamento viene spostato in un tempo al di fuori dei dipendenti ora abbiamo fissato un bandiera di avvertimento di lavoro.

Ci sono delle preoccupazioni d'ammissione al corso che sono interessati a questi eventi, per esempio quando un appuntamento si aggiunge al calendario, dobbiamo aggiungere alla unità di lavoro in modo da poter applicare le modifiche in seguito.

Se queste domanda riguarda l'essere consumatori degli eventi a dominio, o dovremmo raccogliere e gestire gli eventi di sistema separati invece?

È stato utile?

Soluzione

Ci sono 2 modi consolidati di utilizzare gli eventi in una soluzione DDD.

Il primo si basa su articoli di Udi Dahan su eventi . Se non avete letto loro già, mi raccomando che. In sintesi si dice che si pubblica i tuoi eventi utilizzando classe statica oltre a comportamento normale ORM-style. Così si aggiunge un ordine di raccolta ordini del cliente e si pubblica l'evento. Perché il vostro comportamento del dominio viene eseguito all'interno di un ambito della transazione, così sono i gestori di eventi. Si potrebbe anche trovare lì e consiglio di non allegare manualmente gli oggetti ad un'unità di lavoro. Le nuove radici di aggregazione devono essere create invocando un comportamento su quelli già esistenti.

C'è un'altra opzione che è promosso da Greg Young. Si basa su sourcing evento che fondamentalmente utilizza eventi come mezzo di persistente stato. In questo approccio le vostre radici di aggregazione di solito usano alcune infrastrutture (ad esempio classe base di radice di aggregazione) per applicare gli eventi. Applicare lo fa richiamare un gestore di eventi sulla classe radice aggregato e pubblica questo evento su un autobus (qualunque implementazione del bus si usa).

Altri suggerimenti

Se vuoi dire preoccupazioni trasversali di quanto si sarà costretti a usarla in ogni caso se la logica applicazione lo richiede. Così sarà essere miscelato con altro codice di elaborazione evento.

Ma se avete bisogno di fare diverse cose indipendenti, quando l'evento è accaduto dominio che è meglio utilizzare i gestori di eventi separati (vedi separazione delle preoccupazioni principio).

Nel primo caso, tra l'altro, cercare di evitare di mescolare la logica di dominio con (infrastrutture) logica di elaborazione evento. infrastrutture Sinistra / preoccupazioni trasversali codice nei gestori di eventi che richiedono metodi di dominio. Codice mossa dominio all'interno metodi oggetti di dominio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top