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.