Saya mencoba memoles keterampilan pola desain saya, dan saya ingin tahu apa perbedaan antara pola-pola ini? Semuanya tampak seperti hal yang sama - merangkum logika basis data untuk entitas tertentu sehingga kode panggilan tidak memiliki pengetahuan tentang lapisan kegigihan yang mendasarinya. Dari penelitian singkat saya, mereka semua biasanya menerapkan metode CRUD standar Anda dan mengaburkan detail spesifik basis data.
Terlepas dari konvensi penamaan (mis. CustomerMapper vs CustomerDAO vs. CustomerGateway vs. CustomerRepository), apa bedanya, jika ada? Jika ada perbedaan, kapan Anda akan memilih yang satu dari yang lain?
Di masa lalu saya akan menulis kode yang mirip dengan yang berikut ini (disederhanakan, tentu saja - saya biasanya tidak menggunakan properti publik):
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);
}
dan memiliki CustomerGateway
kelas yang mengimplementasikan logika basis data khusus untuk semua metode. Kadang-kadang saya tidak akan menggunakan antarmuka dan membuat semua metode pada statis CustomerGateway (saya tahu, saya tahu, yang membuatnya kurang dapat diuji) sehingga saya dapat menyebutnya seperti:
Customer cust = CustomerGateway.GetCustomerByID(42);
Ini tampaknya menjadi prinsip yang sama untuk pola Mapper Data dan Repositori; pola DAO (yang merupakan hal yang sama dengan Gateway, saya kira?) juga tampaknya mendorong gateway khusus basis data.
Apakah saya melewatkan sesuatu? Agak aneh rasanya memiliki 3-4 cara berbeda dalam melakukan hal yang persis sama.