2013-08-06 6 views
6

Chi dovrebbe essere responsabile della gestione degli eventi di dominio? Servizi applicativi, servizi di dominio o entità in sé?In DDD, chi dovrebbe essere responsabile della gestione degli eventi del dominio?

Facciamo un esempio semplice per questa domanda.

Diciamo che lavorare su applicazioni negozio, e abbiamo un servizio applicativo dedicato per ordinare operazioni. In questa applicazione Order è una radice aggregata e le seguenti regole, possiamo lavorare solo con un aggregato all'interno di una singola transazione. Dopo che l'ordine è stato inserito, esso viene mantenuto in un database. Ma c'è ancora molto da fare. Prima di tutto, dobbiamo cambiare il numero di articoli disponibili nell'inventario e in secondo luogo notificare qualche altra parte di un sistema (probabilmente un altro contesto limitato) che dovrebbe essere avviata la procedura di spedizione per quell'ordine particolare. Perché, come già detto, possiamo modificare solo un aggregato all'interno della transazione, penso di pubblicare OrderPlacedEvent che sarà gestito da alcuni componenti nelle transazioni separate.

La domanda sorge: quali componenti devono gestire questo tipo di evento?

risposta

6

mi piacerebbe:

1) livello di applicazione se l'evento attiva la modifica di un altro aggregato nello stesso contesto limitato.

2) Livello applicazione se l'evento attiva alcuni servizi di infrastruttura.

ad es. Una e-mail viene inviata al cliente. Quindi è necessario un servizio applicativo per caricare l'ordine per il contenuto della posta e la posta e quindi richiamare il servizio di infrastruttura per inviare la posta.

3) Io preferisco un dominio del servizio personalmente se l'evento attiva alcune operazioni in un altro contesto limitato.

ad es. Spedizione o fatturazione, un'implementazione infrastrutturale del servizio di dominio è responsabile dell'integrazione di altri contesti limitati.

4) livello di infrastruttura se l'evento devono essere divisi a più consumatori. Il consumatore passa a 1), 2) o 3).

Per me, la conclusione è Livello applicazione se l'evento conduce a un test di accettazione separato per il contesto limitato.

A proposito, qual è la vostra infrastruttura per garantire la durata del vostro evento? Includete la pubblicazione degli eventi nella transazione?

+0

Grazie per la risposta. Per quanto riguarda la durata - non so ancora come organizzarlo. Penso che idealmente dovremmo avere due transazioni e qualche coda duratura (JMS?) - l'evento è pubblicato all'interno della stessa transazione e quindi ci assicuriamo che sia stato consegnato correttamente e che l'altra transazione venga avviata quando il messaggio viene prelevato dalla coda. In questo modo possiamo assicurarci che se qualcosa va storto, l'evento verrà riconsegnato –

2

Questi tipi di gestori appartengono al livello dell'applicazione. Probabilmente dovresti anche creare un metodo di servizio applicativo di supporto. In questo modo puoi iniziare una transazione separata.