Mimari (IT)Yazılım Mimarisi

Alan Tabanlı Tasarım (DDD) mimarisi nedir, DDD'nin temel yapı taşları nelerdir ve bağlam sınırları nasıl uygulanır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Alan Tabanlı Tasarım (DDD) yazılım sistemleri tasarımına yönelik bir yaklaşım olup, konu alanına ve onun mantığına odaklanır. DDD, karmaşık konu alanlarını ilişkili ama bağımsız sınırlı bağlamlara (bounded contexts) böler. Her bağlamda, alan uzmanları ile uyumlu kendi dili (Ubiquitous Language) geliştirilir. DDD'nin temel yapı taşları:

  • Varlık (Entity): benzersiz bir kimliğe ve yaşam döngüsüne sahip nesne (örneğin, sipariş).
  • Değer Nesnesi (Value Object): benzersiz bir kimliği olmayan değişmez nesne (örneğin, teslimat adresi).
  • Agregat & Agregat Kökü: tüm değişikliklerin agregat kökü üzerinden gerçekleştiği nesneler kümesi.
  • Depo (Repository): agregatlarla çalışmak için bir katman.
  • Hizmet (Service): belirli bir nesneye ait olmayan işlemler.

Sınırlı bağlamlar genellikle açık bir şekilde tanımlanmış API'ler veya olaylar aracılığıyla etkileşen ayrı mikro hizmetler olarak temsil edilir.

Java (Spring) örneği:

// Değer Nesnesi örneği @Embeddable public class Address { private String city; private String street; // ... yapıcılar, equals, hashCode } // Agregat Kökü içeren Varlık örneği @Entity public class Order { @Id private Long id; @Embedded private Address deliveryAddress; // ... iş yöntemleri }

Anahtar özellikler:

  • Konu alanının net bir şekilde parçalanması ve mantığın konteynerleştirilmesi.
  • İzolasyon sayesinde gelişimin ve ölçeklenmenin kolaylaştırılması.
  • Teknik ve iş dilinin takım içindeki uyumunun artırılması.

Kandırmaca Soruları.

DDD'deki tüm nesneler Varlık mı olmalıdır?

Hayır, ayrıca Değer Nesneleri de vardır — benzersizlikleri yoktur, durumu kimliğini tamamen belirler.

Address a1 = new Address("Moskova", "Arbat"); Address a2 = new Address("Moskova", "Arbat"); System.out.println(a1.equals(a2)); // true

Mikro hizmetlere ayrılmak DDD uygulamak anlamına mı gelir?

Hayır, DDD'yi monolitik bir uygulama içerisinde de içsel bağlam sınırlarını oluşturarak uygulamak mümkündür.

Her agregat için mutlaka bir depo gerekli mi?

Genellikle evet, ancak bazı durumlarda agregatı başka bir agregatın parçası olarak tamamen saklayabilirsiniz, eğer o ayrı bir iş işlemi kökü değilse.