2013-08-06 9 views
6

Kto powinien być odpowiedzialny za obsługę zdarzeń domeny? Usługi aplikacji, usługi domenowe lub same jednostki?W DDD, kto powinien być odpowiedzialny za obsługę zdarzeń domeny?

Użyjmy prostego przykładu dla tego pytania.

Załóżmy, że pracujemy nad aplikacją sklepu i mamy usługę aplikacji dedykowaną do operacji związanych z zamówieniami. W tej aplikacji Order jest zbiorczą podstawową i następującą regułą, możemy pracować tylko z jednym agregatem w ramach pojedynczej transakcji. Po złożeniu zamówienia jest ono przechowywane w bazie danych. Ale jest jeszcze wiele do zrobienia. Przede wszystkim musimy zmienić liczbę pozycji dostępnych w ekwipunku, a po drugie powiadomić inną część systemu (prawdopodobnie inny ograniczony kontekst), że należy rozpocząć procedurę wysyłkową dla tego konkretnego zamówienia. Ponieważ, jak już wspomniano, możemy modyfikować tylko jeden agregat w ramach transakcji, myślę o opublikowaniu OrderPlacedEvent, które będą obsługiwane przez niektóre komponenty w osobnych transakcjach.

Pojawia się pytanie: które elementy powinny obsługiwać tego typu zdarzenia?

Odpowiedz

6

Chciałbym:

1) warstwy aplikacji, jeśli zdarzenie powoduje modyfikację innych łącznie w tym samym kontekście ograniczonym.

2) Warstwa aplikacji, jeśli zdarzenie wywoła pewną usługę infrastrukturalną.

np. E-mail zostanie wysłany do klienta. Tak więc usługa aplikacji jest potrzebna do załadowania zamówienia na treść i pocztę, a następnie wywołania usługi infrastruktury w celu wysłania wiadomości.

3) Wolę usługę domenową osobiście, jeśli zdarzenie uruchamia niektóre operacje w innym ograniczonym kontekście.

np. Wysyłka lub fakturowanie, wdrożenie infrastruktury usługi domeny jest odpowiedzialne za integrację innego ograniczonego kontekstu.

4) Warstwa infrastruktury, jeśli zdarzenie musi zostać podzielone na wielu użytkowników. Konsument przechodzi do 1), 2) lub 3).

Dla mnie konkluzja to warstwa aplikacji, jeśli zdarzenie prowadzi do oddzielnego testu akceptacji dla ograniczonego kontekstu.

Przy okazji, jaka jest Twoja infrastruktura, aby zapewnić trwałość wydarzenia? Czy publikujesz wydarzenie w transakcji?

+0

Dzięki za odpowiedź. Jeśli chodzi o trwałość - nie wiem jeszcze jak to zorganizować. Sądzę, że najlepiej byłoby, gdybyśmy mieli dwie transakcje i pewną trwałą kolejkę (JMS?) - zdarzenie jest publikowane w ramach tej samej transakcji, a zatem zapewniamy, że zostało poprawnie dostarczone, a druga transakcja jest uruchamiana, gdy wiadomość jest odbierana z kolejki. W ten sposób możemy zapewnić, że jeśli coś pójdzie nie tak, wydarzenie zostanie ponownie dostarczone –

2

Tego rodzaju procedury obsługi należą do warstwy aplikacji. Najprawdopodobniej powinieneś również utworzyć metodę usługi aplikacji wspierającej. W ten sposób możesz rozpocząć oddzielną transakcję.

Powiązane problemy