Etki Alanına Dayalı Tasarım Nedir?


200

Birisi etki alanı güdümlü tasarımın tam olarak ne olduğunu açıklayabilir mi (kısaca). Terimi çok fazla görüyorum ama gerçekten ne olduğunu veya neye benzediğini anlamıyorum. Alan adı güdümlü olmayan tasarımdan farkı nedir?

Ayrıca, birisi Etki Alanı Nesnesinin ne olduğunu açıklayabilir mi? Alan adı normal nesnelerden nasıl farklıdır?




Yanıtlar:


113

DÜZENLE:

Bu, Google'da en iyi sonuç gibi göründüğü ve aşağıdaki cevabım olmadığından, lütfen bu çok daha iyi cevaba bakın:

https://stackoverflow.com/a/1222488/1240557

ESKİ CEVAP (tam değil :))

İyi bir yazılım oluşturmak için bu yazılımın ne hakkında olduğunu bilmelisiniz. Bankacılığın ne hakkında olduğunu iyi anlamadığınız sürece bir bankacılık yazılım sistemi oluşturamazsınız, bankacılığın alanını anlamak gerekir.

Gönderen: Eric Evans tarafından Domain Driven Design.

Bu kitap DDD'yi tanımlamak için oldukça iyi bir iş çıkarıyor.

Kitabın bir özetini indirmek için kaydolun veya özeti doğrudan indirin .


Bu mini versiyon mükemmel bir referans ve eldeki tam metnin bir kopyasıyla bile yararlı buluyorum. Genellikle ilk önce, sonra metne daha ayrıntılı bilgi için gidiyorum.
Kyri Sarantakos

15
Öyleyse DDD'yi sadece birkaç paragrafta özetlemenin imkansız olduğu bu "bu kitabı oku" cevabından alıyorum? Bir tasarım felsefesi nasıl bu kadar karmaşık olabilir?
Robin Winslow

Bunun imkansız olduğunu söyleyemem, ama okumak için daha iyi yerler olduğunu düşündüm ve Eric Evans kitabı bunun için en iyi kaynak imo, öyleyse neden burada çoğaltmalıyım?
Mikael Östberg

7
Sevgili okuyucu: Benim gibi, en üstteki Google sonucundan buraya geldiyseniz ve kabul edilen cevabı bulmak çok hayal kırıklığına uğradıysa (özür, Mikael) korkmayın, burada SO'da daha tatmin edici açıklamalar var: stackoverflow.com/a/1222488 / 1240557
Kryger

3
Orada cevabımı linkle güncelledim. Bu çok daha iyi bir cevaptı. Teşekkürler!
Mikael Östberg

42

Etki Alanına Dayalı Tasarım, odağı bir sorun etki alanındaki faaliyetleri, görevleri, olayları ve verileri bir çözüm etki alanının teknoloji eserleriyle eşleyen karmaşık sistemlerin geliştirilmesi için bir yöntem ve süreç reçetesidir.

Etki Alanına Dayalı Tasarım'ın vurgusu, daha sonra belirli bir teknoloji kümesinde uygulanabilecek sorun etki alanının soyut bir modelini oluşturmak için sorun etki alanını anlamaktır. Bir metodoloji olarak Etki Alanına Dayalı Tasarım, bu model geliştirme ve teknoloji geliştirmenin, onu kullanan kişilerin ihtiyaçlarını karşılayan ve aynı zamanda problem alanındaki değişim karşısında sağlam olan bir sistemle nasıl sonuçlanabileceğine dair yönergeler sağlar.

Etki Alanına Dayalı Tasarım'ın süreç tarafı, etki alanı uzmanları, sorunlu etki alanını bilen insanlar ve tasarım / mimari uzmanları, çözüm etki alanını bilen insanlar arasındaki işbirliğini içerir. Buradaki fikir, bu iki farklı alandan insanlar iki farklı bakış açısıyla çözümü tartıştıkça paylaşılan bir bilgi tabanını paylaşılan kavramlarla tartışıyorlar.

Belirli bir sisteme ihtiyaç duyan kişiler ile sistemi tasarlayan ve uygulayan kişiler arasında paylaşılan bir sorun alanı anlayışının bulunmaması, başarılı projeler için temel bir engel gibi görünmektedir. Etki Alanına Dayalı Tasarım bu engeli aşmak için bir metodolojidir.

Bir nesne modeline sahip olmaktan daha fazlasıdır. Odak noktası, paylaşılan alandaki gerçek ihtiyaçların keşfedilebilmesi ve bu ihtiyaçları karşılamak için uygun bir çözümün oluşturulması için ortak iletişim ve işbirliğinin geliştirilmesi ile ilgilidir.

Etki Alanında Tasarım: İyi ve Zorlu , bu yorumla kısa bir genel bakış sunar:

