我正在努力复习我的设计模式技能,我很好奇这些模式之间有什么不同?它们看起来都是一样的--封装特定实体的数据库逻辑,这样调用代码就不知道底层的持久层了。根据我的简短研究,它们都实现了标准的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);
对于数据映射器和存储库模式,这似乎是相同的原则;DAO模式(我认为它与Gateway是同一件事?)似乎也鼓励使用特定于数据库的网关。
我是不是遗漏了什么?有3-4种不同的方式来做同样的事情,这似乎有点奇怪。
https://stackoverflow.com/questions/804751
复制相似问题