DDD-Lite bağımlılık enjeksiyonu için bir kalıp dil ​​midir?


17

Greg Young'un konuşmasına tökezledim 7 Sebep DDD Projelerinin başarısız olmasının nedeni , DDD-Lite olarak 7:20 olarak adlandırdığı bir şeyden bahsediyor.

Özetle, bazılarının DDD'yi DDD ile ilgili başka bir şey yapmadan kalıp dilleri (varlıklar, depolar, değer nesneleri, hizmetler vb.) Olarak kullandığını söylüyor. .Net'teki alan modellerinin% 60 veya daha fazlasını DDD-Lite olarak kabul ediyor. DDD-Lite'ın temel olarak bağımlılık enjeksiyonu etrafında bir dil geliştirdiğini düşünüyor, gerçekten yapmanız gerekmeyen bir şey. Ya DDD'yi tamamen yaptığını ya da daha basit bir şey yaptığını söylüyor. Aksi takdirde, bir kişinin tüm bu çalışmaları iyi soyutlamalar inşa etmekte olduğunu, ancak gerçek bir faydası olmadığını iddia eder.

İtiraf etmeliyim ki DDD hakkında istediğim kadarını bilmiyorum ve henüz kullanmaya çalışmadım. Eric Evan'ın kitabını da okumadım. Ben am çok daha Eric Evans'ın DDD kitaptan bu konu kullanım şartları ve başvuru kavramlar üzerinde Dependency Injection ve bolca kitap ve bloglar ilgilenen. DDD konseptlerine maruz kaldığım yer burası. Bunu okuduğum kitaplar şunları içeriyor:

  • .NET'te Bağımlılık Enjeksiyonu
  • Microsoft .Net: Kuruluş için Mimari Uygulamaları
  • .NET'te Brownfield Uygulama Geliştirme

Biri Bağımlılık Enjeksiyonu yapmak istiyorsa, "DDD-Lite" yapmanın daha basit alternatifleri nelerdir? Bana DDD-Lite kavramlarını "DDD-Lite" bir şekilde kullanıyor olsun, iyi soyutlamalar inşa etmek oldukça yararlı. (Mark Seemann'ın blog gönderilerine bakın: Arayüzler soyutlama değildir ve daha iyi soyutlamalara doğru ). Bağımlılık Enjeksiyonu yapan herkesin tam teşekküllü DDD yapıyor olduğuna (veya yapması gerekiyor) inanmakta zorlanıyorum. Greg Young'ın DDD-Lite hakkındaki argümanını bir şekilde yanlış anladım mı?

Yanıtlar:


15

Bağımlılık Enjeksiyonu ve DDD iki ayrık kavramdır. Bağımlılık Enjeksiyonu yapmak DDD yapmayı veya DDD Bağımlılık Enjeksiyonu yapmayı gerektirmez.

Birçok DDD projesi, desenleri seçtikleri ancak DDD'nin arkasındaki süreci ihmal ettikleri için başarısız oluyor. İş kurallarını çıkarmak için zaman ayırmazlar. Alan modeline ve dikkatli soyutlamalara odaklanmazlar. Bir Ubiquitous Dili oluşturmazlar.

Kısacası: Sanırım bu bir yanlış anlama


4
+1 Evans'ın kitabında açıklanan kalıplar, çok daha geniş bir bağlamda hala değerlidir - biri onları tek başına uygulamanın DDD yapmadığını anladığı sürece.
Mark Seemann

1
Evet DI! = DDD'nin farkındayım. @MarkSeemann, Greg'in argümanı, insanların olmadığı zaman DDD yaptığını söyledikleri gibi görünüyor. Tamam anladım. Ancak aynı zamanda DDD'de bulunanlar gibi soyutlamaların kullanılmasının (kümeler, depolar, etki alanı varlıkları, değer nesneleri, hizmetler, vb.) Sadece bağımlılık enjekte edilen bir mimariyi desteklemek için kullanılıyorsa gereksiz olduğunu savunuyor. Bu benim anlamadığım kısım (yanlış olan). Belki de saman adam argümanı budur , çünkü bu tür şeyleri kullanmak sadece "bağımlılık enjeksiyonu etrafında bir dil oluşturmak" değildir.
Matt

3
Greg kısmen doğrudur: DDD'deki özel desenler özellikle DI ile ilişkili değildir. Ancak kitabımda bazı terminolojileri, özellikle de Varlık ve Değer Nesnesi ile Hizmet'in tanımını aldım, çünkü nereye enjekte edileceğini anlamak önemlidir. Ancak, hem bu terminoloji hem de Depo ve Fabrika gibi diğer modeller DDD kitabından çok daha eskidir, bu nedenle DDD dışında bu tür şeylerin gereksiz olduğunu söylemek benim için yanlış geliyor. DDD'yi gerçekte nasıl tanımladığınıza bağlı olabilir.
Mark Seemann

2

Bahse girerim, tüm DDD yaklaşımı yerine Etki Alanına Dayalı Tasarım modellerinin bir alt kümesi varsa, basit uygulamaya atıfta bulunur. DDD-Lite terimi, DDD yeni başlayanlar arasında popüler olan http://www.infoq.com/minibooks/domain-driven-design-quickly kitabını dolaylı olarak ifade eder , ancak yalnızca resmi yerel modelleme tasarım örüntüleri.

Bağımlılık Enjeksiyonu iyi bir şey olarak kabul edilmesine rağmen, DDD ve DI arasında güçlü bir korelasyon yoktur.

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.