DDD metodolojisini inceleyerek birkaç ay geçirdikten sonra, bu kavramları şirketimdeki gerçek ürünlere uygulamaya başladım. Aslında, gelecekteki gelişim için uygun ve sürdürülebilir bir mimari oluşturmakla görevlendirildim. N Katman Gelişiminde DDD Kavramları
Aşağıdaki teknolojilerin kullanımını yapmaya karar verdik: EF4'ü (gerçekten v2) BirlikBen en çok aydınlatıcı oldu elde ettik bilgi miktarı, ancak, en iyi birkaç soru ile kaldım uygulama:
Soru # 1:DTOs - En İyi Uygulamalar
alan adı nesneleri (POCO sınıfları) var. Bu sınıfları uygulamak için çeşitli yollar vardır.
- Geleneksel Yaklaşım: Kamu getters/çıkaranlar, Doğrulama, & uygun iş mantığı içeren POCO sınıflar oluşturun. Ayrıca DTO'lar oluşturun ve bunları yönetmek için haritalama tekniklerini kullanın. (Automapper)
- Geleneksel - DTO: Yukarıda belirtildiği gibi POCO sınıfları oluşturun, ancak POCO'larınızı aktarım nesneleri olarak kullanın. Bu benim anlayışım, iş objelerinin alandan asla ayrılmaması gerektiğidir.
- Hibrit: Yazarın kendi POCO nesnelerini ve DTO'larını oluşturduğu ilginç bir blog post tökezledim. Etki alanı nesnesinin içinde DTO'nun bir örneğini oluşturur. Bu, # 1'deki gibi mülklerinizi çoğaltmamanız için daha kolay bakım sağlar. böylece gibi:
public abstract class POCOBase<T> : ValidationBase, IPOCO where T : DTOBase, new() { public T Data { get; set; } public POCOBase() { Data = new T(); } public POCOBase(T dto) { Data = dto; } } public class SomePOCO : POCOBase { } public class SomeDTO : DTOBase { public String Name { get; set; } public String Description { get; set; } public Boolean IsEnabled { get; set; } } // EXAMPLES // POCOBase<SomeDTO> somePOCO = new SomePOCO(); // somePOCO.Data.Name = "blablabla"; // somePOCO.Validate(); // return somePOCO.Data;
Soru 2:hangi nesneler UI/Servis Katmanı tarafından iade edilmesi gerekir?
Bu, DTO'nun tamamıdır. Sadece çıplak özellikleri içeren çok basit, hafif bir nesne. Ayrıca, herhangi bir Doğrulama sonucu içermiyor. DTO'larım müşteriye geri serileştiriyorsam, müşterinin InvalidRules koleksiyonu gibi herhangi bir Doğrulama sonucuna ihtiyacı olduğu varsayılmalıdır. Örneğin, Amazon'un API'siyle çalıştığımı söyleyin. Kişisel mağazama bir kitap eklemek istiyorum. ISBN'sini göndermeden bir kitap eklemeyi denerseniz, hizmet, Doğrulama sonucu hatalarını içeren bir çeşit yanıt grubu getirebilir.
Bir şey mi eksik? DTO'ların hiçbir iş mantığı içermemesi gerektiği izlenimi altındaydım (en azından DDD'den "püristler"). Bana öyle geliyor ki, DTO'lar transfer nesneleri olarak yeterli bilgi sağlamıyor. Ya DTO ve Doğrulama sonuçlarını kapsülleyen yeni bir Response nesnesine ihtiyacım var.
Soru # 3:Ne kadar çok IoC var?
"değişir uygulamanın gelebilecek bölümlerini ve aynı kalmak bu ayrı:
Ben altın kuralı takip gerektiğini bana belli gibi görünüyor."Bana göre
bu IoC uygulanması açısından mantıklı. Bağımlılıkları, tüm bir IoC konteyner üzerinden iletişim benim Sunum, İş Mantık ve Veri Erişim katmanları azaltmak. Benim Uygulama katmanı ortak arayüzleri ve soyutlamalar içerir. Öyle görünüyor IoC'yi bundan çok daha fazla kullanmak için overkill'I Ben sahte test Havuzları yaratabildiğim gerçeği seviyorum - ve basitçe Unity'nin konfigürasyonunu değiştirerek, TDD'yi kullanabilirim.
Umarım bu soruları açıkça belirtmişimdir. Yardımınız için:
Gelecekte, lütfen her bir soruyu ayrı bir StackOverflow sorusu olarak belirtin ... –