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.