Geçenlerde DDD'yi kendim okudum. Bu bölüme geldiğimde, Evans'ın yaptığı aynı 4 katlı mimariyi keşfettim. @ Lonelybug'un işaret ettiği gibi, alan katmanı sistemin geri kalanından tamamen izole edilmelidir. Ancak, bir şeyin UI'ye özgü değerleri (sorgu dizeleri, POST verileri, oturum vb.) Etki alanı nesnelerine dönüştürmesi gerekir. Uygulama katmanı devreye giriyor. Görevi, kullanıcı arabirimini, veri katmanını ve etki alanını ileri geri çevirmek, etki alanını sistemin geri kalanından etkin şekilde gizlemektir.
Hemen hemen tüm mantığın denetleyicilerde olduğu bir çok ASP.NET MVC uygulaması görüyorum. Bu, klasik 3 katmanlı mimariyi uygulamak için başarısız bir girişimdir. Kontrolörlerin ünite testi yapmaları zordur, çünkü kullanıcı arayüzüne özgü çok fazla endişeleri vardır. Aslında, bir denetleyiciyi "Http Bağlamı" değerleri ile doğrudan ilgilenmeyecek şekilde yazmak, kendi başına ciddi bir sorundur. İdeal olarak kontrolör sadece çeviri yapmalı, işi koordine etmeli ve cevabı geri vermelidir.
Uygulama katmanında temel doğrulama yapmak bile mantıklı gelebilir. Etki alanının kendisine giren değerleri kabul etmesi tamamdır (bu, bu müşteri için geçerli bir kimliktir ve bu dize bir tarih / saati temsil ediyor mu). Ancak, iş mantığını içeren doğrulama (geçmişte bir uçak bileti alabilir miyim?) Etki alanı katmanı için ayrılmalıdır.
Martin Fowler aslında çoğu etki alanı katmanının bugünlerde ne kadar düz olduğu konusunda yorum yapıyor . Çoğu kişi bir uygulama katmanının ne olduğunu bile bilmese de, birçok insanın farklı alan nesnelerinin çalışmasını koordine eden oldukça aptal alan nesneleri ve karmaşık uygulama katmanları yaptığını bulur. Bundan kendimi suçluyorum. Önemli olan bir katman oluşturmak değildir, çünkü bazı kitaplar size söylemiştir. Fikir, sorumlulukları tanımlamak ve bu sorumluluklara dayanarak kodunuzu ayırmaktır. Benim durumumda, "uygulama katmanı" tür bir ünite testini arttırdıkça doğal olarak gelişti.