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