আমার কাছে, ওআরএম বা অন্যান্য ডিবি জেদী স্তরগুলির সাথে মিলিত সংগ্রহস্থলগুলির এই অসুবিধাগুলি রয়েছে:
- কাজের ইউনিট Coverেকে রাখা ইউওডাব্লুটিকে প্রোগ্রামার দ্বারা কোডিং করতে হয় এবং পটভূমিতে খুব কমই এক ধরণের যাদু হিসাবে প্রয়োগ করা যেতে পারে, যেখানে ব্যবহারকারী কেবল ইউওডাব্লু সীমানা সংজ্ঞায়িত না করে এবং সম্ভবত প্রতিশ্রুতি বিন্দু ব্যতীত প্রশ্ন এবং পরিবর্তন করে makes কখনও কখনও, প্রতিটি সংগ্রহস্থল অ্যাক্সেস পদ্ধতিতে ইউওডাব্লুটিকে মাইক্রো ইউওডাব্লুতে (যেমন এনএইচবারনেট সেশনগুলি) কমিয়ে এড়িয়ে যায়।
- আড়ালকরণ বা সবচেয়ে খারাপ ক্ষেত্রে, অধ্যবসায় অজ্ঞতা ধ্বংস: "লোড ()", "পান () (" সংরক্ষণ করুন) "বা" আপডেট () "এর মতো পদ্ধতিগুলি তাত্ক্ষণিক, একক অবজেক্টের ক্রিয়াকলাপের পরামর্শ দেয়, যেন পৃথক প্রেরণ এসকিউএল / ডিএমএল বা ফাইলগুলির সাথে কাজ করার মতো। প্রকৃতপক্ষে, উদাহরণস্বরূপ, এই বিভ্রান্তকারী নামগুলির সাথে এনএইচবারনেট পদ্ধতিগুলি সাধারণত স্বতন্ত্র অ্যাক্সেস করে না, তবে অলস লোড বা সন্নিবেশ / আপডেট ব্যাচের সন্ধান করে (দৃistence়তা অজ্ঞতা)। কখনও কখনও, প্রোগ্রামাররা অবাক করে যে কেন তারা তাত্ক্ষণিকভাবে ডিবি অপারেশনগুলি পাবে না এবং জোর করে জেদীভাবে অজ্ঞতা ছিন্ন করে, ফলে কর্মক্ষমতা হ্রাস করে এবং বাস্তবে সিস্টেমটিকে আরও খারাপ করার জন্য বড় প্রচেষ্টা চালায়।
- অনিয়ন্ত্রিত বৃদ্ধি। একটি সাধারণ সংগ্রহস্থল সুনির্দিষ্ট প্রয়োজনের জন্য আরও বেশি করে পদ্ধতি সংগ্রহ করতে পারে।
যেমন:
public interface ICarsRepository /* initial */
{
ICar CreateNewCar();
ICar LoadCar(int id); // bad, should be for multiple IDs.
void SaveCar(ICar carToSave); // bad, no individual saves, use UoW commit!
}
public interface ICarsRepository /* a few years later */
{
ICar CreateNewCar();
ICar LoadCar(int id);
IList<ICar> GetBlueCars();
IList<ICar> GetRedYellowGreenCars();
IList<ICar> GetCarsByColor(Color colorOfCars); // a bit better
IList<ICar> GetCarsByColor(IEnumerable<Color> colorsOfCars); // better!
IList<ICar> GetCarsWithPowerBetween(int hpFrom, int hpTo);
IList<ICar> GetCarsWithPowerKwBetween(int kwFrom, int kwTo);
IList<ICar> GetCarsBuiltBetween(int yearFrom, int yearTo);
IList<ICar> GetCarsBuiltBetween(DateTime from, DateTime to); // some also need month and day
IList<ICar> GetHybridCarsBuiltBetween(DateTime from, DateTime to);
IList<ICar> GetElectricCarsBuiltBetween(DateTime from, DateTime to);
IList<ICar> GetCarsFromManufacturer(IManufacturer carManufacturer);
bool HasCarMeanwhileBeenChangedBySomebodyElseInDb(ICar car); // persistence ignorance broken
void SaveCar(ICar carToSave);
}
৪. Godশ্বরের বিপদ আপত্তি: আপনার মডেল বা ডেটা অ্যাক্সেস লেয়ারের সমস্তটি কভার করে আপনি একটি godশ্বর শ্রেণি তৈরির জন্য প্রলুব্ধ হতে পারেন। সংগ্রহস্থল শ্রেণিতে কেবল গাড়ী পদ্ধতিই থাকবে না তবে সমস্ত সত্তার জন্য পদ্ধতি রয়েছে।
আমার মতে, অনেকগুলি একক উদ্দেশ্য পদ্ধতির বিশাল জগাখিচুড়ি এড়াতে কমপক্ষে কিছু প্রশ্নের সুযোগ দেওয়া ভাল। এটি লিনকিউ, একটি নিজস্ব ক্যোয়ারী ভাষা, বা এমনকি ওআরএম থেকে সরাসরি নেওয়া কিছু নয় (ঠিক আছে, ধরণের মিলনের সমস্যা ...)।