1) GetAll() जैसी विधि के लिए, क्या मैं एक IQueryable या IQueryable वापस कर सकता हूं? अगर मैं व्यूमोडेल लौटाता हूं, तो मैं GetAll() से कैसे सामना करूं जो हजारों रिकॉर्ड खींचता है?
IQueryable<Entity>
। भंडार दृश्य मॉडल से निपटता नहीं है। भंडार के बारे में सोचें जो एक अलग वर्ग पुस्तकालय में परिभाषित किया गया है जो आपके एएसपी.नेट एमवीसी अनुप्रयोग का संदर्भ नहीं देता है, जहां आपका दृश्य मॉडल रहता है। यह एएसपी.नेट एमवीसी एप्लीकेशन है जो इस पुस्तकालय का संदर्भ देता है।
2) क्या मैं अपने कस्टम व्यू मॉडेल क्लास के लिए एक कन्स्ट्रक्टर बनाता हूं जो मैपिंग करने के लिए इकाई को पैरामीटर के रूप में लेता है?
नहीं। आपके विचार मॉडल में कंस्ट्रक्टर्स खासकर यदि आप के लिए अपने नियंत्रक कार्यों चाहते हैं न बनाएं (मैं अभी भी automapper के साथ अपरिचित तो बस कैसे देखने के एक डिजाइन बिंदु से यह करने के लिए पर एक समझ की जरूरत है हूँ) उन दृश्य मॉडल को एक्शन पैरामीटर के रूप में लें (पोस्ट कार्रवाई के बारे में सोचें)। इसका कारण यह है कि डिफ़ॉल्ट मॉडल बाइंडर अब आपके व्यू मॉडल को तुरंत चालू करने के बारे में नहीं जानता है और आपको कस्टम मॉडल बाइंडर्स लिखना होगा।
तो ऑटोमैपर या मैन्युअल रूप से मानचित्र करें।
मैनुअल मानचित्रण के साथ उदाहरण है जो क्या आप के साथ शुरू कर सकते हैं:
public ActionResult SomeAction()
{
IEnumerable<Entity> entities = Repository.GetAll();
IEnumerable<MyViewModel> model = entities.Select(x => new MyViewModel
{
Prop1 = x.Prop1,
Prop2 = x.Prop2,
...
});
return View(model);
}
और जैसे ही आप AutoMapper के लिए इस कोड चाल को लिखा बीमार:
public ActionResult SomeAction()
{
IEnumerable<Entity> entities = Repository.GetAll();
IEnumerable<MyViewModel> model = Mapper.Map<IEnumerable<Entity>, IEnumerable<MyViewModel>>(entities);
return View(model);
}
या आप एक कस्टम कार्रवाई लिखने अगर फ़िल्टर जो दृश्य में पारित डोमेन मॉडल को खींचने के लिए OnActionExecuted ईवेंट का उपयोग करता है, इसे ऑटोमैपर का उपयोग करके दृश्य मॉडल पर मैप करें और दृश्य के लिए दृश्य मॉडल के साथ मॉडल को प्रतिस्थापित करें, आप दोहराए गए कोड को और सरल बना सकते हैं:
[AutoMap(typeof(IEnumerable<Entity>), typeof(IEnumerable<MyViewModel>))]
public ActionResult SomeAction()
{
IEnumerable<Entity> entities = Repository.GetAll();
return View(entities);
}
फिर, मेरी मुख्य चिंता (GetAll की तरह एक विधि) जो कई रिकॉर्ड खींच होता है। अगर मैंने प्रत्येक इकाई को में अनुवाद करने के लिए फ़ोरैच लूप किया है तो ViewModel बहुत अधिक ओवरहेड की तरह दिखता है।
इसके बारे में चिंतित न हों। अपने रिकॉर्ड खींचकर दृश्य मॉडल में लूपिंग और मैपिंग की तुलना में धीमी गति होगी।