在DDD设计中大家都会使用Repository pattern来获取domain model所需要的数据。

1.什么事Repository?

"A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. Client objects construct query specifications declaratively and submit them to Repository for satisfaction. Objects can be added to and removed from the Repository, as they can from a simple collection of objects, and the mapping code encapsulated by the Repository will carry out the appropriate operations behind the scenes. Conceptually, a Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer. Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers."

按照最初提出者的介绍,它是衔接数据映射层和域之间的一个纽带,作用相当于一个在内存中的域对象集合。客户端对象把查询的一些实体进行组合,并把它们提交给Repository。对象能够从Repository中移除或者添加,就好比这些对象在一个Collection对象上就行数据操作,同时映射层的代码会对应的从数据库中取出相应的数据。

从概念上讲,Repository是把一个数据存储区的数据给封装成对象的集合并提供了对这些集合的操作。。。。。。。

在领域驱动设计中,我们有个集合(aggregate)的概念,集合是:

"A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the Aggregate, designated as the root. A set of consistency rules applies within the Aggregate's boundaries.".

通常我们是对于domain的每个集合会对应的定义一个repository。也就说,并不是每个实体都会有对应的一个repository。

Repository的接口一般情况下是作为domain model的一部分,但是严格意义上讲它不属于domain model。

当我们处理aggregates时,大部分时间我们需要3个常用的相关操作。

1.通过Id得到对应的集合·。

2.向repository添加一个集合。

3.从repository中移除一个集合。

比如我们有个Order表,

那么它的Repository接口IRepository(包含三个基本的方法)如下:

假设我们还有另外一个domain model是Product,它的类如下:

它的Repository接口IProductRepository如下:

可以看出来我们的两个接口其实有很多代码是重复的,所以可以来个基本的接口IRepository,并结合System.Collection.Generic中的Generic属性来设计IRepository的代码:

对应的IProductRepository和IOrderRepository代码也得修改:

为了能够测试我们的Repository,我们这里创建一个Repository继承IProductRepository接口:

在构造函数中我们先添加product,然后再实现接口的几个方法。下面来进行单元测试:

运行后可以通过。。。

在NHibernate中使用Repository 模式。

Repository 设计模式介绍相关推荐

  1. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)

    单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...

  2. 23种设计模式介绍(一)---- 创建型模式

    由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模 ...

  3. 责任链设计模式介绍及实战

    责任链设计模式介绍及实战 1.责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和 ...

  4. 23种设计模式介绍以及在Java中的实现

    本文章出自:blog.csdn.net/anxpp/artic- 若要查看原文请点击 文章中的示例源码在github上:github.com/anxpp/JavaD- 由于CSDN上的下拉翻页比较麻烦 ...

  5. 23种设计模式介绍(Python示例讲解)

    文章目录 一.概述 二.设计模式七种原则 三.设计模式示例讲解 1)创建型模式 1.工厂模式(Factory Method) [1]简单工厂模式(不属于GOF设计模式之一) [2]工厂方法模式 2.抽 ...

  6. golang设计模式介绍(内含各个模式的java对比)代码解读

    golang设计模式介绍 设计模式是面向对象软件的经验,是通常设计问题的解决方案,每一种设计模式系统的命名,解释和评价了面向对象中一个重要的和重复出现的设计. 以下一一介绍这些设计模式 1.1工厂设计 ...

  7. JavaBean中DAO设计模式介绍

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是client,简单的来说就是浏览器. 2.显示层:JSP/ ...

  8. 语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍

    设计模式是什么 俗话说:站在别人的肩膀上,我们会看得更远.设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性,也更易于 ...

  9. Java设计模式介绍

    设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分. 1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式: ...

最新文章

  1. 大数据调度平台Airflow(八):Airflow分布式集群搭建及测试
  2. paramiko向服务器自动上传下载文件
  3. 项目要开始,应该提出什么样的要求?
  4. JavaScript错误:Maximum call stack size exceeded错误
  5. POJ3461 Oulipo ——KMP算法——Pku3461
  6. UIButton拖动响应事件,距离问题
  7. 学习笔记Hadoop(四)—— Hadoop集群的安装与部署(1)—— 虚拟机安装、java安装
  8. 业务安全通用解决方案——WAF数据风控
  9. 此表单只能填写一次_暴雪战网国服账号修改邮箱只能填写表单申请
  10. docker php安装gd扩展_给docker里的php安装gd扩展
  11. 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理
  12. android下载模块封装,AndroidStudio 3.0 NDK开发2-AAR模块封装
  13. 中jsp加载不出来layui_Maven+JSP+SSM+Mysql实现的学生选课系统
  14. 计算机音乐b型谱简单,尤克里里入门教程_尤克里里谱大全
  15. PayPal开发前台生成订单和后台生成订单
  16. C语言刷题6:给定b的值,输入a和m,求a*b和a^m的值
  17. 【CSS】水滴动画|水滴融合效果
  18. 威联通 nas mysql_威联通(NAS)应用篇:自建OwnCloud网盘(百度网盘,拜拜~~~)
  19. 路由交换接口类型详解——通俗易懂版
  20. 4p营销组合策略案例_营销组合策略的4P讲解

热门文章

  1. 2018深度学习引用数最高的十大论文
  2. 超市的100年发展史:好日子终结 亚马逊无人店是趋势
  3. SAP MM 盘点事务中的序列号
  4. 到2020年,智能手机将拥有十项AI功能,有些可能会出乎你意料
  5. latex中的引用命令\citep{}和\citet{}
  6. Application summary please elaborate on how you plan to use our API
  7. 脑神经计算建模揭示前额叶皮层不同类型中间神经元在信息维持中的作用
  8. 从指南针到北斗:中国导航系统促进世界互联互通
  9. 机器学习帮助人类找到最硬的过渡金属氮化物
  10. 人工智能的恶意用途:预测、预防和缓解