CodeBlanks Logo Icon CodeBlanks

Event sourcing

Event sourcing desenini öğrenirsin.

Event sourcing nedir?

Event sourcing, durumu (state) doğrudan saklamak yerine onu üreten olayları (events) saklar. Durum, olaylar her yeniden oynatıldığında (replay) elde edilir. Bu, geçmişe dönük denetim ve zaman içinde geri sarma sağlar.

Bir replayEvents(events) fonksiyonu bu mantığı modeller: başlangıç durumu 0'dır, her olayın etkisi eklenir. Örnek: replayEvents([{amount: 10}, {amount: 5}, {amount: -3}]) 0 + 10 + 5 - 3 = 12 döndürür. Olaylar değişmez (immutable); yalnızca eklenir. Bu, banka hesap bakiyesi, sipariş durumu gibi geçmişi olan veriler için uygundur. CQRS ile birlikte kullanıldığında yazma ve okuma ayrı modellerle yürür.

Olay zinciri

Bir olay zinciri, sırayla eklenen değişmez olaylardan oluşur. Her olay bir etki taşır; toplam etki, durumu verir. replayEvents bu zinciri bir for...of döngüsüyle yürür.

Örnek: let state = 0; for (const e of events) { state += e.amount; }. events = [{amount: 10}, {amount: 5}, {amount: -3}] için state sırayla 10, 15, 12 olur. Bu, gerçek bir event store'unun mantığıdır: olaylar bir günlüğe (log) yazılır, tüketici istediği an bunları yeniden oynatır. Olaylar değişmediği için denetim güvenlidir; eski bir olayı silmek yerine yeni bir telafi olayı (compensating event) eklenir.

Uygulama Olay yeniden oynatma fonksiyonu yaz

function replayEvents(events) yaz. let state = 0 tanımla. for (const e of events) { state += e.amount; } döngüsünü ekle. return state ile bitir. console.log(replayEvents([{amount: 10}, {amount: 5}, {amount: -3}])) ile yazdır.

Başlangıç kodu

index.js
// replayEvents fonksiyonu yaz
// başlangıç durumu 0 olsun, her olayın etkisini ekle
// [{amount: 10}, {amount: 5}, {amount: -3}] çağrısıyla yazdır
// buraya yaz

Örnek çözüm

index.js
function replayEvents(events) {
  let state = 0;
  for (const e of events) {
    state += e.amount;
  }
  return state;
}
console.log(replayEvents([{amount: 10}, {amount: 5}, {amount: -3}]));

Beklenen çıktı

12

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Event sourcing'de durum nasıl elde edilir?

index.js
replayEvents([{amount: 10}, {amount: 5}, {amount: -3}])
  • Doğrudan tablodan okunur
  • Önbellekten alınır
  • Olaylar yeniden oynatılır (replay) Doğru cevap
  • Sabite yazılır

Açıklama: Durum olayların yeniden oynatılmasıyla elde edilir.

2 Parçayı rolüne eşle

Kavram Anlamı
event Değişmez kayıt
replay Olayları sırayla uygular
amount Olayın etkisi
compensating Telafi eden olay

3 Döngü gövdesini tamamla

Soru
for (const e of events) {
  state += ____.amount;
}
Cevap
for (const e of events) {
  state += e.amount;
}

Açıklama: Her olayın amount değeri eklenir.

Uzman bölümündeki tüm dersler