advanced

Events vs commands

Отличайте facts that happened от directed requests to do work, чтобы ownership, retries и consumer coupling были clear.

Events фиксируют свершившиеся факты: OrderPlaced, PaymentCaptured. Commands запрашивают работу: ReserveInventory, ChargeCard. Смешение размывает ownership — events публикует aggregate, который изменился; commands нацелены на конкретный handler с намерением mutate.

Events позволяют many subscribers; commands подразумевают одного ответственного consumer и яснее retry semantics с idempotency keys.

На интервью: классифицируйте сообщения в checkout flow; объясните, почему PaymentFailed как command в email service — неверная модель.

Типовые ошибки: event names в past tense, запускающие side effects без idempotency; commands многим consumers; choreography без ясных writers.

Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.

Чеклист:

  • Именуйте events как immutable facts с schema version.
  • Направляйте commands одному owning service.
  • Документируйте, кто emit и кто react.
  • По-разному обрабатывайте duplicates для events и commands.