Получить доступ

Чем event отличается от command в проектировании сообщений?

MiddleПроектирование событий
Ещё спрашивают так:
  • Как выбор между событием и командой влияет на связанность?
Коротко

Событие — факт о прошлом («ЗаказОплачен»): издатель не знает, кто реагирует, подписчиков много. Команда — просьба сделать («СписатьДеньги»): адресат один, отправитель ждёт результата.

  • События снижают связанность: новые потребители не меняют издателя
  • Команды выражают зависимость явно — уместны, когда нужен конкретный исполнитель и результат
  • Событие в повелительном наклонении — признак скрытой команды

А ещё Список получателей в событии — признак неверного дизайна

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Event описывает уже случившееся (OrderPaid, UserRegistered): отправитель не знает и не диктует, кто и как отреагирует — это основа слабой связанности и pub/sub. Command выражает намерение «сделай X» (ChargeCard) и адресован конкретному получателю, который вправе отказать. Различие влияет на связанность и именование: события называют в прошедшем времени, команды — в повелительном. Путаница (рассылка «события», на которое по факту обязан среагировать ровно один сервис строго определённым образом) ведёт к скрытой жёсткой связанности.

Что хотят услышать

  • Различие по смыслу и числу получателей.
  • Влияние на связанность.
  • Когда уместна команда.

Частые ошибки

  • Маскировать команду под событие, создавая скрытую связанность.
  • Именовать события в повелительном наклонении.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Event — факт о том, что уже произошло (OrderPaid), у него может быть много подписчиков; command — указание сделать что-то (ChargeCard), адресован конкретному обработчику
  • ✗Event всегда синхронный, command всегда асинхронный
  • ✗Это одно и то же, разница только в имени
  • ✗Command хранится в логе, а event удаляется сразу

Что спросят дальше

  • Как именование (прошедшее время) помогает дизайну?
  • Почему у event может быть много подписчиков?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем