İncelediğim DDD hakkında birçok ders çoğunlukla teoriyi kapsıyor. Hepsinin ilkel kod örnekleri vardır (Çoğul görüş ve benzeri).
Web'de ayrıca birkaç kişi tarafından DDD ile EF'yi kapsayan öğreticiler oluşturma girişimleri de vardır. Onları kısaca incelemeye başlarsanız - birbirlerinden çok farklı olduklarını hemen fark edersiniz. Bazı insanlar uygulamayı asgari düzeyde tutmayı ve EF'nin üstüne depo gibi ek katmanlar eklemekten kaçınmayı önerir , diğerleri kesinlikle ekstra katmanlar oluşturur, hatta genellikle Agrogate Roots'a enjekte ederek SRP'yi ihlal eder DbContext
.
Fikir temelli bir soru sorarsam çok özür dilerim ama ...
Uygulama söz konusu olduğunda - Entity Framework en güçlü ve en yaygın kullanılan ORM'lerden biridir. Ne yazık ki DDD'yi kapsayan kapsamlı bir kurs bulamayacaksınız.
Önemli hususlar:
Entity Framework, UoW & Repository (
DbSet
) öğesini kutudan çıkarırEF ile modellerinizde gezinme özellikleri bulunur
EF ile modellerin hepsi her zaman mevcut kapalı
DbContext
(onlar olarak temsil edilirDbSet
)
tuzaklar:
Eğer olamaz Modellerinizin navigasyon özelliklerine sahip ve bu onları ve aramayı değiştirmek mümkündür - Çocuğunuz modeller sadece Agrega Root yoluyla etkilenir garanti
dbContext.SaveChanges()
ile
DbContext
size böylece her türlü modeli erişebilir engellemeyi Agrega RootEğer aracılığıyla kök nesnenin çocuklara erişimi kısıtlayabilir
ModelBuilder
içindeOnModelCreating
yöntemle alanlar olarak işaretleyerek (Hala DDD hakkında en doğru yol olduğuna inanmıyorum artı bunun gelecekte yol açabilir maceralar tür neyi değerlendirmek zor - oldukça şüpheci )
Çatışmalar:
Agrega döndüren başka bir depo katmanı uygulamadan , yukarıda belirtilen tuzakları kısmen çözemeyiz
fazladan bir depo katmanı uygulayarak EF'in yerleşik özelliklerini görmezden geliyoruz (her
DbSet
biri zaten bir repo) ve uygulamayı aşırı derecede karmaşıklaştırıyoruz
Kanımca:
Lütfen cehaletimi affedin, ancak yukarıdaki bilgilere dayanarak - Varlık Çerçevesi Etki Alanına Dayalı Tasarım için yeterli değildir veya Etki Alanına Dayalı Tasarım kusurlu ve eski bir yaklaşımdır.
Her yaklaşımın avantajları olduğundan şüpheleniyorum, ancak şimdi tamamen kayboldum ve EF'yi DDD ile nasıl uzlaştıracağına dair en ufak bir fikrim yok.
Eğer yanılıyorsam - EFD ile DDD'ye nasıl gidilebileceğine dair herkes en azından basit bir talimat setini detaylandırabilir (hatta iyi kod örnekleri sağlayabilir), lütfen?