मैं अपने डिजाइन पैटर्न कौशल पर ब्रश करने की कोशिश कर रहा हूं, और मैं उत्सुक हूं कि इन पैटर्न के बीच क्या अंतर हैं? उन सभी को ऐसा लगता है जैसे वे एक ही चीज हैं - एक विशिष्ट इकाई के लिए डेटाबेस तर्क को एन्क्रिप्ट करते हैं ताकि कॉलिंग कोड को अंतर्निहित दृढ़ता परत का कोई ज्ञान न हो। मेरे संक्षिप्त शोध से उनमें से सभी आमतौर पर आपके मानक सीआरयूडी तरीकों को लागू करते हैं और डेटाबेस-विशिष्ट विवरण को दूर करते हैं।
नामकरण सम्मेलनों के अलावा (जैसे CustomerMapper बनाम CustomerDAO बनाम CustomerGateway बनाम CustomerRepository), यदि कोई हो, तो क्या अंतर है? यदि कोई अंतर है, तो आप एक को दूसरे पर कब चुनेंगे?
अतीत में मैं निम्नलिखित के समान कोड लिखूंगा (स्वाभाविक रूप से, स्वाभाविक रूप से - मैं सामान्य रूप से सार्वजनिक संपत्तियों का उपयोग नहीं करूंगा):
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);
यह डेटा मैपर और रिपॉजिटरी पैटर्न के लिए समान सिद्धांत प्रतीत होता है; DAO पैटर्न (जो गेटवे के समान है, मुझे लगता है?) डेटाबेस-विशिष्ट गेटवे को प्रोत्साहित करने के लिए भी लगता है।
क्या मैं कुछ भूल रहा हूँ? एक ही सटीक काम करने के 3-4 अलग-अलग तरीके होना थोड़ा अजीब लगता है।