C#仓储模式简单介绍

weiyibo / 2023-08-16 / 原文

为什么使用仓储模式

仓储模式是面向接口开发,个人觉得仓储模式就是升级版的三层架构,里面多了接口之间的调用,就好像仓库管理员,只是负责把仓库里面的东西交给客户,也无需知道客户要做什么,反之客户也无需知道东西在哪里,怎么存放的,需要的时候就跟管理员索要就可以了,这样就是低耦合,就算管理员换人了,客户的流程也无需做出改变,反之亦然。

 

它的好处有:

1、我们可以在仓储层中的接口设置一些泛型约束并封装一些常用的方法这样可以提升我们的编码效率

如:

public interface IBaseRespority<T> where T : class //泛型约束
    {
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="t">要新增的信息</param>
        void AddEntiry(T t);
        /// <summary>
        /// 批量新增
        /// </summary>
        /// <param name="t">要新增的信息</param>
        void AddRange(List<T> t);
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="t">要更改的信息</param>
        void EditEntiry(T t);
        /// <summary>
        /// 批量修改
        /// </summary>
        /// <param name="t">要修改的信息</param>
        void EditRange(List<T> t);
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="t">要删除的信息</param>
        void DeleteEntiry(T t);
        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="t">要删除的信息</param>
        void DeleteRange(List<T> t);
        /// <summary>
        /// 获取对象
        /// </summary>
        /// <param name="id">要获取对象的编号</param>
        /// <returns>对象</returns>
        T GetTntiry(int id);
        /// <summary>
        /// 获取对象列表
        /// </summary>
        /// <returns>对象集合</returns>
        IQueryable<T> GetAll();
        /// <summary>
        /// 分页
        /// </summary>
        /// <param name="pageindex">页码</param>
        /// <param name="pagesize">页容量</param>
        /// <param name="where">条件查询</param>
        /// <param name="orderBy">条件排序</param>
        /// <param name="orderAsc">true 升序</param>
        /// <param name="totalcount">总条数</param>
        /// <returns>对象集合</returns>
        IQueryable<T> GetPage(int pageindex,int pagesize,Func<T,bool> where,Func<T,DateTime> orderBy,bool orderAsc,out int totalcount);

    }
示例

2、Respository的实现

3、只要编写完类似于这样的常用方法后,我们直接在业务层继承仓储接口然后掉方法后传参就可以实现对应的业务需求,这样我们只有在编写一些不常用的代码的时候才需要重新编写方法,这样可以有效的防止编写重复代码。

4、仓储(Respository)是存在于工作单元和数据库之间单独分离出来的一层,是对数据访问的封装。其优点:

    1)业务层不需要知道它的具体实现,达到了分离关注点。

    2)提高了对数据库访问的维护,对于仓储的改变并不会改变业务的逻辑,数据库可以用Sql Server(该系列博客使用)、MySql等。

5、仓储模式作为领域驱动设计(Domain-Driven Design,DDD)的一部分,在系统设计中的使用非常广泛。它主要用于解除业务逻辑层与数据访问层之间的耦合,使业务逻辑层在存储、访问数据库时无须关心数据的来源及存储方式,例如使用哪种类型的数据库(甚至可能是来自XML等格式),也无须关心对数据的操作,如数据库连接和命令等。