仓储(Repository)

内容来源于dudu的 关于Repository模式一文

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

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

最新文章

  1. ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
  2. mas_makeConstraints &amp;&amp; mas_remakeConstraints &amp;&amp; mas_updateConstraints 用法与注意事项
  3. 安装ionic出现node-sass无法下载的解决方法
  4. Redis主从自动failover
  5. Tips6:用[HideInInspector]在Inspector中隐藏变量
  6. 三分 --- CSU 1548: Design road
  7. 华为OJ平台——将真分数分解为埃及分数
  8. iOS 9 学习系列:UIStack View (转载)
  9. C# 操作 Word 修改word的高级属性中的自定义属性2
  10. cocod2d-x 之 CCTMXTiledMap &amp; CCTMXLayer
  11. this()基础用法
  12. 【P2303】Longge的问题
  13. JS字符串常用方法总结
  14. Leetcode480-Binary Tree Paths-Easy
  15. CASE函数
  16. __add__运行过程
  17. 山东第四届省赛C题: A^X mod P
  18. css关系选择符
  19. vue2.0 watch 详解
  20. python3.x中的33个保留字

热门文章

  1. PHP上传文件参考配置大文件上传
  2. python psutil简单示例
  3. windows类型
  4. Jmeter-接口功能测试
  5. Android 百度云推送
  6. java的并发和多线程
  7. hdu 5050 大数
  8. noah
  9. [HTML5]如何使用移动设备的方向定位器
  10. Oracle PLSQL读取(解析)Excel文档