关于MVC架构中的Repository模式

个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。Repository是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。

tabbycat的理解(来源):

1. Repository模式是架构模式,在设计架构时,才有参考价值;

2. Repository模式主要是封装数据查询和存储逻辑;

3. Repository模式实际用途:更换、升级ORM引擎,不影响业务逻辑;

4. Repository模式能提高测试效率,单元测试时,用Mock对象代替实际的数据库存取,可以成倍地提高测试用例运行速度。

评估:应用Repository模式所带来的好处,远高于实现这个模式所增加的代码。只要项目分层,都应当使用这个模式。

关于泛型Repository接口(来源):

仅使用泛型Repository接口并不太合适,因为Repository接口是提供给Domain层的操作契约,不同的entity对于Domain来说可能有不同的操作约束。因此Repository接口还是应该单独针对每个Eneity类来定义。

泛型的Repository<T>类仍然用来减少重复代码,只是不能被UserRepository类直接继承,因为这样Delete方法将侵入User类,所以改为在UserRepository中 组合一个Repository<T>,将开放给domain可见且又能使用泛型重用的功能委托给这个Repository<T>

Repository与Dal的区别(来源):

Repository是DDD(领域驱动)中的概念,强调Repository是受Domain驱动的,Repository中定义的功能要体现Domain的意图和约束,而Dal更纯粹的就是提供数据访问的功能,并不严格受限于Business层。

使用Repository,隐含着一种意图倾向,就是 Domain需要什么我才提供什么,不该提供的功能就不要提供,一切都是以Domain的需求为核心;而使用Dal,其意图倾向在于我Dal层能使用的数 据库访问操作提供给Business层,你Business要用哪个自己选。换一个Business也可以用我这个Dal,一切是以我Dal能提供什么操 作为核心。

为了构建更加适应未来变化以及更加易于测试的MVC应用程序,你应该考虑使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了所有的数据访问逻辑。

当你创建repository类时,你创建了一个接口,该接口代表着所有由repository类所使用的方法。在你的控制器中,你针对接口编写代码,而不是针对repository。通过这种方式,你以后可以使用不同的数据访问技术来实现repository。

转载于:https://www.cnblogs.com/frank0812/p/9834887.html

MVC架构中的Repository模式 个人理解相关推荐

  1. java repository模式_MVC架构中的Repository模式 个人理解

    个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问.Reposit ...

  2. [vue] 说说你对MVC、MVP、MVVM模式的理解

    [vue] 说说你对MVC.MVP.MVVM模式的理解 MVVM用视图模型代替了MVP中的展示器,视图模型和视图实现了双向绑定,当视图发生变化的时候视图模型也会发生改变,当视图模型变化的时候视图也随之 ...

  3. MVC架构和SSM框架的个人理解

    MVC架构和SSM框架的个人理解 前言 一.原生JavaWeb对应MVC架构 二.SSM框架对应MVC架构 第一块内容(MyBatis): 第二块内容(Spring): 第三块内容(SpringMVC ...

  4. MVC架构中,用户的请求简单梳理

    MVC架构中,用户的请求分为下面3个步骤: 终端用户发送请求,路由器将请求路由到合适的Controller,Controller是逻辑实体和行为action的集合. Controller将请求映射到特 ...

  5. JavaScript中发布/订阅模式的理解

    订阅发布模式的介绍 发布订阅模式,它定义了一种一对多的关系,可以使多个观察者对象对一个主题对象进行监听,当这个主题对象发生改变时,依赖的所有对象都会被通知到. 在生活中我们常常遇到这样一种情况,我们在 ...

  6. Android 架构之 MVC 架构模式

    前言 由于 MVP.MVVM.组件化架构的兴起,MVC 架构在 android 中的应用变得越来越少,但 MVC 是基础,理解好 MVC 才能更好的理解 MVP,MVVM,因为后两种都是基于 MVC ...

  7. JSP中应用MVC架构

    MVC模式,将应用程序分为3个部分 模型层--Model 视图层--View 控制层--Controller MVC是这三部分英文字母的缩写 在JSP开发中,也可以应用MVC 模型层 是应用程序的核心 ...

  8. 第2章[2.3] 基于Ext JS的MVC/MVVM架构的应用开发模式

    Ext JS 对MVC 和MVVM两种架构都支持.这两种架构都是根据逻辑划分程序的代码,两种各有优劣. MVC是什么? Model, View , Control的首字母. 在MVC架构中,大多数类都 ...

  9. Java MVC 架构初学者指南

    如果您与 Web 开发场景相关,那么您肯定会遇到数百次(甚至更多)首字母缩略词"MVC".MVC 是当今 Web 编程世界中谈论最多的设计模式之一,这是正确的.在本文中,我们将带您 ...

最新文章

  1. 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)
  2. 今天遇到一个很奇怪的问题,XP系统屏幕全部旋转90度
  3. Python生物信息学③提取差异基因
  4. 漫画:什么是 “抽象工厂模式” ?
  5. bt下载加速 BitTorrent trackers服务器列表
  6. 深度网络模型裁剪和发布正规化
  7. 异常解决(一)-- RuntimeError: expected device cpu but got device cuda:0
  8. spring bean配置_在运行时交换出Spring Bean配置
  9. bzoj1225 [HNOI2001] 求正整数 约数个数定理+对数
  10. __str__和__repr__
  11. 2015-11-23 12:50:55
  12. OAuth三方授权登录
  13. Unity 网格合并MeshBaker(一)
  14. 【车载】轮速-AK协议
  15. データファイルのアップロードとダウンロード
  16. SuperMap iDesktop Cross 8C(2017)产品介绍
  17. SSTV 建伍TK8185 连接电脑
  18. 致远OA表单自定义函数(计算N年后今天的日期 )
  19. Ripro子主题-站壳jizhi-chlid极致主题QIW源码市场
  20. 网优谷的Linux真的不一样

热门文章

  1. c swap方法在哪个库里面_swap
  2. django关闭浏览器,怎样清除 cookies 和 session
  3. (9) ab测试工具安装与使用
  4. (12) ejb学习: JPA的传播属性
  5. php免登录接口,PHPWind 8.0 论坛免登陆发布接口发布
  6. c语言选择排序_冒泡、插入、选择排序(C语言)
  7. /usr/lib/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
  8. 监听localStorage变化(同页面监听)
  9. java图像处理之查找表实现图像处理加速
  10. 个人成长:2021年7月记