Soru DDD zaman kaybı mıdır? [kapalı]


Googling "DDD ne tür uygulamalar için uygundur?" bana aşağıdaki cevabı verdi:

Muhtemelen tüm yazılım uygulamalarının% 95'i “DDD'yi kullanmak için iyi değil” kategorilerine girmektedir. (görmek makale)

Peki tüm bu yaygara nedir?

Üzerinde çalıştığım uygulama ağırlıklı olarak veri merkezli olmakla birlikte yine de uygulanacak bazı iş mantığı ve kuralları içerir. DDD tekniklerini uygulamaya başlamak zaman kaybı mıdır? Daha geleneksel Veri Erişim Katmanı, bir POCOs modeli ve İş Mantığı Katmanı kullanmaktan daha mı iyi olurum? Ya da farklı bir şekilde belirtmek gerekirse - DDD'ye sağlam bir alternatif nedir?


44
2018-05-01 08:11


Menşei


Bu sohbet için iyi bir konu olabilir. - Trilarion


Cevaplar:


DDD'nin projelerinde yararlı olduğunu düşünen pek çok geliştirici, işlerinin neyle ilgili olduğunu düşündükleri tuzağa düşüyorlar. Bu durum böyle değil. Bir geliştiricinin işi, işlevin gerçekleştirilmesi ile ilgilidir, böylece bir sorun yazılım aracılığıyla çözülebilir. Bu, yazma kodunun geliştiricinin ne yaptığının başlangıcı olmadığı sonucuna varır, ancak sonuç: kod, kodun ÖNCE yazılmasından ÖNCE tüm sürecin sonucudur.

DDD kod yazmakla ilgili değil, harika bir yazılım elde etmek için 10 adımlık bir süreç değil, kodun ÖNCE OLUŞTURULMADAN ÖNCE tüm süreçle ilgili, sorunun ne olduğu konusunda fikir sahibi olmak, ne / kime katılıyor? bilgi akışları ve bu unsurların neye benzediği, birbirleriyle nasıl ilişki kuracakları vb. Aslında, DDD'nin en önemli kısmı Alan uzmanları ve geliştiriciler arasında, yanlış yorumlama yapılmadan mümkün kılan bir dil oluşturmak. Bu, Evans'ın konuştuğu 'Ubiquitous Language'dır. Gerçekte, tüm süreç, kodun, tahmin edilmesi gereken çok az şey olan, açık ve net olan bir süreç yazılmasından ÖNCE yapar. (bu amaç).

'DDD pratikte nasıl çalışır?' Ve 'DDD ile nasıl kod yazdığımı gösteren bir örnek verebilir?' ve benzer şeyler gerçekten de bu türden soruları soran insanların kod yazmaya odaklanmış olmalarından kaynaklanıyorlar, fakat NEDEN kod yazıyorlar ve başka bir kod yazmıyorlar. I.o.w .: Eğer DDD'nin, işlevsellik olarak NE yazmanız gerektiğini ve NEDEN ile ilgili olduğunu anlıyorsanız, işler yerine oturmaktadır. Bu kodu nasıl yazıyorsun, bu size kalmış. Ama dediği gibi: Bu artık en büyük problem değil, o zamana kadar neyi yazdığınızı ve niçin yazdığınızı zaten biliyorsunuz.


97
2018-05-01 08:34



DAHA FAZLASI, bir kod yazmanın bir yolu değil. Alanlar hakkında düşünme, tasarımınızı yönlendirir ve bu da herhangi bir şey olabilecek kodla sonuçlanır. Bazı insanlar hata düşünmek için hata yaparlar ve düşünceyi, alan yönelimli tasarımı unuturlar. - Frans Bouma
DDD'nin faydalarının +1 mükemmel tanımı. “Alan uzmanları ve geliştiriciler arasında yanlış anlaşılmadan mümkün kılan bir dil yaratmak” olarak özetlenebilir diye düşünüyorum. - Robert Harvey♦
Vikipedi, DDD'yi oldukça kod merkezli bir şekilde tanımlamakta ya da en azından belirli DDD'ye özgü kod tasarım kalıplarının kullanımını vurgulamaktadır ... - alchemical
@LuftMensch: yeh senin hatan, Wikipedia'nın kesin bir kaynak olduğunu düşünüyor. - Matt Kocaj
Çevresindeki en büyük işbirlikçi derlemelerden biri, herkesin düzenleyebileceği ... eğer varsa, en azından çoğu insanın bir şeyi nasıl anladıkları ... gerçekte çoğu insan DDD'yi basit bir iş anlayışı olarak görmüyor - her zaman yapmamız gereken bir şey. Pratikte, her şey için özel depolama nesneleri için DataTable'ların değiştirilmesi ve bu nesneleri yönetmek ve depolamak için depolar ve fabrikalar değişiyormuş gibi gözüküyordu. Bu kalıpları yalnızca gerçekten kullanışlı oldukları yerlerde uygulayın. - alchemical


İşte çok benzer bir soru: Web Katmanının doğrudan DAL'e erişmesine izin veriyor musunuz?

Tüm projelerim için DDD kullanıyorum. Daha küçük uygulamalarda, bazı kavramlar geçerli değildir, ancak boyutların büyüklüğüne bakılmaksızın, birçok projenin uygulanabilir olduğunu düşünüyorum.


7
2018-05-01 08:25



Kabul edilen daha küçük projeler her şeye ihtiyaç duymayabilir - aslında daha küçük bir proje diğerlerinden daha farklı şeylere ihtiyaç duyabilir. - Preet Sangha
Peki, mu projesinin büyüklüğü oldukça büyük ... DD'nin veri merkezli olduğunda yardımdan daha fazla zarar vereceğini düşünüyor musunuz? - JacobE


