Что такое event sourcing?

Senior
413 просмотров
AFK Offer AI

Event sourcing — вместо хранения текущего состояния, хранишь последовательность событий. Состояние — результат проигрывания всех событий с начала.

// вместо UPDATE accounts SET balance = 900
// храним события:
AccountCreated{ID: 1, Balance: 1000}
MoneyWithdrawn{ID: 1, Amount: 100}
// текущий баланс = replay всех событий = 900

Плюсы: полная история изменений (аудит бесплатно), можно "перемотать" состояние на любой момент, легко строить разные read-модели из одних событий, идеально для debug.

Минусы: сложность реализации, нет простого SELECT для текущего состояния (нужны snapshot-ы), eventual consistency, миграция схемы событий — боль.

Event sourcing отлично сочетается с CQRS: события записываются в event store, проекции (read models) строятся асинхронно. Используется в финтехе, бухгалтерии, системах с жёсткими требованиями к аудиту. Для типового CRUD — стрелять из пушки по воробьям.

Следующий вопрос

Как тестировать private функции?