我想要提高自己的设计模式技能,我很好奇这些模式之间有什么区别?它们似乎都是相同的东西 - 封装特定实体的数据库逻辑以使调用代码不了解底层持久性层。根据我的简要研究,它们通常都实现标准的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);
这似乎是数据映射器和存储库模式的相同原则; DAO模式(我认为与网关是同一件事?)也似乎鼓励使用特定于数据库的网关。
我有什么遗漏吗?拥有3-4种完全相同的方法似乎有点奇怪。