मैं ASP.NET MVC 4 का उपयोग करके एक 3-स्तरीय एप्लिकेशन को डिज़ाइन कर रहा हूं। मैंने एक संदर्भ के रूप में निम्नलिखित संसाधनों का उपयोग किया है।
मेरे पास अभी तक निम्नलिखित desingn है।
प्रस्तुति परत (पीएल) (मुख्य एमवीसी परियोजना, जहां एम के एमवीसी को डेटा एक्सेस लेयर में स्थानांतरित किया गया था):
MyProjectName.Main
Views/
Controllers/
...
व्यापार तर्क परत (BLL) :
MyProjectName.BLL
ViewModels/
ProjectServices/
...
डेटा एक्सेस लेयर (DAL) :
MyProjectName.DAL
Models/
Repositories.EF/
Repositories.Dapper/
...
अब, पीएल संदर्भ बीएलएल और बीएलएल संदर्भ डीएएल। इस तरह से निचली परत ऊपर वाले पर निर्भर नहीं करती है।
इस डिज़ाइन में PL, BLL की एक सेवा को आमंत्रित करता है। पीएल बीएलएल को एक व्यू मॉडल पास कर सकता है और बीएलएल पीएल को एक मॉडल वापस देख सकता है।
इसके अलावा, BLL DAL लेयर को आमंत्रित करता है और DAL लेयर एक मॉडल को BLL में वापस ला सकता है। बीएलएल बदले में एक मॉडल का निर्माण कर सकता है और इसे पीएल में लौटा सकता है।
अब तक यह पैटर्न मेरे लिए काम कर रहा था। हालाँकि, मैं एक समस्या में भाग गया हूँ जहाँ मेरे कुछ ViewModels को कई संस्थाओं पर जुड़ने की आवश्यकता होती है। सादे MVC दृष्टिकोण में, नियंत्रक में मैंने LINQ क्वेरी का उपयोग join
s और फिर करने के लिए किया select new MyViewModel(){ ... }
। लेकिन अब, DAL में मुझे उस जगह तक पहुँच नहीं है जहाँ ViewModels परिभाषित किया गया है (BLL में)।
इसका मतलब है कि मैं DAL में शामिल नहीं हो सकता और इसे BLL में वापस कर सकता हूं। ऐसा लगता है कि मुझे DAL (एक क्वेरी में जुड़ने के बजाय) में अलग-अलग क्वेश्चन करने होंगे और फिर BLL ViewModel के निर्माण के लिए इनका उपयोग करेगा। यह बहुत असुविधाजनक है, लेकिन मुझे नहीं लगता कि मुझे DAL को ViewModels से उजागर करना चाहिए।
किसी भी विचार मैं कैसे इस दुविधा को हल कर सकते हैं? धन्यवाद।