एक नए ऐप ( उदाहरण ) के लिए जेनेरिक रिपॉजिटरी बनाने के फायदों पर कुछ लेखों के माध्यम से पढ़ रहा था । यह विचार अच्छा लगता है क्योंकि यह एक ही रिपॉजिटरी का उपयोग करने के लिए एक ही बार में कई अलग-अलग इकाई प्रकारों के लिए कई काम करता है:
IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor
var c1 = new Country() { Name = "United States", CountryCode = "US" };
var c2 = new Country() { Name = "Canada", CountryCode = "CA" };
var c3 = new Country() { Name = "Mexico", CountryCode = "MX" };
var p1 = new Province() { Country = c1, Name = "Alabama", Abbreviation = "AL" };
var p2 = new Province() { Country = c1, Name = "Alaska", Abbreviation = "AK" };
var p3 = new Province() { Country = c2, Name = "Alberta", Abbreviation = "AB" };
repo.Add<Country>(c1);
repo.Add<Country>(c2);
repo.Add<Country>(c3);
repo.Add<Province>(p1);
repo.Add<Province>(p2);
repo.Add<Province>(p3);
repo.Save();
हालांकि, रिपॉजिटरी के कार्यान्वयन के बाकी हिस्सों में लाइनक पर भारी निर्भरता है:
IQueryable<T> Query();
IList<T> Find(Expression<Func<T,bool>> predicate);
T Get(Expression<Func<T,bool>> predicate);
T First(Expression<Func<T,bool>> predicate);
//... and so on
इस रिपॉजिटरी पैटर्न ने एंटिटी फ्रेमवर्क के लिए शानदार काम किया, और बहुत ज्यादा DbContext / DbSet पर उपलब्ध तरीकों की 1 से 1 मैपिंग की पेशकश की। लेकिन एंटिटी फ्रेमवर्क के बाहर अन्य डेटा एक्सेस प्रौद्योगिकियों पर लाइनक की धीमी गति को देखते हुए, यह DbContext के साथ सीधे काम करने से क्या फायदा होता है?
मैंने रिपॉजिटरी के पेटाकोको संस्करण को लिखने का प्रयास किया , लेकिन पेटाकोको लाइनक एक्सप्रेशंस का समर्थन नहीं करता है, जो एक सामान्य IRepository इंटरफ़ेस को बहुत बेकार बनाता है जब तक कि आप इसे केवल मूल GetAll, GetById, Add, Update, Delete, और Save के लिए उपयोग न करें आधार वर्ग के रूप में विधियाँ और उसका उपयोग। फिर आपको सभी "जहां" खंडों को संभालने के लिए विशेष विधियों के साथ विशिष्ट रिपॉजिटरी तैयार करनी होगी जिन्हें मैं पहले एक विधेय के रूप में पारित कर सकता था।
क्या जेनेरिक रिपॉजिटरी पैटर्न एंटिटी फ्रेमवर्क के बाहर किसी भी चीज के लिए उपयोगी है? यदि नहीं, तो कोई व्यक्ति सीधे एंटिटी फ्रेमवर्क के साथ काम करने के बजाय इसका उपयोग क्यों करेगा?
मूल लिंक मेरे नमूना कोड में उपयोग किए जा रहे पैटर्न को प्रतिबिंबित नहीं करता है। यहाँ एक ( अद्यतन लिंक ) है।