关于Repository模式

简介: 原文:关于Repository模式定义(来自Martin Fowler的《企业应用架构模式》): Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间。
原文: 关于Repository模式

定义(来自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能提供什么操 作为核心。

相关英文文章:

  Using Repository and Unit of Work patterns with Entity Framework 4.0

  Implementing Repository Pattern With Entity Framework

  Using the Entity Framework Repository and UnitOfWork Pattern in C# ASP .NET

  Revisiting the Repository and Unit of Work Patterns with Entity Framework

  Do we need to use the Repository pattern when working in ASP.NET MVC with ORM solutions?

  We have IQueryable, so why bother with a repository

  Crazy Talk: Reducing ORM Friction  

推荐代码示例:

  Microsoft - Domain Oriented N-Layered .NET 4.0 App Sample (DDD Architecture)

相关博文:

  EntityFramework之领域驱动设计实践(七)-模型对象的生命周期 - 仓储

  EntityFramework之领域驱动设计实践(八)- 仓储的实现:基本篇

目录
相关文章
|
SQL 缓存 Java
殷浩详解DDD系列 第三讲 - Repository模式
# 第三讲 - Repository模式 **写在前面** 这篇文章和上一篇隔了比较久,一方面是工作比较忙,另一方面是在讲Repository之前其实应该先讲Entity(实体)、Aggregate Root(聚合根)、Bounded Context(限界上下文)等概念。但在实际写的过程中,发现单纯讲Entity相关的东西会比较抽象,很难落地。所以本文被推倒重来,从Repository
34537 8
|
2月前
|
存储 开发工具 git
remote repository
远程仓库(Remote Repository)是什么? 远程仓库是一个存储在网络上的代码库,它可以存储和管理大量的代码文件。开发者可以通过远程仓库来共享代码、协作开发并控制代码的版本。远程仓库中最常用的就是GitHub、GitLab和Bitbucket等代码托管平台。
102 1
|
10月前
|
Java Maven
Maven中Could not transfer artifact xxx from/to xxx问题(附镜像云配置)
Maven中Could not transfer artifact xxx from/to xxx问题(附镜像云配置)
322 0
|
IDE Java Maven
2020.3.4版本idea配置maven出现org.codehaus.plexus.component.repository.exception.ComponentLookupException信息
2020.3.4版本idea配置maven出现org.codehaus.plexus.component.repository.exception.ComponentLookupException信息
1033 0
Github - repository & project 区别?
Github - repository & project 区别?
186 0
Github - repository & project 区别?
|
SQL 存储 Java
利用 Repository 中的方法解决实际问题
基于Repository的一些基础函数来解决业务中的一些问题
|
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