भंडार से डेटा (मामले के मामले में कस्टम केस) वापस करने का अनुशंसित तरीका क्या है जो किसी भी मॉडल इकाइयों में फिट नहीं होता है या जो कुछ बढ़ाता है?विज्ञापन डेटा और भंडार पैटर्न
101 उदाहरण सर्वव्यापी हैलो शब्द एप्लिकेशन: एक ब्लॉग सिस्टम होगा। मान लें कि आप उन पदों की एक सूची लोड करना चाहते हैं जहां पोस्ट एंट्री में कुछ अतिरिक्त जानकारी है जो पोस्ट इकाई में मौजूद नहीं है। मान लें कि यह टिप्पणियों की संख्या और अंतिम टिप्पणी की तिथि और समय है। यदि कोई सादे पुराने एसक्यूएल का उपयोग कर रहा था और डेटाबेस से सीधे डेटा पढ़ रहा था तो यह बहुत छोटा होगा। अगर मैं प्रत्येक पोस्ट के लिए टिप्पणियों के पूरे संग्रह को लोड करने का जोखिम नहीं उठा सकता, तो मैं रिपोजिटरी पैटर्न का उपयोग करके इसे बेहतर तरीके से कैसे कर सकता हूं, और मैं इसे एक डेटाबेस हिट में करना चाहता हूं? क्या इस स्थिति के लिए कोई सामान्य रूप से इस्तेमाल किया पैटर्न है? अब कल्पना करें कि आपके पास मामूली जटिल वेब एप्लिकेशन है जहां प्रत्येक पृष्ठ को थोड़ा अलग कस्टम डेटा चाहिए, और पूर्ण पदानुक्रम लोड करना संभव नहीं है (प्रदर्शन, स्मृति आवश्यकताएं आदि)।
कुछ यादृच्छिक विचार:
प्रत्येक मॉडल है जो कस्टम डेटा की आबादी किया जा सकता है के लिए संपत्तियों की एक सूची जोड़ें।
सबक्लास मॉडल इकाइयों मामले के मामले में, और प्रत्येक उपclass के लिए कस्टम पाठक बनाते हैं।
LINQ का उपयोग करें, इस तरह के प्रश्न लिखें और अनाम कक्षाएं पढ़ें।
नोट: मैं एक similar question recently पूछा है, लेकिन यह बहुत सामान्य लग रहा था और बहुत ध्यान आकर्षित नहीं किया।
उदाहरण:
जवाब नीचे, मैं एक और अधिक ठोस उदाहरण द्वारा जोड़ा जा रहा में दिए गए सुझावों के आधार पर। यहाँ है स्थिति मैं वर्णन करने के लिए कोशिश कर रहा था:
IEnumarable<Post> posts = repository.GetPostsByPage(1);
foreach (Post post in posts)
{
// snip: push post title, content, etc. to view
// determine the post count and latest comment date
int commentCount = post.Comments.Count();
DateTime newestCommentDate = post.Comments.Max(c => c.Date);
// snip: push the count and date to view
}
मैं कुछ भी अतिरिक्त नहीं करते हैं और शेल्फ ORM बंद एक का उपयोग करें, यह n + 1 प्रश्नों का परिणाम या जाएगा संभवतः सभी पोस्ट और टिप्पणियों को एक क्वेरी लोड हो रहा है । लेकिन सबसे अच्छा, मैं सिर्फ एक एसक्यूएल निष्पादित करने में सक्षम होना चाहता हूं जो पोस्ट पोस्ट, बॉडी इत्यादि सहित प्रत्येक पोस्ट के लिए एक पंक्ति लौटाएगा और टिप्पणी गिनती और इसमें हाल ही की टिप्पणी की तारीख होगी। यह एसक्यूएल में छोटा है। समस्या यह है कि मेरा भंडार मॉडल में इस प्रकार के डेटा को पढ़ने और फिट करने में सक्षम नहीं होगा। अधिकतम तिथियां कहां और मायने रखती हैं?
मैं यह नहीं पूछ रहा हूं कि यह कैसे करें। आप इसे हमेशा कर सकते हैं किसी भी तरह: भंडार में अतिरिक्त विधियां जोड़ें, नई कक्षाएं, विशेष संस्थाएं, LINQ आदि का उपयोग करें, लेकिन मुझे लगता है कि मेरा प्रश्न निम्न है। रिपोजिटरी पैटर्न और उचित मॉडल संचालित विकास कैसे व्यापक रूप से स्वीकार किए जाते हैं, लेकिन फिर भी वे इस प्रतीत होता है कि यह बहुत आम और मूल मामला नहीं है।
मुझे इंगित करने के लिए धन्यवाद। मैंने एक सरल ठोस उदाहरण और अधिक स्पष्टीकरण जोड़ा है। –