Node.js
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.
Örnek çözümü göster
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}]));
Kendini test et
-
Event sourcing'de durum nasıl elde edilir?
replayEvents([{amount: 10}, {amount: 5}, {amount: -3}])
- Doğrudan tablodan okunur
- Önbellekten alınır
- Olaylar yeniden oynatılır (replay)
- Sabite yazılır
Cevabı göster
Olaylar yeniden oynatılır (replay) — Durum olayların yeniden oynatılmasıyla elde edilir.
-
Parçayı rolüne eşle
- event
- Değişmez kayıt
- replay
- Olayları sırayla uygular
- amount
- Olayın etkisi
- compensating
- Telafi eden olay
-
Döngü gövdesini tamamla
for (const e of events) {
state += ____.amount;
}
Cevabı göster
for (const e of events) {
state += e.amount;
}
Sıradaki ders: CQRS