DDD Nedir?
İngilizce: DDD (Domain-Driven Design)
DDD, karmaşık iş alanlarını domain modeli, bounded context ve ortak dil etrafında yazılım mimarisine taşıyan tasarım yaklaşımıdır.
DDD Nedir?
DDD (Domain-Driven Design), yazılım tasarımını teknik tablolar veya ekranlar yerine iş alanının kavramları etrafında şekillendiren yaklaşımdır. Amaç karmaşık kuralları kodda da iş ekibinin konuştuğu dile yakın modellemek ve yanlış soyutlamaların büyümesini önlemektir.
Örneğin “sipariş” kavramı e-ticarette ödeme alınmadan tamamlanmış sayılmazken, üretim planlamasında farklı bir yaşam döngüsüne sahip olabilir. DDD bu tür alan kurallarını domain modeli, aggregate, entity, value object ve domain service gibi yapılarla ifade eder.
Temel Kavramlar
DDD’nin merkezinde ubiquitous language yani ortak dil vardır. Geliştiriciler, ürün sahipleri ve domain uzmanları aynı terimleri kullanarak modeldeki kavramları netleştirir.
Önemli parçalar:
- Bounded context: Bir kavramın anlamının geçerli olduğu sınır
- Entity: Kimliği olan ve zaman içinde değişebilen nesne
- Value object: Kimlikten çok değeriyle anlamlı nesne
- Aggregate: Tutarlılık sınırı içinde yönetilen nesne kümesi
- Repository: Domain nesnelerini kalıcılık detayından ayıran erişim katmanı
İş Dünyasında Kullanımı
DDD özellikle finans, sigorta, lojistik, pazaryeri, abonelik ve kurumsal operasyon yazılımları gibi kural yoğun alanlarda değerli olur. Basit CRUD panellerinde gereksiz karmaşıklık yaratabilir; faydası domain karmaşıklığı arttığında görünür.
Microservice tasarımında bounded context sınırları servis sınırlarını belirlemeye yardımcı olabilir. MVC ise daha çok uygulama katmanlarını düzenler; DDD iş modelinin nasıl kurulacağına odaklanır.
İlgili Terimler
CQRS, komut ve sorgu sorumluluklarını ayırarak yazma modeliyle okuma modelini farklı ihtiyaçlara göre tasarlayan mimari desendir.
Event SourcingEvent sourcing, uygulama durumunu son değer olarak değil, değişiklikleri anlatan sıralı ve değişmez olay kayıtları olarak saklayan mimari desendir.
MicroserviceMikro hizmet mimarisi, büyük uygulamayı bağımsız geliştirilen, dağıtılan ve ölçeklenen küçük servisler halinde tasarlar.
MVCMVC, uygulama kodunu Model, View ve Controller katmanlarına ayırarak arayüz, veri ve akış sorumluluklarını netleştirir.