Event sourcing
- Node.js kursu
- Uzman
- Ders 34/47
- 5 dk
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
// 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
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?
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
for (const e of events) {
state += ____.amount;
}
for (const e of events) {
state += e.amount;
}
Açıklama: Her olayın amount değeri eklenir.