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