Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Message Türleri: Command, Event ve Query; Event Notification ve Event-Carried State Transfer
Command emir kipindedir ve tek bir alıcıya gider, event geçmiş zamanda bir olgudur ve alıcılarını tanımaz, query ise cevap bekler; bu ayrım message'ın adını, contract sahibini ve channel'ını belirler. MessageId, correlation ve causation id taşıyan bir envelope, Fowler'ın event notification ve event-carried state transfer ayrımı ve domain event ile integration event farkı gerçek çıktılarla.
Domain Event'ler: Raise, Topla, SaveChanges'te Dispatch Et
Aggregate olanı geçmiş zamanlı, immutable bir domain event olarak yalnızca kendi listesine ekler; EF Core 10'un SaveChangesInterceptor'ı event'leri SaveChanges sırasında toplar, aynı transaction'daki handler'ları commit'ten önce, veritabanı dışına çıkan yan etkileri commit'ten sonra çalıştırır. Mediator'sız dispatcher, iç içe SaveChanges ve açık transaction tuzakları gerçek çıktılarla; integration event ve outbox farkı.
EventStorming ile Domain'i Keşfetmek: Big Picture'dan Aggregate'lere
EventStorming, domain'de olan biteni geçmiş zamanlı turuncu sticky'lerle bir timeline'a dizerek domain expert ile developer'ları aynı dilde buluşturan bir workshop formatıdır. Bookstore'un sipariş akışını Big Picture, Process Modeling ve Software Design seviyelerinden geçirip hot spot'ları, pivotal event'leri, policy'leri ve duvardan çıkan aggregate adaylarını koda döküyoruz.
Observer Pattern Derinlemesine: event, IObservable<T>, IChangeToken ve Domain Event'ler
Observer, bir object'in durumu değiştiğinde ona bağlı object'lerin haberdar edilmesidir; C#'ta event, BCL'de IObservable<T>/IObserver<T>, ASP.NET Core'da IChangeToken ve IOptionsMonitor olarak karşına çıkar. Kayıttan önce tetiklenen bir event'in gönderdiği hayalet onay e-postasından başlayıp OnNext/OnError/OnCompleted sözleşmesini, Rx.NET operatörlerini, tek kullanımlık change token'ları ve kayıttan sonra izole dağıtılan domain event'leri gerçek çıktılarla inceliyoruz.