DDD: dove posizionare i gestori di eventi di dominio?


13

Potresti dirmi la tua opinione sul livello giusto per posizionare i gestori di eventi di dominio in DDD? Ad esempio, ho un servizio di applicazione per aggiungere un nuovo contratto e vorrei inviare una notifica e-mail alla persona di contatto, quando il contratto è stato aggiunto, così è quel servizio di applicazione o servizio di dominio o mittente di posta elettronica (che gestisce l'evento ContractAdded) o qualcos'altro?

Risposte:


12

Posiziono i gestori di eventi di dominio nel livello applicazione.

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


1
+1 per il livello applicazione. In una progettazione di pub-sub, l'evento di dominio può attivare la logica generica in luoghi / sistemi / microscopici diversi. Se uno degli abbonati è un'applicazione modellata utilizzando DDD, l'evento sta iniziando una elaborazione in quell'applicazione / BC. Questa elaborazione può richiedere la demarcazione delle transazioni, il controllo degli accessi, il coordinamento che viene generalmente eseguito a livello di applicazione.
Paulo Merson,

2

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

Potrebbe avere senso posizionarne alcuni nel livello del dominio, a condizione che non si rompano i livelli creando una dipendenza verso l'alto.

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

Se si dispone di un livello adattatori che si trova sopra il livello dominio, è possibile creare un gestore eventi lì. Scopri l' architettura esagonale .


2

Posiziono i gestori di eventi di dominio nel livello Dominio come interfaccia di dominio IDomainEventHandler.

Un esempio di un gestore di eventi di dominio è una politica che sottoscrive un determinato evento di dominio al fine di inizializzare una nuova transazione (ad esempio: per attivare un nuovo comando di dominio), quindi ha senso averlo nel livello Dominio poiché è correlato a logica di business.

Potremmo pensare ad un esempio in cui un ordine è confermato e quindi dovrebbe essere creata una richiesta di fattura. Abbiamo un evento OrderConfirmedEventche è successo. Una politica nel nostro dominio sarebbe incaricata di iscriversi a questo evento e creare un comando di dominio RequestInvoiceche verrà gestito dal gestore dei comandi e gestito da esso di conseguenza.

Se avessimo questo gestore eventi nel livello applicazione, ciò significherebbe che il livello applicazione, oltre a orchestrare le azioni dell'utente, eseguirà una logica aziendale, che sembra errata.

Comunque abbiamo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.