Можете объяснить концепцию 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);
}
}
Здесь состояние счёта восстанавливается из событий, а новые события добавляются при изменениях.