使用NHibernate 3.2实现Repository(ORuM)(六)架构模式Repository

Repository(仓储、资源库)一种架构模式。


《企业应用架构模式》(Martin Fowler):

  • Repository(资源库):通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调。
  • 具有复杂领域模型的系统常常收益于一个层,比如数据库映射器提供的层,它分离了领域对象和数据库访问代码的细节。在这种系统中,有必要在集中了查询构造代码的映射层之上建立一个抽象层。当存在大量的领域类或者繁重的查询时,这样做就显得更重要。在这些特定情况下,增加该层可以使重复的查询逻辑最小化。
  • 资源库协调领域与数据映射层,起到类似内存中领域对象集合的作用。客户对象以陈诉的方式构建查询说明,并把它们提交给资源库以获取满足条件的对象。可以向资源库中增加对象,也可以从资源库中删除对象,就像这些对象来自一个简单的对象集合,并且由资源库封装的映射代码将根据实际情形执行相应的操作。从概念上说,资源库封装了保存在数据存储中的对象集以及在这些对象上执行的操作,提供一个更加符合面向对象观点的持久层实现。资源库也支持在领域和数据映射层之间实现彻底分离和单向依赖关系的目标。

 

《领域驱动设计:软件核心复杂性应对之道》(Eric Evans):

  • Repository(仓储):一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合。
  • 为每种需要全局访问的对象类型创建一个对象,该对象为该类型所有对象在内存中的集合提供影像。用一个众所周知的全局访问接口来设立访问入口,提供增删对象的方法,把数据存储的实际的插入和删除封装起来。提供根据某种标准率选对象的方法,返回完整实例化了的属性值符合标准对象或对象的集合,把实际的存储和查询技术封装起来。仅为确实需要直接访问的聚合根提供仓储。让客户聚焦于模型,把所有对象存储和访问的工作委托给仓储来完成。
  • 仓储具有许多优点,包括它们为客户提供了一个简单的模型,来获取持久对象并管理其生命周期;它们把应用和领域设计从持久技术、多种数据库策略或甚至多种数据库来源解耦出来;它们传达了对象访问的设计决策;它们可以很容易被替换为哑实现,以便在测试中使用(通常使用一个内存中的集合)

 

posted @ 2011-10-15 19:06  GuYoung  阅读(562)  评论(0编辑  收藏  举报