【发布时间】:2010-10-22 17:30:38
【问题描述】:
我正在努力提高我的设计模式技能,我很好奇这些模式之间有什么区别?它们看起来都是一样的——封装特定实体的数据库逻辑,因此调用代码不知道底层持久层。根据我的简短研究,它们通常都实现了您的标准 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 模式(我认为这与网关相同?)似乎也鼓励特定于数据库的网关。
我错过了什么吗?有 3-4 种不同的方式来做同样的事情似乎有点奇怪。
【问题讨论】:
标签: c# repository dao datamapper table-data-gateway