Domain events на собеседовании системного аналитика

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Что такое domain event

Past-tense fact, что-то значимое произошло в domain.

Examples: OrderPlaced, PaymentProcessed, UserRegistered.

Свойства:

  • Past tense (event = факт, не команда).
  • Immutable (не editable после publish).
  • Имеет timestamp.
  • Имеет unique ID для idempotency.

Naming convention

Past tense. OrderCreated, не CreateOrder (это command).

Specific. «UserUpdated» — слабо. «UserEmailChanged» — лучше.

Domain-driven. Use ubiquitous language. Не tech (RowInserted).

Event payload

Что включить:

  • Event ID (UUID для dedupe).
  • Aggregate ID (order_id = 42).
  • Event time.
  • Event-specific data.
  • Causation ID (for correlation).
{
  "event_id": "evt_abc123",
  "event_type": "OrderPlaced",
  "occurred_at": "2026-05-07T12:00:00Z",
  "order_id": 42,
  "customer_id": 99,
  "amount": 1500.00,
  "items": [...],
  "metadata": {
    "trace_id": "trace_xyz",
    "version": 1
  }
}

Что не включать: sensitive data в clear text. Большие attachments (use links).

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Domain vs integration events

Domain events. Внутри bounded context. Tied к domain.

Integration events. Cross-context. Public contract для outside.

Internal: "OrderPlaced" в Order domain — rich payload, internal model.
External: "OrderCreatedV1" — minimal payload, stable contract for partners.

Часто publish both — внутренние используют rich, downstream получают integration.

Schema versioning

Events outlive code. Need versioning strategy.

Approaches:

  • Add fields backward-compatible. Old consumers ignore new fields.
  • Version в event_type: OrderPlacedV1OrderPlacedV2.
  • Schema registry. Avro / Protobuf with managed evolution.

Avoid breaking changes. Once published — events live forever (replay, audit). Breaking renames / removals — hard.

Связанные темы

FAQ

Это официальная информация?

Нет. Статья основана на работах DDD community, Hohpe «Enterprise Integration Patterns».


Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.