Чем событие (event) отличается от команды (command)?
- Чем событие отличается от команды?
Событие — факт в прошедшем времени («Заказ оплачен»), получателей может быть много, издатель их не знает. Команда — намерение в повелительном наклонении («Спиши деньги»), исполнитель один.
- Событие нельзя отклонить — оно уже произошло
- Команду исполнитель может отклонить
- Название подсказывает природу сообщения
А ещё Событие — pub/sub, команда — очередь к конкретному сервису
Подробно
Различие влияет на дизайн напрямую. У события может быть сколько угодно подписчиков, и издателю всё равно, кто отреагирует, — поэтому добавление нового потребителя ничего не ломает. У команды исполнитель один и от него ждут выполнения, а значит нужен явный получатель и обработка отказа. Заметно и по именованию: события называют в прошедшем времени, команды — в повелительном наклонении.
Что хотят услышать
- Различие по смыслу и получателям.
- Пример каждого.
Частые ошибки
- Называть событием сообщение, которое на самом деле требует конкретного действия от конкретного сервиса.
- Смешивать оба смысла в одном сообщении.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Событие передаётся синхронно, команда — асинхронно
- ✗Событие содержит больше данных, чем команда
- ✓Событие — свершившийся факт для всех; команда — намерение для одного
- ✗Команда сообщает о факте всем подписчикам, событие поручает задачу одному
Что спросят дальше
- Какие поля обязательно кладут в конверт сообщения?
- Почему у события не указывают получателя?
Разбор темы
- Проектирование событий и команд
Event vs command, обязательные поля envelope, idempotency key, schema evolution, thick vs thin payload и transactional outbox.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.