Event Sourcing Nedir? C# ile Uygulamalı Öğrenme
Günümüzde modern yazılım mimarisinde, sürekli olarak veri değişikliklerini izlemek, tutmak ve bu değişiklikleri geri alabilmek veya yeniden uygulamak oldukça önemli bir ihtiyaç haline gelmiştir. İşte bu ihtiyaçları karşılamak için Event Sourcing kavramı devreye girer.
Event Sourcing’in Temeli
Event Sourcing, uygulamanızdaki her bir değişikliği olay (event) olarak saklama yaklaşımıdır. Birçok geleneksel sistem, son durumu (state) veritabanında saklar. Event Sourcing’de, bu son durumu elde etmek için tüm olayları sırayla uygulayarak elde edersiniz.
Event Sourcing’in Avantajları
- Geçmiş Değişiklikleri İzleme: Tüm değişiklikler olay olarak saklandığından, sistemdeki her değişiklik izlenebilir.
- Esneklik: Olayları yeniden uygulayarak farklı durumları simüle edebilirsiniz.
- Kolay Geri Alma: Hatalı bir değişiklik yapıldığında, bu değişikliği geri alma veya o değişikliğe kadar olan durumu geri yükleme imkanı sağlar.
C# ile Basit Bir Örnek
Haydi bir banka hesabı uygulaması üzerinden Event Sourcing’in nasıl uygulanabileceğine bakalım:
Olaylarımızı Tanımlayalım
public abstract class Event
{
public DateTime Timestamp { get; } = DateTime.UtcNow;
}
public class MoneyDeposited : Event
{
public Guid AccountId { get; set; }
public decimal Amount { get; set; }
}
public class MoneyWithdrawn : Event
{
public Guid AccountId { get; set; }
public decimal Amount { get; set; }
}
Event Store Oluşturma
public class EventStore
{
private readonly List<Event> _events = new List<Event>();
public void SaveEvent(Event @event)
{
_events.Add(@event);
}
public IEnumerable<Event> GetEvents() => _events.AsReadOnly();
}
Uygulama ve Projeksiyon
Hesabın mevcut durumunu almak için olayları projekte etmemiz gerekiyor:
public class BankAccountProjection
{
public Guid AccountId { get; set; }
public decimal Balance { get; private set; }
public BankAccountProjection(IEnumerable<Event> events)
{
foreach (var @event in events)
{
switch (@event)
{
case MoneyDeposited deposited:
Balance += deposited.Amount;
break;
case MoneyWithdrawn withdrawn:
Balance -= withdrawn.Amount;
break;
}
}
}
}
Event Sourcing, bu örnekle sınırlı değil. Gerçekte, olayları saklamak, sorgulamak ve projekte etmek için daha karmaşık yapılar kullanılır. Ancak bu basit örnek, Event Sourcing kavramını daha iyi anlamamıza yardımcı olur.
Sonuç
Event Sourcing, modern yazılım geliştirme yaklaşımlarında veri değişikliklerini izlemek ve saklamak için benzersiz bir yöntem sunar. Bu, uygulamanızın her değişikliğini sırayla izlemenizi, hatalı değişiklikleri geri almanızı ve hatta belli bir zaman dilimine geri dönmenizi sağlar. Bu makalede sunduğum örnekler basitleştirilmiş olup, gerçek uygulamalar için daha kapsamlı bir altyapı geliştirmeniz gerekebilir.