我正在努力提高我的设计模式技能,我很好奇这些模式之间有什么区别?它们看起来都是一样的——封装特定实体的数据库逻辑,因此调用代码不知道底层持久层。根据我的简短研究,它们通常都实现了您的标准 CRUD 方法并抽象出特定于数据库的细节。
除了命名约定(例如 CustomerMapper vs. CustomerDAO vs. CustomerGateway vs. 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
为所有方法实现特定数据库逻辑的类。有时我不会使用接口并将 CustomerGateway 上的所有方法都设为静态(我知道,我知道,这使得它的可测试性降低)所以我可以这样称呼它:
Customer cust = CustomerGateway.GetCustomerByID(42);
这似乎与 Data Mapper 和 Repository 模式的原则相同;DAO 模式(我认为这与网关相同?)似乎也鼓励特定于数据库的网关。
我错过了什么吗?有 3-4 种不同的方式来做同样的事情似乎有点奇怪。