如何设计库模式很容易切换到另一个ORM以后呢?(how to design Repository p

2019-08-17 03:44发布

我是新来存储库模式,但我想,我的目标是做一个设计,这将让我轻松地只是一些小的修改“依赖注入,或配置编辑”为能够切换到另一个ORM不接触其他的解决方案层。

我达到了这个实现:

这里是代码:

public interface IRepository<T>
{
    T Get(int key);
    IQueryable<T> GetAll();
    void Save(T entity);
    T Update(T entity);
    // Common data will be added here
}
public interface ICustomerRepository : IRepository<Customer> 
{
    // Specific operations for the customers repository
}
public class CustomerRepository : ICustomerRepository
{
    #region ICustomerRepository Members

    public IQueryable<Customer> GetAll()
    {
        DataClasses1DataContext context = new DataClasses1DataContext();
        return from customer in context.Customers select customer;
    }

    #endregion

    #region IRepository<Customer> Members

    public Customer Get(int key)
    {
        throw new NotImplementedException();
    }

    public void Save(Customer entity)
    {
        throw new NotImplementedException();
    }

    public Customer Update(Customer entity)
    {
        throw new NotImplementedException();
    }

    #endregion
}

使用在我的aspx页面:

protected void Page_Load(object sender, EventArgs e)
    {
        IRepository<Customer> repository = new CustomerRepository();
        var customers = repository.GetAll();

        this.GridView1.DataSource = customers;
        this.GridView1.DataBind();
    }

正如你在前面的代码中看到现在我使用LINQ to SQL语句,当你看到我的代码被绑定到LINQ到SQL,如何改变这种代码设计,实现我的目标“能够改变到另一个ORM伊斯利,例如到ADO.net实体框架,或亚音速”

请简单的示例代码忠告

Answer 1:

公司长城O”文本

你在做什么是正确的,你的代码将被应用到每个库。

如你陈述,Repository模式的目的是这样你就可以交换数据被传递到应用程序中的方式,而无需重构代码在应用程序中(UI /输送层)。

举个例子,你决定切换到LINQ到实体或ADO.NET。

所有你需要是为你写将使用(拥有它继承了适当的接口)的ORM的代码,然后让你的代码中使用该资源库。 当然,你需要替换旧库的所有引用或重命名/替换旧的ORM库,使您的应用程序使用正确的人(除非你使用某种类型的IoC容器中,在其中你会指定要通过哪个版本库) 。

你的应用程序的其余部分将继续,因为你用于获取/编辑您的数据将返回正确的对象的所有方法正常运行。

在外行人来看,库会给你的应用程序,它需要以同样的方式的数据。 唯一的区别是如何将数据从数据库中检索(ADO.NET/Linq的东西等)

而你的类继承的库接口是一个硬约束,确保它们输出一种统一的方式与您的应用程序使用它的方式一致的数据。



文章来源: how to design Repository pattern to be easy switch to another ORM later?