मैं डेटा एक्सेस को इनकैप्सुलेट करने के लिए रिपॉजिटरी पैटर्न पसंद करता हूं । संक्षेप में, एक विशिष्ट वस्तु के लिए आवश्यक सभी डेटा को लोड करने के लिए रिपॉजिटरी जिम्मेदार है। कहो कि आपके पास एक कार वस्तु है, जैसे आपके उदाहरण में। लेकिन कार, मेक, मॉडल, ईयर, ओनर्स, फीचर्स (सीडी प्लेयर, 4wd आदि) के लिए सभी विशेषताओं को पूरे डेटाबेस में विभिन्न तालिकाओं में संग्रहीत किया जाता है। रिपॉजिटरी यह निर्धारित करती है कि डेटा को कैसे लोड किया जाए और कैसे बचाया जाए। यदि कई छोटे प्रश्नों की आवश्यकता होती है, तो ठीक है, लेकिन केवल रिपॉजिटरी पैटर्न को जानना आवश्यक है। रिपॉजिटरी को आमंत्रित करने वाली सर्विस लेयर को केवल यह पता होना चाहिए कि किस रिपॉजिटरी को इनवोक करना है।
फिर कार्य पैटर्न की इकाई के साथ जोड़ा जा सकता है । तो आपके उदाहरण में, सेवा की परत कहेगी कि उसे कार इकाई को लोड करने की आवश्यकता है, इसमें किसी प्रकार का विशिष्ट पहचानकर्ता है, और उस पहचानकर्ता को रिपॉजिटरी में भेज देता है। रिपॉजिटरी कार इकाई को वापस करती है। कुछ अन्य कोड कार इकाई में हेरफेर करते हैं और उस इकाई को भंडार में वापस भेजते हैं ताकि इसे बचाया जा सके।
यदि आप वास्तव में बाहर जाना चाहते हैं, तो रिपॉजिटरी लेयर केवल इंटरफ़ेस को उजागर करेगी, जैसे कि ICarRepository। रिपॉजिटरी में एक फैक्ट्री होगी जिसमें सर्विस लेयर का उपयोग ICarRepository इंटरफ़ेस प्राप्त करने के लिए होगा। सभी डेटाबेस एक्सेस को एक इंटरफ़ेस के पीछे छिपाया जाएगा, जो यूनिट परीक्षण को बहुत आसान बनाता है।