首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据映射器、表数据网关( Gateway )、数据访问对象(DAO)和存储库模式之间的区别是什么?

数据映射器、表数据网关( Gateway )、数据访问对象(DAO)和存储库模式之间的区别是什么?
EN

Stack Overflow用户
提问于 2009-04-29 23:25:29
回答 2查看 31.3K关注 0票数 139

我正在努力复习我的设计模式技能,我很好奇这些模式之间有什么不同?它们看起来都是一样的--封装特定实体的数据库逻辑,这样调用代码就不知道底层的持久层了。根据我的简短研究,它们都实现了标准的CRUD方法,并抽象出特定于数据库的细节。

除了命名约定(例如CustomerMapper与CustomerDAO、CustomerGateway与CustomerRepository),如果有区别的话,有什么区别?如果有区别,你什么时候会选择其中一个呢?

在过去,我会编写类似如下的代码(简化,自然-我通常不会使用公共属性):

代码语言:javascript
复制
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上的所有方法都是静态的(我知道,我知道,这会降低它的可测试性),所以我可以像这样调用它:

代码语言:javascript
复制
Customer cust = CustomerGateway.GetCustomerByID(42);

对于数据映射器和存储库模式,这似乎是相同的原则;DAO模式(我认为它与Gateway是同一件事?)似乎也鼓励使用特定于数据库的网关。

我是不是遗漏了什么?有3-4种不同的方式来做同样的事情,这似乎有点奇怪。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/804751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档