ASP.NET MVC 4 kullanarak 3 katmanlı bir uygulama tasarlıyorum. Referans olarak aşağıdaki kaynakları kullandım.
Şimdiye kadar aşağıdaki tasarımlarım var.
Sunum Katmanı (PL) (ana MVC projesi, E ve MVC veri erişim katmanı taşındı):
MyProjectName.Main
Views/
Controllers/
...
İş Mantığı Katmanı (BLL) :
MyProjectName.BLL
ViewModels/
ProjectServices/
...
Veri Erişim Katmanı (DAL) :
MyProjectName.DAL
Models/
Repositories.EF/
Repositories.Dapper/
...
Şimdi PL, BLL ve BLL referanslarını DAL referanslarıdır. Bu şekilde alt tabaka üstündeki tabakaya bağlı değildir.
Bu tasarımda PL, BLL'nin bir hizmetini çağırır. PL bir View Modelini BLL'ye geçirebilir ve BLL bir View Modelini PL'ye geri iletebilir.
Ayrıca, BLL DAL katmanını çağırır ve DAL katmanı bir Modeli BLL'ye geri döndürebilir. BLL, bir Görünüm Modeli oluşturabilir ve PL'ye döndürebilir.
Şimdiye kadar bu model benim için çalışıyordu. Ancak, bazı ViewModels'ımın birkaç varlıkta birleşim gerektirdiği bir sorunla karşılaştım. Düz MVC yaklaşımında, kontrolör join
s ve sonra yapmak için bir LINQ sorgusu kullandım select new MyViewModel(){ ... }
. Ama şimdi, DAL'de ViewModels'ın tanımlandığı yere (BLL'de) erişimim yok.
Bu, DAL'de birleştirme yapıp BLL'ye geri döndüremeyeceğim anlamına gelir. DAL (bir sorguda birleşimler yerine) ayrı sorgular yapmak zorunda gibi görünüyor ve BLL sonra bir ViewModel oluşturmak için bunların sonucunu kullanır. Bu çok rahatsız edici, ama ben DAL ViewModels maruz olması gerektiğini sanmıyorum.
Bu ikilemi nasıl çözebileceğim hakkında bir fikrin var mı? Teşekkürler.