Sobes.tech
Back to questions
Middle — Middle+
75

Можете объяснить концепцию Event Sourcing и как она используется в архитектуре приложений?

Answer from AI

sobes.tech AI

Event Sourcing — это архитектурный паттерн, при котором все изменения состояния приложения сохраняются как последовательность событий, а не как текущее состояние.

Вместо того, чтобы хранить только актуальные данные, система сохраняет все события, которые привели к этому состоянию. Для получения текущего состояния эти события воспроизводятся (проигрываются) последовательно.

Преимущества:

  • Полная история изменений, что облегчает аудит и отладку.
  • Возможность отката к любому предыдущему состоянию.
  • Упрощение реализации сложной бизнес-логики и интеграции с другими системами через события.

Применение: В архитектуре приложений Event Sourcing часто используется вместе с CQRS (Command Query Responsibility Segregation). Команды изменяют состояние, создавая события, которые сохраняются в журнале событий. Чтение происходит из проекций, построенных на основе этих событий.

Пример на C# (упрощённо):

public class AccountCreated : IEvent { public Guid AccountId; public decimal InitialBalance; }
public class MoneyDeposited : IEvent { public decimal Amount; }

public class Account
{
    private decimal balance;
    private List<IEvent> changes = new List<IEvent>();

    public void Apply(IEvent e)
    {
        switch(e)
        {
            case AccountCreated ac:
                balance = ac.InitialBalance;
                break;
            case MoneyDeposited md:
                balance += md.Amount;
                break;
        }
    }

    public void Deposit(decimal amount)
    {
        var e = new MoneyDeposited { Amount = amount };
        Apply(e);
        changes.Add(e);
    }
}

Здесь состояние счёта восстанавливается из событий, а новые события добавляются при изменениях.