Різниця між командою та подією в автобусному спілкуванні мені здається трохи невиразною. Я знаю, що команди повинні виконуватися лише один раз, тоді як подія може оброблятися кілька разів, але все одно я не впевнений, коли використовувати команду чи подію.
Розглянемо приклад:
Коли новий користувач реєструється у веб-програмі, ми повинні створити йому обліковий запис і надіслати електронний лист з підтвердженням.
Створення облікового запису - це, здається, є правильним місцем для відправки CreateUserCommand
на шину та дозволу спеціалізованому компоненту обробляти це.
А може, це навіть не слід реалізовувати за допомогою асинхронного зв’язку на шині? Ми хочемо, щоб користувач міг одразу увійти в програму. З шиною у нас немає гарантії, коли команда буде виконуватися.
Відправлення електронної пошти - після того, як компонент створить обліковий запис, я бачу 2 можливості
- Надішліть ще одну команду в автобус
SendConfirmationEmailCommand
- Опублікуйте подію
UserAccountCreatedEvent
І ніж нехай компонент відправника електронної пошти схопить його та його роботу.
З одного боку, я хочу, щоб електронний лист для підтвердження надсилався лише один раз (використовуйте команду), а з іншого боку, я вважаю, що в новозареєстрованих користувачів можуть бути зацікавлені кілька компонентів. Реєстратор або, можливо, відправник SMS.
Як би ти це реалізував?