Etki Alanına Dayalı Tasarım (DDD) nedir? [kapalı]


276

DDD'nin (Domain Driven Design) makalelerde çok kullanıldığını görmeye devam ediyorum - DDD hakkında Wikipedia girişini okudum, ancak yine de gerçekte ne olduğunu ve sitelerimi oluştururken nasıl uygulayacağımı anlayamıyorum?

Yanıtlar:


595

İlk olarak, ihtiyacınız olduğunu bilmiyorsanız, ihtiyacınız olmayabilir. DDD'nin çözdüğü sorunları tanımıyorsanız, belki de bu sorunlarınız yoktur. DDD savunucuları bile DDD'nin yalnızca büyük (> 6 ay) projeler için tasarlandığına dikkat çekecektir.

Hala bu noktada okuduğunuzu varsayarsak, DDD'yi almam şu şekildedir:

DDD, yazılımınızı gerçek dünyadaki bir sistem veya süreç modeli haline getirmeye çalışmakla ilgilidir. DDD'yi kullanırken , gerçek dünya sisteminin nasıl çalıştığını açıklayabilen bir alan adı uzmanıyla yakın çalışmanız gerekir . Örneğin, at yarışlarına bahis koymayı ele alan bir sistem geliştiriyorsanız, alan adı uzmanınız deneyimli bir bahis şirketi olabilir.

Kendiniz ile etki alanı uzmanı arasında , temelde sistemin kavramsal bir açıklaması olan her yerde bulunan bir dil (UL) oluşturursunuz. Fikir, sistemin ne yaptığını etki alanı uzmanının okuyabileceği ve doğru olduğunu doğrulayabilecek şekilde yazabilmenizdir. Bahis örneğimizde, her yerde bulunan dil, 'yarış', 'bahis', 'oranlar' vb. Kelimelerin tanımını içerecektir.

UL tarafından tanımlanan kavramlar, nesne yönelimli tasarımınızın temelini oluşturacaktır. DDD, nesnelerinizin nasıl etkileşime girmesi gerektiği konusunda net bir rehberlik sağlar ve nesnelerinizi aşağıdaki kategorilere ayırmanıza yardımcı olur:

  • Alt bölümleri olabilen bir değeri temsil eden değer nesneleri (örneğin, bir tarih bir gün, ay ve yıl olabilir)
  • İle nesneler Entities, kimlik . Örneğin, her Müşteri nesnesinin kendi kimliği vardır, bu nedenle aynı ada sahip iki müşterinin aynı müşteri olmadığını biliyoruz
  • Toplu kökler, diğer nesnelerin sahibi olan nesnelerdir. Bu karmaşık bir kavramdır ve sahibi olmadığı sürece mantıklı olmayan bazı nesneler olduğu için çalışır. Örneğin, bir 'Sipariş Çizgisi' nesnesi ait olmak için bir 'Sipariş' olmadan anlamsızdır, bu nedenle Siparişin birleştirilmiş kök olduğunu ve Sipariş Hattı nesnelerini yalnızca Sipariş nesnesindeki yöntemlerle değiştirilebildiğini söylüyoruz

DDD ayrıca birkaç desen önermektedir:

  • Havuz , kalıcılık modeli (verilerinizi genellikle veritabanına / veritabanından kaydetme ve yükleme)
  • Fabrika , nesne yaratmak için bir model
  • Hizmet, etki alanının kendisinin bir parçası olmadan ana etki alanı nesnelerinizi işleyen nesneler oluşturmak için bir model

Şimdi, bu noktada şunu söylemeliyim ki, daha önce bu şeylerden herhangi birini duymadıysanız, son tarihiniz olan herhangi bir projede DDD'yi kullanmaya çalışmamalısınız. DDD'yi denemeden önce tasarım desenlerine ve kurumsal tasarım desenlerine aşina olmalısınız . Bunları bilmek DDD'yi kavramayı çok daha kolay hale getirir. Ve yukarıda belirtildiği gibi, InfoQ'dan (DDD hakkında konuşmaları da bulabileceğiniz) DDD'ye ücretsiz bir giriş var .


33
Vay be ... Ne harika bir cevap! Çok takdir ve her yerde bir mil okudum en iyi açıklama. Teşekkürler .. Yarın bu kitabı indireceğim.
leen3o

3
"Agrega kökleri diğer nesnelerin sahibi olan nesnelerdir. Bu karmaşık bir kavramdır ve sahipleri olmadıkça mantıklı olmayan bazı nesneler olduğu için çalışır." Sanırım burada yanlış anlaşılma olabilir Toplam değer, "Tam Değer" tir, bununla birlikte, Topluluğun tüm işletme değişmez kuralının burada uygulanması gereken İşlem Sınırı ile daha fazla ilgisi vardır.
super1ha1

6
Dürüst olmak gerekirse, bu, geliştiricilerin bir aydan fazla bir süre mimarlarla işbirliği yaptığı hemen hemen her projeye benziyor. (Eh, en azından deneyimlerime göre.) Hangi farkındalık bana cevabını daha çok takdir ediyor. :)
Jaroslav Záruba

4
DDD'nin "sadece büyük projeler için tasarlandığı" ifadesine katılmıyorum. DDD, tam olarak yapmanız ya da hiç yapmamanız gereken bir şey değildir. DDD'den bazı uygulamalar yapabilirsiniz. Örneğin, sadece "Değer Nesneleri" ve "her yerde bulunan dil" yapabilir ve küçük bir projede toplu kökler yapamazsınız.
EasterBunnyBugSmasher

6
Bu arada, yaptığımız veya modellediğimiz her proje için etki alanı analizi yapmıyoruz. Proje alanını ve kapsamını anlamak için müşterilerle ve KOBİ'lerle BA olarak konuşmamızı hiç bitirmedik mi? Hala başka bir Yazılım geliştirme projesinden sonra DDD'de olağanüstü olanın ne olduğunu anlamıyorum?
süpernova

51

StackOverflow'u örnek olarak alalım. Bazı web formları tasarlamaya başlamak yerine, öncelikle sorun etki alanınızdaki varlıkların, örneğin Kullanıcılar, Sorular, Yanıtlar, Oylar, Yorumlar vb. etki alanına etki alanı güdümlü tasarım denir .

Eric Evans'ın kitabında daha fazlasını okuyabilirsiniz .


5
Eric Evans'ın kitabının ücretsiz kısa bir sürümü var .
troelskn

Sorun, web sayfalarını kullanarak bağlamadan önce yararlı bir şey söyleyebilecekleri yeterince etki alanı anlayan birine ihtiyacın var! Bu durumda greate!
Ian Ringrose

3
Ama dürüstçe formu tasarlayarak kim başlasın? Saygın herhangi bir akademik kurs iş gereksinimlerine göre analiz, tasarım ve modelleme uygulamalarından geçecektir. Bu teknikte yeni olanı anlamıyorum.
Sebas

6
Ben de, bu sadece bu kavram gelmeden önce herkes tarafından kullanılan bir Nesne Odaklı Tasarım. Burada yeni bir buluş görmüyorum.
Ronen Festinger

2
@RonenFestinger lütfen DDD'yi yalnızca bu cevapla yargılamayın. Eric Evans'ın kitabında birçok fikir var. Örneğin sınırlı bağlamlar. Sınırlı Bağlam paradigması, bugün inşa ettiğimiz mikro hizmetlerin temel direklerinden biridir. Kitabı okumak ayrıca mikro hizmetleri anlamanıza yardımcı olur.
Kerem Baydoğan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.