Büyük ölçekli bir uygulama tasarlıyorum, DDD tabanlı çok katmanlı mimari kullanıyoruz.
Veri katmanı (depoların uygulanması), etki alanı katmanı (alan modeli ve arayüzlerin tanımı - depolar, hizmetler, iş birimi), hizmet katmanı (hizmetlerin uygulanması) ile MVC'ye sahibiz. Şimdiye kadar, tüm katmanlarda etki alanı modelleri (çoğunlukla varlıklar) kullanıyoruz ve DTO'ları yalnızca görünüm modelleri olarak kullanıyoruz (denetleyicide, hizmet etki alanı model (ler) i ve denetleyici, görünüme geçirilen görünüm modeli oluşturur).
DTO'ları kullanma, kullanma, haritalama ve aktarma hakkında sayısız makale okudum. Kesin bir yanıt olmadığını anlıyorum, ancak etki alanı modellerini hizmetlerden denetleyicilere geri döndürüp döndürmediğinden emin değilim. Etki alanı modelini döndürürsem, denetleyici her zaman görünüme özgü görünüm modeli oluşturduğundan hala görünüme geçmez - bu durumda yasal görünüyor. Öte yandan, etki alanı modeli iş katmanından (hizmet katmanı) ayrıldığında doğru gelmiyor. Bazen hizmetin etki alanında tanımlanmayan veri nesnesini döndürmesi gerekir ve daha sonra eşlenmeyen etki alanına yeni nesne eklememiz veya POCO nesnesi oluşturmamız gerekir (bu, bazı hizmetler etki alanı modelleri döndürdüğü için çirkin olur. etkili bir şekilde DTO'lar döndürür).
Soru - kesinlikle görünüm modellerini kullanırsak, etki alanı modellerini denetleyicilere kadar döndürmek uygun mudur, yoksa hizmet katmanıyla iletişim için her zaman DTO'ları kullanmalı mıyız? Öyleyse, alan adı modellerini hangi hizmetlerin gereksinimine göre ayarlamak uygun mudur? (Açıkçası öyle düşünmüyorum, çünkü hizmetler hangi alanın sahip olduğunu tüketmelidir.) Eğer DTO'lara sıkı sıkıya bağlı kalsak, hizmet katmanında tanımlanmalı mıdır? (Sanırım.) Bazen DTO'ları kullanmamız gerektiği açıktır (örneğin, hizmet çok fazla iş mantığı gerçekleştirdiğinde ve yeni nesneler oluşturduğunda), bazen sadece etki alanı modellerini kullanmamız gerektiği açıktır (örneğin, Üyelik hizmeti anemik Kullanıcı ( s) - etki alanı modeliyle aynı olan DTO oluşturmak pek mantıklı görünmüyor) - ama tutarlılığı ve iyi uygulamaları tercih ediyorum.
Makale Domain vs DTO vs ViewModel - Nasıl ve Ne Zaman Kullanılır? (ve diğer bazı makaleler) sorunuma çok benziyor, ancak bu sorulara cevap vermiyor. Makale DTO'ları EF ile veri havuzunda mı uygulamalıyım? benzerdir, ancak DDD ile ilgilenmez.
Feragatname: Herhangi bir tasarım desenini sadece var olduğu ve süslü olduğu için kullanmayı düşünmüyorum, öte yandan, uygulamayı bir bütün olarak tasarlamaya yardımcı olduğu, ayrılmaya yardımcı olduğu için de iyi tasarım desenleri ve uygulamaları kullanmak istiyorum. Endişe, belirli bir desen kullanmak zor olsa da, en azından şu anda "gerekli" değildir.
Her zaman olduğu gibi teşekkür ederim.