DDD Event Storming: Trendyol Tech DDD Days Notları ve Gerçek Dünya ...
🎙️ReferansBu yazıda paylaşılan bilgiler, 6 Haz 2023 tarihli Trendyol Tech DDD Days — Event Storming yayını sırasında alınan notlar ve sunum içeriği baz alınarak hazırlanmıştır.GirişModern yazılım geliştirme süreçlerinde iş süreçlerini doğru anlamak ve bu süreçleri kodun içine doğru modellemek kritik bir başarı faktörüdür. Bu noktada Domain-Driven Design (DDD) ve onun güçlü bir keşif ve modelleme aracı olan Event Storming devreye giriyor.Geçtiğimiz günlerde Trendyol Tech DDD Days kapsamında gerçekleştirilen Event Storming Workshop’unda bu yaklaşımın pratikte nasıl uygulandığına dair bir çok deneyim paylaşıldı. Bu yazı, o yayında konuşulanlardan derlenmiş bir rehber niteliğinde olarak hazırlanmıştır.Event Storming Nedir?Event Storming, Alberto Brandolini tarafından ortaya atılan bir keşif ve modelleme tekniğidir. Amaç, iş süreçlerinde yaşanan tüm önemli olayları (eventleri) ekipçe beyin fırtınası yaparak ortaya çıkarmak ve bu olaylar etrafında domain modelini şekillendirmektir.DDD’nin Stratejik Tasarım aşamasında kullanılan bu teknik, hem teknik ekiplerin hem de iş birimlerinin ortak bir dilde buluşmasını sağlar.Workshop’tan Öne Çıkan Notlar1️⃣ Doğru Ekip ve Doğru Araçlarla BaşlamakEvent Storming’in etkili olabilmesi için:Business expertler (domain uzmanları)Geliştiriciler (developers)Tasarımcılar (UX/UI)Product Manager’largibi farklı rollerin aynı masa etrafında toplanması gerekir.Trendyol ekibi de workshop’ta hem teknik hem de iş birimlerinden kişilerle bu oturumu gerçekleştirdi. Ortak dilin oturması, iş süreçlerinin detaylarının anlaşılması bu çeşitlilik sayesinde sağlandı.2️⃣ Fiziksel mi, Dijital mi?Pandemi sonrası birçok ekip Miro, Lucidchart gibi araçlarla dijital event storming yapmaya başladı. Trendyol ekibi de bu yayında dijital bir ortamda simülasyon gerçekleştirdi.Avantaj: Sürekli yaşayan bir doküman oluşturma şansı.Dezavantaj: Paralel tartışmalar yapmak zor, fasilitasyon daha kritik hale geliyor.3️⃣ Sürecin Adımları📍 Event’lerin Belirlenmesiİlk adım, domain içindeki önemli olayların (event) sıralanmasıdır. Örneğin:VasProductCreated (Ek hizmet ürünü yaratıldı)PriceRangeUpdated (Fiyat aralığı güncellendi)ServiceAddedToCart (Hizmet sepete eklendi)📍 Eventlerin Zamana Göre SıralanmasıTüm eventler, süreç akışına göre dizilir. Bu sayede eksik kalan adımlar ve tutarsızlıklar hemen görünür hale gelir.📍 Komutlar ve AktörlerHer event’i tetikleyen bir komut (command) ve bu komutu çalıştıran bir aktör (actor) belirlenir.Command: CreateVasProductActor: SellerAdmin📍 Constraint’ler ve KurallarHer event’in hangi koşullarda çalışacağı (business rule) belirlenir.Örneğin:“Sadece onaylı satıcılar ürün yaratabilir.”“Sepete ekleme işlemi sadece stok varsa yapılır.”📍 Aggregateler ve Entity’lerHer event’in etkilediği aggregate veya entity ortaya çıkarılır.VasProduct bir aggregate olarak tanımlanabilir.PriceRange bir value object olabilir.4️⃣ Bağlam Sınırlarının (Bounded Context) BelirlenmesiTüm bu analiz sonunda, domain’in hangi alt parçalara (bounded context) bölüneceği belirlenir.Trendyol’daki örnekte:VasProduct ManagementCart ServicePayment Service gibi bağımsız bounded context’ler belirlendi.5️⃣ Integration Pattern’leri SeçmekBounded Context’ler arasındaki iletişim, DDD’nin önemli bir kararıdır.Open Host Service: Bir context, dış dünyaya belirli API’ler sunar.Anti-Corruption Layer: Bir context, dış context’lerin modeliyle kendi modelini izole eder. Trendyol ekibi, bu kararları da modelleme sırasında tartıştı.Event Storming Neden Faydalı?✅ Teknik ve iş birimlerini ortak dilde buluşturur.✅ Eksik, hatalı veya karışık süreçleri erkenden görünür kılar.✅ Yalnızca kod değil, süreç de modellenir.✅ Tüm ekiplerde ortak bir “büyük resim” algısı oluşur.✅ Yeni gelen ekip üyeleri için mükemmel bir onboarding aracıdır.Sonuç ve KapanışEğer ekiplerinizde DDD uygulamaya çalışıyorsanız veya karmaşık süreçleri daha iyi modellemek istiyorsanız, Event Storming iyi bir başlangıç noktası.
