java repository模式_MVC架构中的Repository模式 个人理解
个人理解: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模式 个人理解相关推荐
- MVC架构中的Repository模式 个人理解
关于MVC架构中的Repository模式 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提 ...
- 读书笔记《Java开发技术-在架构中体验设计模式和架构之美》
一.Java程序员的三层境界 第一层:豪情万丈,欲与天公试比高 java开发技术掌握,工具娴熟,可以按要求独立完成类.接口和算法的开发:能注重技巧:热衷于谈技术问题.修炼第一层境界还是比较辛苦的. 第 ...
- python编程模式_Python编程中的反模式
原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...
- ofb模式_密码学中的输出反馈模式(OFB)
ofb模式 This is an output feedback (OFB) mode is similar in structure to that of CFB in Cryptography. ...
- 设计模式(三)策略模式——在Spring中使用策略模式
前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...
- 如何开启电脑上帝模式_Windows 10中的“上帝模式”文件夹是什么,以及如何启用它?
如何开启电脑上帝模式 What if Windows let you quickly access administrative tools, backup and restore options a ...
- java web项目在tomcat中以调试模式运行
转载地址:https://blog.csdn.net/gk_12/article/details/79689702 自己测试环境是: JDK1.8 Eclipse4.5 tomcat 8.5 如果只是 ...
- 架构中的设计原则之单一职责原则 - 《java开发技术-在架构中体验设计模式和算法之美》...
2019独角兽企业重金招聘Python工程师标准>>> 单一职责模式: 单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成. ...
- monostate 状态_为什么Borg模式比Python中的Singleton模式更好
在python中,如果想要一个可以从任何地方访问的唯一"对象",只需创建一个Unique仅包含静态属性@staticmethods和@classmethods的类:您可以将其称为唯 ...
最新文章
- VBA实现两种方法生成任意概率分布的随机数
- Github 简明教程
- Android SQLite数据库增删改查操作
- 130 道 Kubernetes + Docker + DevOps 大厂面试题及知识点详解
- COALESCE()、isnull()、nullif()函数的用法
- IPRO_DOCXCC_FILLIN_SIMPLEVARS
- 实验 3 编程,编译,连接,跟踪
- c语言打砖块代码,打砖块游戏的源代码(请多指教)
- 【codevs1078】最小生成树
- go语言中输入的方式,获取用户的输入信息
- 【BZOJ2460】元素(线性基---(id,value)绑定,求id异或非0对应的最大value 和)
- 研磨设计模式--简单工厂
- web开发规范 - html书写规范
- 简述商业模式、商业模式画布与商业模式个人画布
- 六步学会github入门使用
- 铁路“探花儿”:每天徒步8公里 一个月穿坏一双鞋
- zeppelin--使用D-Tale,针对pandas结构化数据进行可视化探索
- shell中expr的使用介绍
- 相机去畸变软件OCamCalib的使用方法
- 外国语言学c刊集刊联系方式,CSSCI(2017-2018)收录集刊目录 (共189 种).PDF
热门文章
- 树莓派ubuntu20.10系统 出现 Failed to fetch问题总结
- 同一个服务器网站速度不同,为什么每个测速网站的测试结果都不同
- 如何打开远程办公桌面 三步轻松开启远程办公电脑
- Gstreamer播放教程2: Subtitle management (字幕管理)
- 【零基础强化学习】3个模块教你跑通基于DQN的FlappyBird
- 小红书种草推广,产品怎么在小红书推广
- 安卓手机抓https,vmos pro + charles实现
- POJ-3016 K-Monotonic
- MySQL数据表出现中文乱码
- FFmpeg 视频处理工具用法