Biliyorsunuz, bazen% 5 diğer tüm% 95'den daha fazla para kazanıyor - bu yüzden DDD var.

belirli karmaşık büyük sistem içindir.


6
2018-05-01 08:14



Alternatif nedir? - JacobE
Her zaman değil ... Bir "para" alanı DDD'den yararlanan nispeten küçük bir sistemdir ve genellikle DDD kavramını küçük göstermek için kullanılır. - JasonTrue
@JasonTrue: Bir kurumsal sistemin kavramsal anlamda para ile ilgisi olması gerekmez. - UpTheCreek
“Para” yı tekrarlayarak sadece sevimli davranıyordum, çünkü benim amacım DDD'den sadece küçük, karmaşık olanlardan değil, küçük sistemlerin olmasıydı. - JasonTrue


Üzgünüz ama eğer DDD, Frans Bouma'nın söylediği gibi bir düşünce tarzı olsaydı, o zaman Kalıcılık Cehaleti gibi şeyler önermezdi. Bu, başkalarını yeterince alt sınıf geliştiricisi olarak reddediyor.

DDD'nin en az bir önyargıya sahip olduğu PI, mimari bir seçenektir. Artık düşünmenin bir yolu değil; Zaten bir şeyin size sunulduğu bir şey, çoğu zaman çok belirsiz uyarıların herhangi bir kullanımda olması: "her şey için uygun değil".

Fakat PI yoluna gitmeye karar vermek ya da başlamamak kendi başına bir meydan okumadır ve bu konuda huzursuzluk hissederse, birisine isimlerini (“bir kodlayıcı”) çağıramazsınız.

MS Access benzeri bir ara yüze sahip bir ERP paketi alın: toplam çalışan, otomatik güncelleme sütunları olan ve 100 000 kayıtta pageless kaydırma yapan ızgaralar. Açıkça bir DDD yaklaşımı bu uygulama hakkında nasıl gidileceğini düşünmek için uygundur. Ama yıllar geçtikçe hiç kimseyi görmedim - ne kitapta ne de internette, kanıtlarla desteklenen açıklamalar olsa da, gerçek hayat kodu örneklerini, PI'nin bununla nasıl başa çıkabileceğini her yerde birden bulunan teslim etmek isteyen herkes için durum ticari sınıf uygulamaları ve kullanıcı deneyimleri.

Bu konuda dindar olmak istemiyorum. DDD ve DAL taraftarları aşırı derecede dindar olma eğilimi gösterirler ve bir kez ısırılmış olan ancak açık fikirli olanları uzaklaştırabilirler. Birçok kişi gerçek yaşam deneyimlerini (yani, THINK) yüzleşmek ve sadece vaatleri desteklemek için sadece Kediler, Otomobiller ve temel Sipariş / Emirler (örn. Zayıf KOD) ile hizmet almak istemez.


6
2018-04-22 10:59





DDD bir süredir sürdürülecek olan bir yazılımdır. Benim için bu, alanla değişecek fikirleri ifade etmesi gerektiği anlamına gelir. Basit bir uygulama kısa bir teslim süresi ve kısa uygulama süresi için mükemmel olabilir. Ancak yazılımı büyütmeniz gerekiyorsa, DDD ilkeleri çok yardımcı olacaktır. DDD ön tarafa zor olabilir ama her zamanki dil ve ayrılık endişeleri hakkında fikir sahibi olduktan sonra işler kolaylaşmaya başlıyor.


5
2018-05-01 08:33





Makaleyi biraz daha okursanız, şunu görürsünüz:

DDD'nin kullanıldığı uygulamaların% 5'i için   iyi bir uyum, bu çok iyi bir uyum.   Bu durumlar için DDD yardımcı olacaktır   Çok sert bir ceviz kırarsın. Burada, DDD   Bunun için gümüş mermi olabilir   kurt adam senin menajerin sadece   masanıza işaret etti.

Bunun nedeni bu yüzden.


5
2018-05-01 08:50



ayrıca şunu göreceksiniz: "sadece mucizeler beklemeyin ve kodunuzu karmaşık hale getirme konusunda dikkatli olun - bazen daha basit daha iyidir." - alchemical
@Luft Mensch => "Basit, karmaşıktan daha iyidir. Karmaşık, karmaşıktır. @Fedecarg" - Arnis Lapsa


  • Uygulamanız ağırlıklı olarak veri merkezli olduğundan, belki de mimariniz temelde geleneksel olabilir.

  • Daha mantıksal ve potansiyel etki alanı veya değer nesneleriniz olduğu yönler için, belki de kodu düzenlemek için DDD fikirlerinden bazılarını kaldırabilirsiniz.

  • Genel olarak, "ses alternatifi", işleri olabildiğince basit tutmak, yararlı olduğu yerlerde DDD kavramlarını kullanmak ve makalenin önerdiği gibi, gereksiz şeyleri karmaşıklaştırmamaktır.

Şimdi benzer bir projeye başlıyorum, veri manipülasyonu ve daha mantık / algoritma odaklı alanların bir karışımı. Benzer şekilde DDD'nin projeye fayda sağlayacak kısımlarını da almak istiyorum, ancak bunun tersine verimli olabileceği alanlara zorlamaya çalışmayın.


5
2017-12-02 23:46



DDD bir hile, masaya HERHANGİ BİR yeni fikir getirmiyor, sadece kodlama uygulamalarındaki son gelişmeler için önyargılı saf eski OOP / OOD. "Öncelikle alan uzmanlarıyla konuşun, kilit soyutlamaları belirleyin" OOP hakkındaki 30 yıllık bir kitapta okuduğunuz ilk şey. "Mantıksız olduğu durumlar haricinde, etki alanı sınıfları içinde işlevselliği kapsama" ... Duh! - rustyx