क्या हम रिपॉजिटरी पैटर्न का सही उपयोग कर रहे हैं?


14

हम -repositoryडेटाबेस से डेटा प्राप्त करने के लिए प्रत्यय के साथ अलग-अलग वर्गों के एक समूह का उपयोग कर रहे हैं ; प्रत्येक तालिका की अपनी रिपॉजिटरी के लिए।

उदाहरण के लिए हमारे पास एक customerrepositoryवर्ग है जिसमें ग्राहकों को पुनः प्राप्त करने के लिए सभी तरह के तरीके हैं, और vacancyrepositoryजिसमें रिक्तियों को प्राप्त करने के लिए सभी तरह के तरीके हैं।

चीजों को करने के इस तरीके के बारे में मेरे दो सवाल हैं:

  1. कैसे डेटा प्राप्त करने के बारे में जो कई तालिकाओं को फैलाता है? उदाहरण के लिए मेरे पास एक स्क्रीन है जो उन सभी ग्राहकों को दिखाती है जिन्होंने अभी तक एक रिक्ति नहीं बनाई है। क्या इन customerrepositoryविधियों का उपयोग कर सकते हैं vacancyrespository, या दोनों रिपोजिटरी परिणाम लौटा सकते हैं और क्या पदानुक्रम में उच्च श्रेणी है (इसे नाम दें dataservice) जो दोनों रिपॉजिटरी से परिणाम प्राप्त करता है और उन्हें 1 परिणाम में संयोजित करता है?

  2. ऐसे रिपॉजिटरी हैंडल में कितना तर्क हो सकता है?
    मुझे लगता है कि केवल सक्रिय रिकॉर्ड को पुनः प्राप्त करने के लिए भंडार में 'जहां सक्रिय == सत्य' को लागू करना ठीक है, या यह भी कि साधारण तर्क को पदानुक्रम में उच्च वर्ग द्वारा नियंत्रित किया जाना चाहिए (चलो इसे नाम दें dataservice)?

अब मैं जिस उदाहरण में चल रहा था वह यह है:

हमारे पास एक प्रश्न सूची है, जिसमें एक या अधिक प्रश्न हैं।
प्रश्न का एक परिणाम हो सकता है, जो एक अलग तालिका में है।
इसलिए जब आप प्रश्न सूची के कुल परिणाम को प्राप्त करना चाहते हैं, तो आपको questionlistतालिका, प्रश्न तालिका और तालिका से डेटा गठबंधन करना होगा questionstatus

अभी हमारे पास इन तालिकाओं के लिए 3 अलग-अलग रिपॉजिटरी हैं।

अगर मैं पूछता questionlistrepositoryकि यह सूची संख्या 12 के लिए कुल परिणाम क्या है, तो इसे दो अन्य रिपॉजिटरी से डेटा प्राप्त करना होगा और इसलिए इसमें कुछ तर्क हैं, क्या इसकी अनुमति है?

या क्या कोई ऐसा है questionlistdataserviceजो जानता है कि किस रिपॉजिटरी का उपयोग करना है?

एक और बात: हमारी रिपॉजिटरी परिणाम दे सकती है IQueryableताकि एक कॉलिंग सेवा आसानी से परिणाम जोड़ सके, लेकिन कैसे जब यह मामला नहीं है, मुझे नहीं लगता कि सभी तीन तालिकाओं की सभी सामग्री को पुनः प्राप्त करना एक अच्छा विचार है। डेटाबेस।


1
आमतौर पर कई टेबल एक्सेस में, प्रमुख तालिका रिकॉर्ड की तालिका द्वारा निर्धारित की जाती है, जो क्वेरी लाने से पहले मौजूद होनी चाहिए। LEFT OUTER JOIN में, यह पहला टेबल होगा और RIGHT OUTER JOIN में, यह दूसरा होगा।
नील

जवाबों:


15

रिपॉजिटरी डोमेन ऑब्जेक्ट लौटाती है और इसे मैपिंग लेयर्स के ऊपर बनाया जाता है। एक बहुत ही सरल डोमेन के लिए डोमेन ऑब्जेक्ट्स और डेटाबेस टेबल बहुत अधिक हो सकते हैं।

यदि आपकी रिपॉजिटरी हमेशा आपके डेटा संरचना के सटीक प्रतिनिधित्व को वापस कर रही है तो यह वास्तव में टेबल डेटा गेटवे उर्फ डेटा एक्सेस ऑब्जेक्ट (डीएओ) हो सकता है।

उदाहरण: आपके डेटाबेस में व्यक्ति और पते के लिए टेबल हैं। आपके एप्लिकेशन डोमेन पते में इसका कोई अस्तित्व नहीं है, यह केवल व्यक्ति की संपत्ति है। इस मामले में आपके पास पर्सनप्रेटरी और एड्रेस रिपॉजिटरी नहीं होगी। आपके पास बस पर्सेंटोसेरी है। डोमेन से संबंधित नहीं होना चाहिए कि डोमेन डेटा कैसे बना रहता है। उन जिम्मेदारियों को भंडार के पीछे एक परत में रखा गया है।

आपके उदाहरण से ऐसा लगता है कि वास्तव में आपके पास डीएओ हैं और बस उन्हें रिपॉजिटरी नाम दिया है।


इसलिए रिपॉजिटरी बनाते समय, मेरे पास टेबल डेटा गेटवे भी एक स्तर गहरा हो सकता है, और हमारे रिपॉजिटरी वास्तव में TDG's हैं।
मिशेल

1
आप कर सकते हैं, लेकिन लागत और लाभों का वजन कर सकते हैं। कोड "लेयरिंग" के सिद्धांत द्वारा डीएओ और रिपोजिटरी को अलग रखने में कोई गड़बड़ नहीं है। इस मामले में सबसे अधिक पठनीय है। यदि आपके रिपॉजिटरी डीएओ में डेटा का पुनर्संयोजन करने की प्रवृत्ति रखते हैं, तो अलगाव और परिणामी अमूर्त परत उपयोगी हो सकती है।
मिहाई दानिला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.