कदम स्पष्टीकरण द्वारा रिपोजिटरी पैटर्न कदम [बंद]


276

क्या कोई कृपया मुझे .NET में रिपॉजिटरी पैटर्न की व्याख्या कर सकता है, एक बहुत ही सरल उदाहरण या डेमो देकर कदम से कदम।

मुझे पता है कि यह एक बहुत ही सामान्य प्रश्न है लेकिन अभी तक मुझे संतोषजनक उत्तर नहीं मिला है।



1
यहां एक अच्छा लेखन है: deviq.com/repository-pattern
ssmith

जवाबों:


199

सारांश के रूप में, मैं रिपॉजिटरी पैटर्न के व्यापक प्रभाव का वर्णन करूंगा। यह आपके सभी कोड को ऑब्जेक्ट्स का उपयोग किए बिना यह जानने की अनुमति देता है कि ऑब्जेक्ट्स कैसे बने हुए हैं। हठ के सभी ज्ञान, तालिकाओं से वस्तुओं तक मानचित्रण सहित, सुरक्षित रूप से भंडार में निहित हैं।

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

रिपॉजिटरी पैटर्न के साथ, आपको केवल एक ऑब्जेक्ट और एक रिपॉजिटरी को बदलना होगा। प्रभाव बहुत छोटा है।

शायद यह सोचने में मदद मिलेगी कि आप रिपॉजिटरी पैटर्न का उपयोग क्यों करेंगे। यहाँ कुछ कारण हैं:

  • आपके पास अपनी डेटा पहुंच में परिवर्तन करने के लिए एक ही स्थान है

  • आपके पास तालिकाओं के एक सेट के लिए एक ही स्थान है (आमतौर पर)

  • परीक्षण के लिए एक नकली कार्यान्वयन के साथ एक रिपॉजिटरी को बदलना आसान है - इसलिए आपको अपने यूनिट परीक्षणों के लिए डेटाबेस उपलब्ध होने की आवश्यकता नहीं है

अन्य लाभ भी हैं, उदाहरण के लिए, यदि आप MySQL का उपयोग कर रहे थे और SQL सर्वर पर स्विच करना चाहते थे - लेकिन मैंने वास्तव में इसे अभ्यास में कभी नहीं देखा है!


28
आरई dbms से b पर स्विच कर रहा हूँ, मैं रिकॉर्ड करूँगा कि न केवल मैंने इसे देखा है, मैंने इसे उत्पादन कोड में किया है। हम पहले ओरेकल का उपयोग कर रहे थे, होस्टिंग प्रदाता को स्विच करना था, एज़्योर पर बसे (इससे पहले कि वे ओरेकल का समर्थन करते हैं), इसलिए हमें एसक्यूएल एज़्योर में बदलना पड़ा। दुर्भाग्य से, हमने उस बिंदु पर सभी डेटा एक्सेस लॉजिक को अलग नहीं किया था, लेकिन हमने निश्चित रूप से ऐसा किया था जैसा कि हमने उस माइग्रेशन को किया था (और आगे जाकर, मुझे लगता है)।
जो

5
मुझे पता है कि यह टिप्पणी पुरानी और बंद विषय के रूप में बंद है, लेकिन मैंने इसे कई कंपनियों में देखा है। आमतौर पर, यह ORM से दूर या दूर जाने की एक प्रक्रिया का हिस्सा है। रिपॉजिटरी इसे बाहर स्विच करना आसान बनाता है, खासकर यदि आप उन्हें एक अमूर्त कारखाने पैटर्न से लोड करते हैं या एक आईओसी कंटेनर का उपयोग करते हैं।
डेरेक वान क्यूक

दरअसल रिपोजिटरी डेटा स्रोत से संबंधित कार्यों के लिए DAO का उपयोग करती है ...
Yousha Aleayoub

1
@YoushaAleayoub जो एक अच्छा बिंदु आप उठाते हैं। जब आप लोग "डेटाबेस को अलग करना" और रिपॉजिटरी को "लोग क्वेरी के लिए किसी एक चीज के लिए जिम्मेदार बनाने" का प्रयास कर रहे हों, तो आपको आमतौर पर डेटा एक्सेस ऑब्जेक्ट मिलेंगे। लगभग सभी मामलों में, आप दोनों को एक साथ पाएंगे। डीएओ हिस्सा है IConnection, ICommand, आदि बात यह है कि खाल डेटाबेस के प्रकार के। रिपॉजिटरी आमतौर पर अधिक डोमेन-केंद्रित है।
फेंटन

181

यह एक अच्छा उदाहरण है: C # में रिपोजिटरी पैटर्न उदाहरण

असल में, रिपॉजिटरी इस बात का ब्योरा छिपाती है कि डेटाबेस से / के लिए डेटा को वास्तव में कैसे लाया जा रहा है / कैसे जारी रखा जा रहा है। गुप्त रखना:

  • पढ़ने के लिए, यह क्वेरी को आपूर्ति किए गए मानदंडों को संतोषजनक बनाता है और परिणाम सेट देता है
  • लिखने के लिए, यह डेटा को बचाने के लिए अंतर्निहित दृढ़ता इंजन (जैसे एक SQL डेटाबेस) बनाने के लिए आवश्यक आदेश जारी करता है

13
यह उदाहरण अभी तक के MSDN प्रलेखन की तुलना में सबसे अच्छा विवरण है।
तेमन शिपाही

2
मुझे यह बहुत अच्छा लगा। यह कार्य की इकाई पर भी अच्छी व्याख्या प्रदान करता है, जो रिपॉजिटरी पैटर्न पर डेटा पैटर्न का अधिक सामान्य रूप प्रतीत होता है
Celdor

8
जुड़ा उदाहरण एक रिपॉजिटरी पैटर्न की विफलता है। यह एंटिटी फ्रेमवर्क ( IDbContext) या ISessionसीधे nberberate ( ) में दिए गए इंटरफेस का उपयोग करने की तुलना में बिल्कुल भी कोई लाभ नहीं देता है । एक सही ढंग से लागू किया गया रिपॉजिटरी एब्सट्रैक्ट दूर सभी दृढ़ता विशिष्ट जानकारी (जैसे कि वर्तमान लाइनक एसक्यूएल प्रदाता कैसे काम करता है)। यानी कभी उजागर नहीं IQueryable
jgauffin

3
@jgauffin IQueryableदृढ़ता विशिष्ट जानकारी नहीं है। IQueryable का समर्थन एक कठिन कोडित सरणी के रूप में सरल हो सकता है, या यह एक XML फ़ाइल, वेब सेवा, डेटाबेस, फ्लैट फ़ाइल आदि से हो सकता है, मैं एक रिपॉजिटरी की सिफारिश नहीं करूंगा जो IQueryable को हमेशा के लिए उजागर नहीं करता है हर मामले में धीमी गति से डेटा एक्सेस की ओर जाता है, जहां IQueryable को उजागर करना कुछ उदाहरणों को प्रदर्शन संवर्द्धन करने की अनुमति देगा जहां लागू होता है अगर दृढ़ता स्टोर में वह क्षमता है। इसके अतिरिक्त, DbContext को छुपाना आपको एक अलग ORM पर स्विच करने की अनुमति देता है अगर जरूरत हो (या ORM नहीं!)
रॉबर्ट McKee

5
यह दृढ़ता सूचना विशेष जानकारी लीक करता है। INविशिष्ट LinqToSql प्रदाता यह कैसे करता है यह जानने के बिना उत्सुक / आलसी लोडिंग या एक sql क्लॉज का उपयोग करने का प्रयास करें ।
जॉगफिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.