Saya merancang aplikasi 3-tier menggunakan ASP.NET MVC 4. Saya menggunakan sumber daya berikut sebagai referensi.
Saya memiliki desingn berikut sejauh ini.
Presentation Layer (PL) (proyek MVC utama, di mana M dari MVC dipindahkan ke Data Access Layer):
MyProjectName.Main
Views/
Controllers/
...
Lapisan Logika Bisnis (BLL) :
MyProjectName.BLL
ViewModels/
ProjectServices/
...
Lapisan Akses Data (DAL) :
MyProjectName.DAL
Models/
Repositories.EF/
Repositories.Dapper/
...
Sekarang, referensi PL BLL dan referensi BLL DAL. Dengan cara ini lapisan bawah tidak tergantung pada yang di atasnya.
Dalam desain ini PL menggunakan layanan BLL. PL dapat meneruskan Model Tampilan ke BLL dan BLL dapat meneruskan Model Tampilan kembali ke PL.
Juga, BLL memanggil lapisan DAL dan lapisan DAL dapat mengembalikan Model kembali ke BLL. BLL pada gilirannya membangun Model Tampilan dan mengembalikannya ke PL.
Sampai sekarang pola ini bekerja untuk saya. Namun, saya mengalami masalah di mana beberapa ViewModels saya memerlukan penggabungan pada beberapa entitas. Dalam pendekatan MVC biasa, di controller saya menggunakan query LINQ untuk melakukan join
dan kemudian select new MyViewModel(){ ... }
. Tapi sekarang, di DAL saya tidak memiliki akses ke tempat ViewModels didefinisikan (di BLL).
Ini berarti saya tidak bisa bergabung dengan DAL dan mengembalikannya ke BLL. Tampaknya saya harus melakukan kueri terpisah di DAL (alih-alih bergabung dalam satu permintaan) dan BLL kemudian akan menggunakan hasil ini untuk membangun ViewModel. Ini sangat merepotkan, tapi saya tidak berpikir saya harus mengekspos DAL ke ViewModels.
Adakah ide bagaimana saya bisa menyelesaikan dilema ini? Terima kasih.