DDD, üst düzey mimariyi keşfetmeye ve yazılımın çoğaltması gereken alanın mekaniği ve dinamikleri hakkında bilgi edinmeye yardımcı olur. Somut olarak, iyi yapılmış bir DDD analizinin alan uzmanları ve yazılım mimarları arasındaki yanlış anlaşılmaları en aza indirdiği ve müteakip pahalı değişim taleplerinin sayısını azalttığı anlamına gelir. DDD, etki alanı karmaşıklığını daha küçük bağlamlara bölerek, proje mimarlarını şişirilmiş bir nesne modeli tasarlamaya zorlamaktan kaçınır; konferans salonu beyaz tahta boyutu.

Ayrıca , kısa bir örnek sağlayan Hizmetler Mimarisi için Etki Alanına Dayalı Tasarım'a da bakın . Makale, Etki Alanına Dayalı Tasarım'ın aşağıdaki küçük resim açıklamasını sağlar.

Etki Alanına Dayalı Tasarım, kullanım durumlarımızla ilgili olarak işin gerçekliğine dayanan modellemeyi savunur. Artık yaşlandıkça ve yutturmaca seviyesi düştükçe, birçoğumuz DDD yaklaşımının eldeki problemi anlamada ve çözümün ortak anlayışına yönelik yazılım tasarlamada gerçekten yardımcı olduğunu unutuyoruz. Uygulamalar oluştururken DDD, etki alanları ve alt etki alanları gibi sorunlardan bahseder. Sınırlı bağlamlar olarak bağımsız adımları / sorun alanlarını tanımlar, bu sorunlar hakkında konuşmak için ortak bir dili vurgular ve uygulamayı desteklemek için varlıklar, değer nesneleri ve toplu kök kurallar gibi birçok teknik kavram ekler.

Martin Fowler, bir alan adı güdümlü tasarımın bir metodoloji olarak bahsedildiği bir dizi makale yazmıştır. Örneğin, bu makalede, BoundedContext , Etki Alanına Dayalı Geliştirme'nin sınırlı bağlam kavramına genel bir bakış sağlar.

Bu genç günlerde, tüm işin birleşik bir modelini oluşturmamız önerildi, ancak DDD, "büyük bir sistem için etki alanı modelinin toplam birleştirilmesinin uygun veya uygun maliyetli olmayacağını" öğrendiğimizi fark etti 1 . Bunun yerine DDD, büyük bir sistemi, her biri birleşik bir modele sahip olabilen Sınırlı Bağlamlara böler - esasen ÇokluKanonik Modelleri yapılandırmanın bir yolu.


21

Sen SADECE CAN şu ne ilk kavrayarak Alan tahrik tasarım anlamak:

Alan adı nedir?

Bir sistemin oluşturulduğu alan. Havaalanı yönetimi, sigorta satışları, kafeler, yörünge uçuşu, adını siz koyun.

Bir uygulamanın birkaç farklı alana yayılması olağandışı değildir. Örneğin, çevrimiçi bir perakende sistemi nakliye (öğelere ve hedefe bağlı olarak teslim etmek için uygun yollar seçme), fiyatlandırma (promosyonlar ve örneğin yere göre promosyonlar ve kullanıcıya özel fiyatlandırma dahil) ve öneriler (ilgili hesaplama) alanlarında çalışıyor olabilir. satın alma geçmişine göre ürünler).

Model nedir?

"Eldeki soruna yararlı bir yaklaşım." - Gerry Sussman

Çalışan sınıfı gerçek bir çalışan değildir. Gerçek bir çalışanı modeller. Modelin gerçek çalışanlarla ilgili her şeyi yakalamadığını biliyoruz ve bunun amacı bu değil. Sadece mevcut bağlam için ilgilendiğimizi yakalamak istiyoruz.

Farklı alan adları, aynı şeyi modellemenin farklı yollarıyla ilgilenebilir. Örneğin, maaş bölümü ve insan kaynakları bölümü çalışanları farklı şekillerde modelleyebilir.

Alan adı modeli nedir?

Alan adı için bir model.

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

Etki alanı modeline derinden değer veren ve onu uygulamaya bağlayan bir geliştirme yaklaşımıdır. DDD ilk olarak Eric Evans tarafından üretildi ve geliştirildi.

Buradan kaldırıldı


12

Etki Alanı Odaklı Tasarım'da kontrol edebileceğiniz başka bir iyi makale . başvurunuz üniversite ödevinden daha ciddi bir şeyse. Temel dayanak, her şeyi varlıklarınız etrafında yapılandırmak ve güçlü bir etki alanı modeline sahip olmaktır. Altyapı ile ilgili şeyler sağlayan hizmetler (e-posta gönderme, sürekli veri gibi) ve aslında temel iş gereksinimleriniz olan şeyleri yapan hizmetler arasında ayrım yapın.

Umarım yardımcı olur.


5

TDD ve BDD'de olduğu gibi, siz / ekip kod uygulamasından ziyade sistemin test ve davranışına en çok odaklanın.

Sistem analisti, ürün sahibi, geliştirme ekibi ve tabii ki kod - varlıklar / sınıflar, değişkenler, fonksiyonlar, kullanıcı arayüzleri süreçleri, Domain Driven Design adı verilen aynı dili kullanarak iletişim kurduğunda

