Концепция паттерна

Представь банковский счет. В классической системе (CRUD) мы храним текущий баланс — например, 5000 рублей. База данных помнит только текущее состояние. При Event Sourcing мы вообще не храним баланс. Мы храним последовательность событий, которые привели к этому состоянию:

  • «Открытие счета: +0 руб»
  • «Пополнение: +10000 руб»
  • «Покупка: -3000 руб»
  • «Перевод: -2000 руб»

Текущий баланс (5000 руб) получается динамически путем «прокрутки» (replay) всех событий с самого начала.

Event Store: Не путай с брокером

В Event Sourcing события хранятся в Event Store. И это НЕ то же самое, что классический брокер сообщений. Задача брокера — доставить сообщение. Задача Event Store — хранить историю вечно.

  • Обеспечивает неизменность событий (Append-only — только добавление, никакого UPDATE).
  • Позволяет запросить все события для конкретной сущности (например, все операции по счету X).

Технически Event Store может быть специализированной БД (EventStoreDB), PostgreSQL с правильной схемой или даже Kafka, если настроить бесконечное хранение (infinite retention).