关于Repository模式

简介: 本文转载:http://www.cnblogs.com/dudu/archive/2011/05/25/repository_pattern.html 定义(来自Martin Fowler的《企业应用架构模式》): Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间。

本文转载:http://www.cnblogs.com/dudu/archive/2011/05/25/repository_pattern.html

定义(来自Martin Fowler的《企业应用架构模式》):

Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.

个人理解: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能提供什么操 作为核心。

目录
相关文章
|
SQL 缓存 Java
殷浩详解DDD系列 第三讲 - Repository模式
# 第三讲 - Repository模式 **写在前面** 这篇文章和上一篇隔了比较久,一方面是工作比较忙,另一方面是在讲Repository之前其实应该先讲Entity(实体)、Aggregate Root(聚合根)、Bounded Context(限界上下文)等概念。但在实际写的过程中,发现单纯讲Entity相关的东西会比较抽象,很难落地。所以本文被推倒重来,从Repository
34515 8
|
2月前
|
存储 开发工具 git
remote repository
远程仓库(Remote Repository)是什么? 远程仓库是一个存储在网络上的代码库,它可以存储和管理大量的代码文件。开发者可以通过远程仓库来共享代码、协作开发并控制代码的版本。远程仓库中最常用的就是GitHub、GitLab和Bitbucket等代码托管平台。
102 1
Github - repository & project 区别?
Github - repository & project 区别?
185 0
Github - repository & project 区别?
|
SQL 存储 Java
利用 Repository 中的方法解决实际问题
基于Repository的一些基础函数来解决业务中的一些问题
|
存储 数据可视化 Java
Spring Cloud Config采用Git存储时两种常用的配置策略
Spring Cloud Config采用Git存储时两种常用的配置策略
119 0
|
SQL NoSQL Java
SAP UI5 Repository and MongoDB Repository
SAP UI5 Repository and MongoDB Repository
SAP UI5 Repository and MongoDB Repository
|
测试技术
SpringDataJPA之自定义Repository
有时候系统提供的接口中的方法并不足以满足我们的需求,这时我们就可以通过自定义Repository来扩展。
SpringDataJPA之自定义Repository