2012-04-23 5 views
8

मेरे एएसपीनेट एमवीसी 3 एप्लिकेशन में, मैं रिपोजिटरी पैटर्न का उपयोग कर रहा हूं। मेरे पास 3 इकाइयां, कंपनी, देश, शहर है। उनमें से प्रत्येक का अपना भंडार है। कंपनी इकाई की स्थापना की गई है और स्थापित की गई विदेशी कुंजी। अब एक दृश्य में, मैं कंपनी के विवरण दिखाना चाहता हूं। इस विचार में मैं कंपनी के विवरण के साथ-साथ संस्थापक देश का नाम और संस्थापकसिटी नाम देखना चाहता हूं। मेरी राय में मुझे इसे एक तरह की जॉइन क्वेरी से संभालना है। लेकिन मैं भंडार पैटर्न में इसे कैसे प्राप्त करने के लिए अटक गया हूं। मैं इस जॉइन को रिपोजिटरी पैटर्न में कैसे संभाल सकता हूं?मैं रिपोजिटरी पैटर्न के साथ क्रॉस टेबल कैसे पूछ सकता हूं?

धन्यवाद।

उत्तर

4

भंडार में कार्य-आधारित इंटरफेस होना चाहिए। इसका मतलब है कि ओआरएम, जॉइन आदि भंडार के अंदर हैं। ऐप सिर्फ एक इंटरफ़ेस देखता है जो एक ऑब्जेक्ट देता है जिसका उपयोग वह कर सकता है।

इसका मतलब है कि आप एक टेबल के चारों ओर एक भंडार नहीं बनाते हैं (यह उद्देश्य को काफी हद तक हरा देता है)। आपके परिदृश्य में मेरा सुझाव है कि आपके पास (कम से कम) 2 रिपॉजिटरीज़ हों: कोई मॉडल को अपडेट करने से संबंधित सब कुछ संभाल लेगा और दूसरा केवल पढ़ता है (प्रश्न)।

इसका मतलब है कि क्वेरी रिपोजिटरी केवल आपके द्वारा इच्छित डेटा लौटाएगी (यह मूल रूप से मॉडल बिट्स को वापस लौटाती है)। बेशक, वास्तविक सारणी और जुड़ें भंडार का कार्यान्वयन विवरण हैं।

+0

"इसका मतलब है कि आप किसी तालिका के आस-पास एक संग्रह नहीं बनाते हैं (यह काफी उद्देश्य को हरा देता है)। " जहाँ तक मुझे पता है, मुझे प्रत्येक इकाई के लिए एक संग्रह बनाना है। आपकी टिप्पणी से, मुझे लगता है कि मुझे एक और भंडार जोड़ना है जो जटिल प्रश्नों को संभालेगा। सही? – SherleyDev

+0

नहीं :)। आपको प्रत्येक इकाई के लिए एक भंडार बनाने की आवश्यकता नहीं है। भंडार मूल रूप से शेष ऐप से संबंधित सब कुछ डेटाबेस छुपाता है। भंडार के अंदर आप संस्थाओं, ईएफ या निबर्ननेट का उपयोग कर सकते हैं, इससे कोई फर्क नहीं पड़ता। रिपोजिटोरू आंतरिक रूप से ओआरएम का उपयोग करता है, आपके मामले में इकाइयों और फिर ऑब्जेक्ट्स देता है जो ऐप समझता है। संस्थाएं खुद ही भंडार द्वारा उपयोग किए जाने वाले एक अमूर्त हैं। – MikeSW

+0

निम्नलिखित ट्यूटोरियल में यह कहता है "इस ट्यूटोरियल में आप प्रत्येक इकाई प्रकार के लिए एक रिपोजिटरी क्लास लागू करेंगे।" मैं इसका पीछा कर रहा था। http: //www.asp।नेट/एमवीसी/ट्यूटोरियल्स/हो-स्टार्ट-साथ-ef-use-mvc/कार्यान्वयन-द-रिपोजिटरी-एंड-यूनिट-ऑफ-वर्क-पैटर्न-इन-एएसपी-नेट-एमवीसी-एप्लिकेशन – SherleyDev

2

अपने रिपोजिटरी पैटर्न को ऐसे तरीके से न बनाएं जो जुड़ने से रोका जा सके! वर्तमान HTTP अनुरोध से जुड़े सभी उदाहरणों के लिए आमतौर पर एक ही ओआरएम संदर्भ (डेटाकॉन्टेक्स्ट/ऑब्जेक्ट कॉन्टेक्स्ट) का उपयोग करना है।

मुझे लगता है कि यह एक सामान्य आईआरपीोजिटरी रखने के लिए एक विरोधी पैटर्न है क्योंकि डेटाबेस पहुंच एक ही समय में एक ही प्रकार की इकाई के लिए शायद ही सीमित है।

आप डेटाकॉन्टेक्स्ट/ऑब्जेक्ट कॉन्टेक्स्ट को अपने आप से एक भंडार मान सकते हैं।

एक आखिरी सलाह: यदि आपको नहीं पता कि एक भंडार अमूर्तता क्या है - एक का उपयोग न करें।

+0

मैं एक बात से असहमत हूं: डेटा संदर्भ को भंडार के रूप में माना जाना चाहिए। जबकि डीसी डीबी एक्सेस और एसक्यूएल को सारणीबद्ध करता है, फिर भी यह एक rdbms और आईएमओ के साथ जुड़ा हुआ है, यह सबसे अच्छा एक लकीर अमूर्त है। – MikeSW

+0

यदि कोई ओआरएम एक रिसाव अमूर्त है, तो फिर एक कस्टम भंडार कितना कमजोर है? यह एक चलनी है। साथ ही यह आपको ओआरएम की पूर्ण शक्ति तक पहुंचने से रोकता है (जो एक अमूर्तता की प्रकृति है)। – usr

+0

एक उचित ढंग से डिज़ाइन किया गया भंडार रिसाव नहीं है क्योंकि यह ओआरएम जैसे कार्यान्वयन विवरण का खुलासा नहीं करता है। भंडार ओआरएम की पूरी शक्ति का उपयोग करता है, यह उसका काम है, यह ऐप के बारे में जानने या उपयोग करने के लिए बाकी ऐप का काम नहीं है। कृपया इस पोस्ट को देखें http://www.sapiensworks.com/blog/post/2012/04/15/The-Repository-Pterntern-Vs-ORM.aspx – MikeSW

संबंधित मुद्दे