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

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

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

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

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

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

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

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

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

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。

java repository模式_MVC架构中的Repository模式 个人理解相关推荐

  1. MVC架构中的Repository模式 个人理解

    关于MVC架构中的Repository模式 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提 ...

  2. 读书笔记《Java开发技术-在架构中体验设计模式和架构之美》

    一.Java程序员的三层境界 第一层:豪情万丈,欲与天公试比高 java开发技术掌握,工具娴熟,可以按要求独立完成类.接口和算法的开发:能注重技巧:热衷于谈技术问题.修炼第一层境界还是比较辛苦的. 第 ...

  3. python编程模式_Python编程中的反模式

    原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...

  4. ofb模式_密码学中的输出反馈模式(OFB)

    ofb模式 This is an output feedback (OFB) mode is similar in structure to that of CFB in Cryptography. ...

  5. 设计模式(三)策略模式——在Spring中使用策略模式

    前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...

  6. 如何开启电脑上帝模式_Windows 10中的“上帝模式”文件夹是什么,以及如何启用它?

    如何开启电脑上帝模式 What if Windows let you quickly access administrative tools, backup and restore options a ...

  7. java web项目在tomcat中以调试模式运行

    转载地址:https://blog.csdn.net/gk_12/article/details/79689702 自己测试环境是: JDK1.8 Eclipse4.5 tomcat 8.5 如果只是 ...

  8. 架构中的设计原则之单一职责原则 - 《java开发技术-在架构中体验设计模式和算法之美》...

    2019独角兽企业重金招聘Python工程师标准>>> 单一职责模式: 单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成. ...

  9. monostate 状态_为什么Borg模式比Python中的Singleton模式更好

    在python中,如果想要一个可以从任何地方访问的唯一"对象",只需创建一个Unique仅包含静态属性@staticmethods和@classmethods的类:您可以将其称为唯 ...

最新文章

  1. VBA实现两种方法生成任意概率分布的随机数
  2. Github 简明教程
  3. Android SQLite数据库增删改查操作
  4. 130 道 Kubernetes + Docker + DevOps 大厂面试题及知识点详解
  5. COALESCE()、isnull()、nullif()函数的用法
  6. IPRO_DOCXCC_FILLIN_SIMPLEVARS
  7. 实验 3 编程,编译,连接,跟踪
  8. c语言打砖块代码,打砖块游戏的源代码(请多指教)
  9. 【codevs1078】最小生成树
  10. go语言中输入的方式,获取用户的输入信息
  11. 【BZOJ2460】元素(线性基---(id,value)绑定,求id异或非0对应的最大value 和)
  12. 研磨设计模式--简单工厂
  13. web开发规范 - html书写规范
  14. 简述商业模式、商业模式画布与商业模式个人画布
  15. 六步学会github入门使用
  16. 铁路“探花儿”:每天徒步8公里 一个月穿坏一双鞋
  17. zeppelin--使用D-Tale,针对pandas结构化数据进行可视化探索
  18. shell中expr的使用介绍
  19. 相机去畸变软件OCamCalib的使用方法
  20. 外国语言学c刊集刊联系方式,CSSCI(2017-2018)收录集刊目录 (共189 种).PDF

热门文章

  1. 树莓派ubuntu20.10系统 出现 Failed to fetch问题总结
  2. 同一个服务器网站速度不同,为什么每个测速网站的测试结果都不同
  3. 如何打开远程办公桌面 三步轻松开启远程办公电脑
  4. Gstreamer播放教程2: Subtitle management (字幕管理)
  5. 【零基础强化学习】3个模块教你跑通基于DQN的FlappyBird
  6. 小红书种草推广,产品怎么在小红书推广
  7. 安卓手机抓https,vmos pro + charles实现
  8. POJ-3016 K-Monotonic
  9. MySQL数据表出现中文乱码
  10. FFmpeg 视频处理工具用法