Czy możesz mi powiedzieć, że która warstwa jest odpowiednia do umieszczenia modułów obsługi zdarzeń domeny w DDD? Na przykład mam usługę aplikacji, aby dodać nową umowę i chciałbym wysłać powiadomienie e-mail do osoby kontaktowej, gdy umowa zostanie dodana, podobnie jak ta usługa nadawcy wiadomości e-mail (która obsługuje zdarzenie ContractAdded) lub usługa domeny lub coś innego?
13
Oryginalna książka DDD (Evans 2004) wyjaśnia warstwę aplikacji jako cienką warstwę, która wykonuje obiekty domeny w odpowiedzi na działanie użytkownika. Typowe programy obsługi zdarzeń dla zdarzeń domenowych nie należą zatem do warstwy aplikacji.
Umieszczenie niektórych z nich w warstwie domeny może mieć sens, o ile nie zerwiesz warstw, tworząc zależność w górę.
Jeśli masz warstwę infrastruktury znajdującą się poniżej warstwy domeny, moduł obsługi zdarzeń nie może tam być, ponieważ spowodowałby przerwanie warstw.
Jeśli masz warstwę adapterów znajdującą się powyżej warstwy domeny, możesz utworzyć tam moduł obsługi zdarzeń. Sprawdź sześciokątną architekturę .
źródło
Umieszczam moduły obsługi zdarzeń domeny w warstwie domeny jako interfejs domeny
IDomainEventHandler
.Przykładem procedury obsługi zdarzeń domeny jest zasada, która subskrybuje określone zdarzenie domeny w celu zainicjowania nowej transakcji (np. W celu wyzwolenia nowego polecenia domeny), dlatego sensowne jest mieć ją w warstwie domeny, ponieważ jest ona powiązana z logika biznesowa.
Możemy pomyśleć o przykładzie, w którym zamówienie jest potwierdzone i dlatego należy utworzyć żądanie faktury. Mamy wydarzenie,
OrderConfirmedEvent
które się wydarzyło. Zasady w naszej domenie byłyby odpowiedzialne za subskrybowanie tego zdarzenia i utworzenie polecenia domeny,RequestInvoice
które będzie obsługiwane przez moduł obsługi poleceń i odpowiednio przez nie obsługiwane.Gdybyśmy mieli ten moduł obsługi zdarzeń w warstwie aplikacji, oznaczałoby to, że warstwa aplikacji, oprócz koordynowania działań użytkownika, wykonywałaby logikę biznesową, co wydaje się niepoprawne.
Jednak my mamy
źródło