2009-04-12 17 views
12

मैं रिपोजिटरी पैटर्न में नया हूं और वेब पर बहुत सी पढ़ाई करने के बाद मुझे क्या हो रहा है इसके बारे में कोई समझ नहीं है, लेकिन विचारों का एक संघर्ष लगता है।रिपोजिटरी पैटर्न - पीओसीओ या IQueryable?

आईआरपॉजिटरी को वापस लौटना चाहिए।

मैं तो जैसे ही Pocos में निपटने के लिए तो मैं हर कुल जड़ के लिए एक IRepository कार्यान्वयन के लिए होता है, चाहते हैं:

public class OrangeRepository: IOrangeRepository 
{ 
    public Orange GetOrange(IOrangeCriteria criteria); 
} 

जहां IOrangeCriteria एक ऑरेंज पाने के लिए विशिष्ट तर्क के एक नंबर ले जाता है।

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

OrangeRepositoryOracle, OrangeRepositorySQL, OrangeRepositoryMock आदि

मैं इसे खुला रखने के लिए इतना है कि मैं एफई या NHibernate इस्तेमाल कर सकते हैं चाहते हैं - फिर यदि Pocos में मेरी IOrangeRepository सौदों तो मैं ऑरेंज रेपॉजिटरी एन हाइबरनेट इत्यादि को लागू करके, रिपोजिटरी के भीतर ही इसे समाहित करेगा

क्या मैं सही लाइनों पर हूं?

धन्यवाद

संपादित करें: धन्यवाद प्रतिक्रिया के लिए, मैं तो यह सराहना की इन विचारों को इस समय बंद बाउंस करने के लिए किसी और को नहीं है!

उत्तर

9

हां, आपका संस्करण सबसे सुरक्षित/सबसे संगत है। आप अभी भी किसी भी संसाधन के साथ इसका उपयोग कर सकते हैं, न केवल डेटा एक्सेस वाले, बल्कि वेब सेवाओं, फ़ाइलों, जो भी हो।

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

5

मैं आपके जैसा ही पैटर्न उपयोग करता हूं। मुझे बहुत पसंद है। आप किसी भी संसाधन से अपना डेटा प्राप्त कर सकते हैं।

लेकिन IQuerable का उपयोग करने का लाभ यह है कि आपको ऑरेंजक्रिटियारिया जैसे अपने मानदंड API को कोड करने की आवश्यकता नहीं है।

जब एनएचबेर्नेट को पूर्ण लिंक समर्थन मिलता है तो मैं IQueryable पर स्विच कर सकता हूं।

तो फिर तुम मिल

public class OrangeRepository: IOrangeRepository { 
    public IQueryable<Orange> GetOranges(); 
} 
संबंधित मुद्दे