首页 > 编程语言 >C#仓储模式简单介绍

C#仓储模式简单介绍

时间:2023-08-16 20:57:34浏览次数:37  
标签:C# void List 模式 int 仓储 数据库

为什么使用仓储模式

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

 

它的好处有:

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等格式),也无须关心对数据的操作,如数据库连接和命令等。

标签:C#,void,List,模式,int,仓储,数据库
From: https://www.cnblogs.com/weiyibo/p/17636140.html

相关文章

  • C# 的数据类型
    在C#中,变量主要分为三种类型:值类型,引用类型,指针类型1、值类型值类型变量可以直接分配给一个值,直接包含数据(如 int、char、float,它们分别存储数字、字符、浮点数)特点:当声明一个值类型时,系统分配内存来存储值C#中可用的值类型:Java中有8大基本类型,C#中都含有,就是bool与b......
  • 2023.3 Idea配置Tomcat环境
    tomcat配置下载tomcat先到官网(......
  • The 2022 ICPC Asia Regionals Online Contest (I) C L A
    The2022ICPCAsiaRegionalsOnlineContest(I)C统计度的大小,算贡献,特判\(n=1\)#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;typedeflonglongll;intn,d[N];vector<int>e[N];llres=0;voiddfs(intu,intfrom){ ......
  • python 运行 execjs 出现错误 UnicodeEncodeError: 'gbk' codec can't encode charac
    异常解读该异常的格式一般为:UnicodeEncodeError: 'gbk'codeccan'tencodecharacter'\xfe'inpositio该异常出现的场景为在Windows电脑下使用Pythonexecjs运行指定的JS文件,但JS文件中包含中文。异常解决方案该问题解决需要修改你电脑Python安装目录下 lib......
  • [usaco2018 jan] sprinklers
    题目农夫约翰有一块很大的田,他正在考虑种甜玉米。经过对他农田的调查,FJ发现它形成了一个(N-1)×(N-1)的正方形。西南角为坐标(0,0),东北角是(N-1,N-1)。在某些整数坐标的位置中有双头喷头,每一个都能够同时喷洒水和肥料。一个在(i,j)处的双头喷头会将水洒在农田中所有在其东面且在其北面的区......
  • Apache ECharts_入门
         ......
  • java垃圾回收(GC)
    java和c++最大的不同点之一即中无需程序员去关注程序的内存管理,因为jvm提供了垃圾回收机制来保证内存的管理和回收。 jvm如何确定回收对象引用计数法:该方法当前jvm并未采用,仅作简单介绍,类似于c++智能指针,提供对象的引用计数器判断对象是否活跃,但是无法解决两个对象循环引用问......
  • vscode git突然失效问题解决
    一:首先配置‘环境变量’打开电脑‘设置’----->关于--->高级系统设置---->环境变量------>用户和系统变量都设置一下,点击Path------->新建-------->将git-bash的应用程序地址粘贴到里面----->一直点击确定,直到退出(这里的应用程序地址看自己保存的bash.exe的位置)我的是:C:\Program......
  • 【Azure Service Fabric】关于Service Fabric的相关问题
    问题一:ServiceFabric是否支持PrivateLink?在AzurePrivateEndpoint文档中,罗列出了Azure上支持PrivateLink的服务。ServiceFabric不在其中。AzurePrivateLinkavailability:https://learn.microsoft.com/en-us/azure/private-link/availability 问题二:是否可以Dis......
  • Apache ECharts_介绍
         ......