当前位置: 首页 > news >正文

Repository设计模式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

        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能提供什么操 作为核心。

转载于:https://my.oschina.net/u/3705875/blog/1799529

相关文章:

  • Launcher中Shortcut的创建流程简析
  • thymeltesys-基于Spring Boot Oauth2的扫码登录框架
  • windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
  • 如何格式化日期和时间
  • [R] data.frame() creates list?
  • 任意选若干个不相邻的数得到的和最大【dp】
  • C++ sort使用两个参数来排序
  • SmallSlider 图片轮播插件
  • 旅游网站CheapAir.com以BCH作为比特币支付
  • 二叉排序树
  • 【spring cloud】spring cloud子module的pom文件添加依赖,出现unknown问题【maven】
  • docker安装启动停止
  • firefox 不支持innertext, 需要用innerhtml代替
  • CPU占用过高问题排查
  • 《Linux学习并不难》文件/目录管理(7):rmdir命令删除空目录
  • SegmentFault for Android 3.0 发布
  • 【node学习】协程
  • Apache Spark Streaming 使用实例
  • css系列之关于字体的事
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • iOS编译提示和导航提示
  • js继承的实现方法
  • Just for fun——迅速写完快速排序
  • Median of Two Sorted Arrays
  • node入门
  • Python利用正则抓取网页内容保存到本地
  • Quartz初级教程
  • Redash本地开发环境搭建
  • Redis 懒删除(lazy free)简史
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 读懂package.json -- 依赖管理
  • 猴子数据域名防封接口降低小说被封的风险
  • 简单数学运算程序(不定期更新)
  • 码农张的Bug人生 - 见面之礼
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 实现菜单下拉伸展折叠效果demo
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习Vue.js的五个小例子
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 正则表达式-基础知识Review
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #14vue3生成表单并跳转到外部地址的方式
  • #FPGA(基础知识)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (js)循环条件满足时终止循环
  • (SpringBoot)第七章:SpringBoot日志文件
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (一)Linux+Windows下安装ffmpeg
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (轉)JSON.stringify 语法实例讲解
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net framework profiles /.net framework 配置
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题