আমি আমার নকশা নিদর্শন দক্ষতাগুলি ব্রাশ করার চেষ্টা করছি এবং আমি উত্সাহী এই প্যাটার্নগুলির মধ্যে পার্থক্যগুলি কী? তাদের সকলকেই মনে হয় তারা একই জিনিস - কোনও নির্দিষ্ট সত্তার জন্য ডাটাবেস যুক্তিকে সজ্জিত করে যাতে কলিং কোডটির অন্তর্নিহিত স্থায়িত্ব স্তরটির কোনও জ্ঞান থাকে না। আমার সংক্ষিপ্ত গবেষণা থেকে এগুলি সমস্তই আপনার মানক সিআরইউডি পদ্ধতিগুলি বাস্তবায়িত করে এবং ডাটাবেস-নির্দিষ্ট বিশদটি বিমূর্ত করে দেয়।
নামকরণের সম্মেলনগুলি (যেমন গ্রাহকম্যাপার বনাম গ্রাহকদাও বনাম গ্রাহকগেটওয়ে বনাম গ্রাহকরেপোসিটারি), কোনও পার্থক্য কী? যদি পার্থক্য থাকে, আপনি কখন অন্যের থেকে একটি বেছে নেবেন?
অতীতে আমি নিম্নলিখিতগুলির মতো কোড লিখতাম (সরল, প্রাকৃতিকভাবে - আমি সাধারণত পাবলিক বৈশিষ্ট্য ব্যবহার করব না):
public class Customer
{
public long ID;
public string FirstName;
public string LastName;
public string CompanyName;
}
public interface ICustomerGateway
{
IList<Customer> GetAll();
Customer GetCustomerByID(long id);
bool AddNewCustomer(Customer customer);
bool UpdateCustomer(Customer customer);
bool DeleteCustomer(long id);
}
এবং একটি CustomerGateway
ক্লাস রয়েছে যা সমস্ত পদ্ধতির জন্য নির্দিষ্ট ডাটাবেস যুক্তি প্রয়োগ করে। কখনও কখনও আমি কোনও ইন্টারফেস ব্যবহার না করে কাস্টমারগেটওয়ে স্ট্যাটিকের সমস্ত পদ্ধতি তৈরি করতাম না (আমি জানি, আমি জানি, এটি এটিকে কম পরীক্ষামূলক করে তোলে) তাই আমি এটিকে কল করতে পারি:
Customer cust = CustomerGateway.GetCustomerByID(42);
এটি ডেটা ম্যাপার এবং সংগ্রহস্থল নিদর্শনগুলির জন্য একই নীতি বলে মনে হয়; ডিএও প্যাটার্ন (যা গেটওয়ের মতো একই জিনিস, আমি মনে করি?) এছাড়াও ডেটাবেস-নির্দিষ্ট গেটওয়েগুলিকে উত্সাহিত করে।
আমি কিছু অনুপস্থিত করছি? একই সঠিক জিনিসটি করার 3-4 টি ভিন্ন উপায় থাকা খুব অদ্ভুত বলে মনে হয়।