একটি নতুন অ্যাপ্লিকেশন ( উদাহরণস্বরূপ ) এর জেনেরিক রিপোজিটরিগুলি তৈরি করার সুবিধাগুলি সম্পর্কে কয়েকটি নিবন্ধের মাধ্যমে পড়ছিলাম । ধারণাটি দুর্দান্ত বলে মনে হচ্ছে কারণ এটি একবারে বিভিন্ন সত্তার ধরণের জন্য একসাথে বেশ কয়েকটি কাজ করতে আমাকে একই সংগ্রহস্থলটি ব্যবহার করতে দেয়:
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 ম্যাপিংয়ের প্রস্তাব দেয়। সত্তা ফ্রেমওয়ার্কের বাইরে অন্যান্য ডেটা অ্যাক্সেস প্রযুক্তিগুলিতে লিনকের ধীর গতিতে, ডিবি কনটেক্সটটির সাথে সরাসরি কাজ করার ফলে এতে কী লাভ হবে?
আমি সংগ্রহস্থলটির পেটাপোকো সংস্করণ লেখার চেষ্টা করেছি , তবে পেটাপোকো লিনক এক্সপ্রেশনগুলিকে সমর্থন করে না, যা জেনেরিক আইআরপোসিটরি ইন্টারফেস তৈরি করা বেশ অকেজো করে তোলে যতক্ষণ না আপনি কেবল বেসিক গেটএল, গেটবাইআইডি, অ্যাড, আপডেট, মুছুন এবং সংরক্ষণের জন্য ব্যবহার করেন পদ্ধতি এবং এটি একটি বেস বর্গ হিসাবে ব্যবহার। তারপরে আপনাকে "কই" ধারাটি যে হ'ল আমি পূর্বে একটি শিকারী হিসাবে পাস করতে পারতাম তা হ্যান্ডল করার জন্য আপনাকে বিশেষ পদ্ধতি সহ নির্দিষ্ট সংগ্রহস্থল তৈরি করতে হবে।
জেনেরিক রিপোজিটরি প্যাটার্নটি কী সত্তা ফ্রেমওয়ার্কের বাইরে কোনও কিছুর জন্য কার্যকর? যদি তা না হয় তবে কেন কেউ সরাসরি এন্টি ফ্রেমওয়ার্কের সাথে কাজ করার পরিবর্তে এটিকে ব্যবহার করবে?
আসল লিঙ্কটি আমার নমুনা কোডটিতে আমি যে প্যাটার্নটি ব্যবহার করছিলাম তা প্রতিফলিত করে না। এখানে একটি ( আপডেট লিঙ্ক )।