10 puan yazan tothefullest08 2025-04-05 | 1 yorum | WhatsApp'ta paylaş

Giriş

Daangn Server meetup’ında Won Ji-hyeok’un etkinlik sourcing’iyle ilgili sunumu, bu yaklaşımı anlamamda çok yardımcı olmuştu. Etkinlik sourcing’in temel kavramlarını derleyip, sunumdaki içeriği temel alarak NestJS, TypeScript ve MongoDB tabanlı basit bir config servisi oluşturdum.

Etkinlik sourcing’in temel kavramları

  • Geleneksel CRUD yaklaşımından farklı olarak, tüm durum değişiklikleri değiştirilemez etkinlikler olarak kaydedilir; bu da denetim izi ve rollback işlemlerini kolaylaştırır
  • Muhasebe defteri gibi tüm işlemler (etkinlikler) sıralı biçimde kaydedilir, böylece mevcut durum istenildiği zaman yeniden oluşturulabilir

Temel bileşenler

  • Etkinlik
    • Benzersiz ID, oluşturulma zamanı, etkinlik tipi, kullanıcı bilgisi ve içerik (body) barındırır; değiştirilemezlik ve kendi kendine yeterlilik sağlar
  • State
    • Tüm etkinliklerin replay edilmesiyle elde edilen son durumdur (gerektiğinde snapshot veya cache kullanılabilir)
  • Reducer
    • Pure function olarak önceki durum ile etkinliği girdi olarak alır, yeni durumu hesaplar ve değiştirilemezliği korur
  • Entity
    • İlgili etkinlikleri tek bir nesne altında yönetir; böylece belirli bir entity’nin değişim geçmişi verimli şekilde sorgulanabilir

Uygulama örneği ve yapı

  • Temel ortam kurulumu: Uygulama NestJS kullanılarak çalıştırılır
  • Entity ve etkinlik tanımları
    • TypeScript arayüzleri ve MongoDB şemaları kullanılarak çeşitli etkinlikler (ör. ayar oluşturma, parametre ekleme/silme) ve durum nesneleri açık biçimde tanımlanır
  • Reducer implementasyonu:
    • Etkinlik tipine göre durumu güncelleyen pure function’lar yazılarak, etkinlik dizisi replay edilip nihai durum elde edilir
  • API endpoint’leri ve servis katmanı
    • Config oluşturma, sorgulama, parametre ekleme/silme işlevleri sunan REST API uygulanır
    • dispatch-commit deseni kullanılarak etkinlik yayımlandıktan sonra durum hesaplama ve etkinlik kaydetme işlemleri sıralı şekilde yürütülür

Ek geliştirmeler ve harici sistem entegrasyonu

  • Generic arayüzler
    • Yeniden kullanılabilir bir etkinlik repository tasarımıyla kod tekrarı azaltılır ve tip güvenliği sağlanır
  • Etkinlik handler’ları
    • Slack gibi harici sistemlerle entegre edilerek etkinlik oluştuğunda bildirim gönderme gibi ek işlemler gerçekleştirilir
  • Performans optimizasyonu stratejileri
    • Snapshot: Belirli bir andaki durum kaydedilir ve sonrasındaki etkinlikler uygulanır; tüm etkinlikleri replay etme maliyeti azaltılır
    • Caching: In-memory cache veya Redis kullanılarak sık sorgulanan entity durumları hızlı şekilde sunulur

Sonuç

  • Etkinlik sourcing, tüm değişim geçmişini açık biçimde kaydederek güvenilirliği ve bakım yapılabilirliği artıran güçlü bir mimaridir
  • Alan ihtiyacına uygun kademeli benimseme ile snapshot, caching gibi optimizasyon stratejileri birlikte değerlendirilerek sistem performansı güvence altına alınmalı; öğrenme eğrisi de göz önünde bulundurularak dikkatli şekilde uygulanmalıdır

1 yorum

 
guseod24 2025-04-06

Harika harika! ^0^