DDD: dove posizionare i gestori di eventi di dominio?

7

Potresti dirmi la tua opinione su quale livello è quello giusto per posizionare i gestori di eventi di dominio in DDD? Ad esempio, ho un servizio applicativo per aggiungere un nuovo contratto e vorrei inviare una notifica via email alla persona di contatto, quando il contratto è stato aggiunto, così come il servizio di applicazione di posta elettronica (che gestisce l'evento Contratto aggiunto) o il servizio di dominio o qualcos'altro?

    
posta Toni 28.07.2016 - 10:54
fonte

3 risposte

4

Metto i gestori di eventi di dominio nel livello applicazione.

L'evento di dominio è un modo per dire ai livelli esterni (o al mondo esterno) che qualcosa è accaduto nel livello del dominio. Cosa fare con l'evento dipende dall'applicazione. L'applicazione può notificare all'utente modifiche o può chiamare un altro dominio per fare qualcosa. L'applicazione è responsabile dell'orchestrazione delle operazioni di dominio in reazione a azioni dell'utente, richieste web o eventi di dominio.

    
risposta data 01.12.2016 - 17:41
fonte
2

Il libro originale DDD (Evans 2004) spiega il livello dell'applicazione come un sottile strato che esercita oggetti di dominio in risposta all'azione dell'utente. Tipici gestori di eventi per eventi di dominio quindi non appartengono al livello applicazione.

Potrebbe essere sensato posizionare alcuni di essi nel livello del dominio, purché non si interrompa la stratificazione creando una dipendenza verso l'alto.

Se hai un livello di infrastruttura che si trova sotto il livello del dominio, il gestore di eventi non può essere presente poiché interromperà il layering.

Se hai un livello adattatori che si trova sopra il livello del dominio, puoi creare lì un gestore di eventi. Dai un'occhiata a Architettura esagonale .

    
risposta data 04.08.2016 - 04:46
fonte
1

Metto i gestori di eventi di dominio nel livello di dominio come interfaccia di dominio IDomainEventHandler .

Un esempio di un gestore eventi di dominio è una politica che si iscrive a determinati eventi di dominio per inizializzare una nuova transazione (ad esempio: per attivare un nuovo comando di dominio), quindi ha senso averlo in Livello dominio da è legato alla logica aziendale.

Potremmo pensare ad un esempio in cui un ordine è confermato e quindi dovrebbe essere creata una richiesta di fattura. Abbiamo un evento OrderConfirmedEvent che è successo. Una politica nel nostro dominio sarebbe responsabile della sottoscrizione a questo evento e della creazione di un comando di dominio RequestInvoice che verrà gestito dal gestore comandi e gestito di conseguenza.

Se avessimo questo gestore di eventi nel livello applicazione significherebbe che il livello dell'applicazione, oltre a orchestrare le azioni dell'utente, eseguirà alcune logiche di business, il che sembra non corretto.

Tuttavia abbiamo

    
risposta data 03.08.2018 - 21:57
fonte

Leggi altre domande sui tag