ठीक है, आप स्प्रिंग डेटा फ्रेमवर्क में एक अच्छा उदाहरण देख सकते हैं जो रिपॉजिटरी की अवधारणा पर आधारित है।
वहां आपको रिपॉजिटरी दिखाई देगी जो केवल डेटा स्टोर से निपटती है, और इसमें शायद ही कोई व्यावसायिक तर्क हो (यह सेवा स्तर के लिए आरक्षित है)। इसलिए, उदाहरण के लिए, आप उनके डिजाइन पर एक नज़र डालते हैं, आप देखेंगे कि उनके पास एक CRUDRepository इंटरफ़ेस है जो संस्थाओं को बनाने, नष्ट करने और पुनर्प्राप्त करने के तरीकों को उजागर करता है (अन्य चीजों के बीच)। एक PagingAndSortingRepository भी है जो ठीक इसके लिए अतिरिक्त कार्यक्षमता जोड़ता है, परिणाम और छँटाई, आदि, आदि।
तो, यह ढांचा शायद एक अच्छा भंडार डिजाइन का अध्ययन करने के लिए एक अच्छी जगह है।
जहां तक मुझे पता है, स्प्रिंग डेटा फ्रेमवर्क द्वारा लागू की गई कई अवधारणाएँ, डोमेन-ड्रिवेन डिज़ाइन: सॉफ्टवेयर के दिल में टैकलिंग कॉम्प्लेक्सिटी नामक एक महान पुस्तक से आती हैं , पुस्तक में एक पूरा खंड है जो रिपॉजिटरी डिज़ाइन को समर्पित है।
आप इसकी प्रति प्राप्त करने पर विचार कर सकते हैं।
पुस्तक का एक छोटा सा अंश बताता है:
REPOSITORY पैटर्न उन समाधानों को एनकैप करने और हमारे मॉडल फ़ोकस को वापस लाने के लिए एक सरल वैचारिक ढांचा है।
एक REPOSITORY एक निश्चित प्रकार की सभी वस्तुओं का प्रतिनिधित्व वैचारिक सेट (आमतौर पर अनुकरण) के रूप में करता है। यह अधिक विस्तृत क्वेरी क्षमता को छोड़कर, संग्रह की तरह कार्य करता है। उपयुक्त प्रकार की वस्तुओं को जोड़ा और हटाया जाता है, और REPOSITORY के पीछे की मशीनरी उन्हें सम्मिलित करती है या डेटाबेस से हटा देती है। यह परिभाषा अंत के माध्यम से प्रारंभिक जीवन चक्र से AGGREGATES की जड़ों तक पहुंच प्रदान करने के लिए जिम्मेदारियों के एक सुसंगत सेट को इकट्ठा करती है।
ग्राहक क्वेरी विधियों का उपयोग करके REPOSITORY से वस्तुओं का अनुरोध करते हैं जो ग्राहक द्वारा निर्दिष्ट मानदंडों के आधार पर वस्तुओं का चयन करते हैं, आमतौर पर कुछ विशेषताओं का मूल्य। REPOSITORY डेटाबेस क्वेरी और मेटाडेटा मैपिंग की मशीनरी को एनकैप्सुलेट करते हुए अनुरोधित ऑब्जेक्ट को पुनः प्राप्त करता है। REPOSITORIES कई प्रकार के प्रश्नों को कार्यान्वित कर सकता है जो ग्राहक को जो भी मापदंड की आवश्यकता होती है उसके आधार पर वस्तुओं का चयन करते हैं। वे सारांश जानकारी भी वापस कर सकते हैं, जैसे कि कितने उदाहरण कुछ मानदंडों को पूरा करते हैं। वे सारांश गणना भी लौटा सकते हैं, जैसे कि कुछ संख्यात्मक विशेषता के सभी मिलान वस्तुओं पर कुल।
एक REPOSITORY क्लाइंट से एक बड़ा बोझ उठाता है, जो अब एक सरल, इरादा-खुलासा इंटरफ़ेस से बात कर सकता है, और पूछ सकता है कि उसे मॉडल के संदर्भ में क्या चाहिए। इन सभी का समर्थन करने के लिए बहुत सारे जटिल तकनीकी बुनियादी ढांचे की आवश्यकता होती है, लेकिन इंटरफ़ेस सरल और अवधारणात्मक रूप से डोमेन मॉडल से जुड़ा होता है।
इसलिए:
प्रत्येक प्रकार की वस्तु के लिए जिसे वैश्विक पहुंच की आवश्यकता है, एक ऐसी वस्तु बनाएं जो उस प्रकार की सभी वस्तुओं के इन-मेमोरी संग्रह का भ्रम प्रदान कर सके। एक प्रसिद्ध वैश्विक इंटरफ़ेस के माध्यम से पहुंच स्थापित करें।
वस्तुओं को जोड़ने और हटाने के लिए तरीके प्रदान करें, जो डेटा स्टोर में डेटा के वास्तविक सम्मिलन या निष्कासन को रोक देगा। ऐसी विधियाँ प्रदान करें जो कुछ मानदंडों के आधार पर वस्तुओं का चयन करती हैं और पूरी तरह से तात्कालिक वस्तुओं या वस्तुओं के संग्रह को लौटाती हैं, जिनके गुण मान मानदण्डों को पूरा करते हैं, जिससे वास्तविक भंडारण और क्वेरी तकनीक का विकास होता है। केवल उन मूल जड़ों के लिए रिपोर्ट प्रदान करें जिन्हें वास्तव में प्रत्यक्ष पहुंच की आवश्यकता है। ग्राहक को मॉडल पर ध्यान केंद्रित रखें, सभी ऑब्जेक्ट स्टोरेज को दर्शाते हुए और REPOSITORIES तक पहुंच प्रदान करें।