DDD bir düşünce sürecidir. Bir yazılım tasarımını modellerken, veri yapıları, veri akışları, teknoloji, iç ve dış bağımlılıklar yerine iş etki alanını / sürecini dikkatin merkezinde tutmanız gerekir.

DDD kullanarak model systerm için birçok yaklaşım vardır

  • olay sağlama (olayları tek bir gerçek kaynağı olarak kullanma)
  • ilişkisel veritabanları
  • grafik veritabanları
  • fonksiyonel dilleri kullanma

Etki alanı nesnesi:

Çok naif sözlerle,

  • iş süreci / akışına dayalı bir adı vardır
  • dahili durumu üzerinde tam kontrole sahiptir, yani durumu manipüle etme yöntemlerini ortaya koyar.
  • her zaman tüm iş değişkeni / iş kurallarını kullanımı bağlamında yerine getirir.
  • tek sorumluluk ilkesini takip eder

TDD - Test Odaklı Geliştirme
Nitin babariya

BDD - Davranış Odaklı Geliştirme
Nitin babariya

DDD - Domain Driven Development
Nitin babariya

DDD -> Alan Adı Odaklı Tasarım ~ Geliştirme ~
psaxton

4

DDD (alan güdümlü tasarım), bir projenin gereksinimlerini analiz etmek ve bu gereksinimlerin karmaşıklığını ele almak için yararlı bir kavramdır. ilişkiler eski değil ama bazı sorunları var:

  • Karmaşık gereksinimleri olan büyük projelerde, bu küçük projeler için harika bir tasarım yolu olmasına rağmen yararlı değildir.

  • teknik anlayışı olmayan hiçbir teknik elemanla uğraştığınızda, bu çatışma projemizde bazı büyük sorunlara neden olabilir.

DDD, ana projeyi bir Etki Alanı olarak düşünmek ve bu projenin her bir bölümünü Sınırlı Bağlam ile ünlü olduğumuz küçük parçalara bölmek ve her birinin diğer parçalar üzerinde herhangi bir etkisi olmayan ilk sorunu ele alıyor. İkinci sorun, teknik ekip üyeleri ile Ürün sahipleri arasında teknik olmayan ancak gereksinimleri hakkında yeterli bilgiye sahip olan yaygın bir dil olan her yerde bulunan bir dil ile çözülmüştür.

Genellikle Domain için basit tanım , sahipler ve diğer ekipler için para kazanan ana projedir.


1

Aşağıdaki pdf size daha büyük resim verecek inanıyorum. Alan Adı Odaklı Tasarım: Eric Evans

NOT: Üzerinde çalışabileceğiniz bir proje düşünün, anladığınız küçük şeyleri uygulayın ve en iyi uygulamaları görün. Mikro hizmet mimarisi tasarım yaklaşımına da yeteneğinizi artırmanıza yardımcı olacaktır.


0

Başkalarının cevaplarını tekrarlamak istemiyorum, bu yüzden kısaca bazı yaygın yanlış anlamaları açıklıyorum

  • Pratik kaynak: ETKİLEŞİMLİ TASARIM MODELLERİ, İLKELERİ VE UYGULAMALARI Scott Millett
  • Karmaşık iş sistemleri için bir metodolojidir. İş uzmanlarıyla iletişim kurarken tüm teknik konuları alır
  • Tüm geliştirme ekibi genelinde kapsamlı bir anlayış (basitleştirilmiş ve damıtılmış model) sağlar.
  • dev ekibi veya diğer ekiplerle iletişim için kullanılan her yerde kullanılan dili (tüm geliştirme ekibi tarafından anlaşılan dil, iş uzmanları, iş analistleri, ...) kullanarak iş modelini kod modeli ile senkronize tutar.
  • Proje Yönetimi ile ilgisi yoktur . Agile gibi proje yönetimi yöntemlerinde mükemmel bir şekilde kullanılabilir.
  • Hepsini projenizde kullanmaktan kaçınmalısınız

    DDD, en fazla çabayı çekirdek alt alana odaklama gereğini vurgular. Temel alt alan, ürününüzün başarılı olması ile başarısız olması arasındaki fark olacak alandır. Ürünün benzersiz satış noktası, satın alınmak yerine inşa edilmesinin nedeni.

    Temel olarak, çok fazla zaman ve çaba gerektirdiği için. Bu nedenle, tüm alan adını alt alana ayırmanız ve yalnızca yüksek işletme değerine sahip olanlara uygulamanız önerilir. (eski e-posta gibi genel alt alanda değil, ...)

  • Nesne yönelimli programlama değildir. Çoğunlukla sorun çözme yaklaşımıdır ve ( bazen ) alan modellerinizde OO kalıplarını (Gang of Four gibi) kullanmanıza gerek yoktur. Sadece İş Uzmanları tarafından anlaşılamadığı için (Fabrika, Dekoratör, ... hakkında çok fazla şey bilmiyorlar). DDD'de OO kavramlarına uygun% 100 olmayan bazı desenler (İşlem Komut Dosyası, Tablo Modülü gibi) bile vardır.

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.