Różnica między poleceniem a wydarzeniem w komunikacji autobusowej wydaje mi się nieco niejasna. Wiem, że polecenia powinny być wykonywane tylko raz, podczas gdy zdarzenie może być obsługiwane wiele razy, ale nadal nie jestem pewien, kiedy użyć polecenia lub zdarzenia.
Spójrzmy na przykład:
Gdy nowy użytkownik rejestruje się w aplikacji internetowej, powinniśmy założyć mu konto i wysłać wiadomość e-mail z potwierdzeniem.
Tworzenie konta - wydaje się, że jest to właściwe miejsce do wysłania komunikatu CreateUserCommand
do magistrali i umożliwienia wyspecjalizowanemu komponentowi obsługi go.
A może nie powinno się tego nawet realizować przy asynchronicznej komunikacji magistrali? Chcemy, aby użytkownik mógł od razu zalogować się do aplikacji. W przypadku autobusu nie mamy gwarancji, kiedy polecenie zostanie wykonane.
Wysyłanie wiadomości e - mail - po utworzeniu konta przez komponent widzę 2 możliwości
- Wyślij kolejne polecenie do magistrali
SendConfirmationEmailCommand
- Opublikuj wydarzenie
UserAccountCreatedEvent
I pozwól komponentowi wysyłającemu e-maila złapać go i wykonać zadanie.
Z jednej strony chcę, aby wiadomość e-mail z potwierdzeniem została wysłana tylko raz (użyj polecenia), z drugiej strony uważam, że może być wiele elementów zainteresowanych nowo zarejestrowanymi użytkownikami. Rejestrator lub może nadawca SMS.
Jak byś to wdrożył?