购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5
资源库

在DDD中,资源库的作用就是为应用程序提供统一的数据访问入口。在讨论如何对资源库进行设计之前,我们先来了解一种非常重要的架构模式——资源库模式。

2.5.1 资源库模式

关于如何更好地设计资源库,业界也诞生了一些主流的设计方法。这些设计方法解决的核心问题有如下两个。

❑如何实现应用程序的内存数据和具体持久化数据之间的转换?

❑如何从应用程序中抽离出独立的数据持久化访问入口?

第一个问题的解决思路比较简单,一般做法是实现一个数据映射层。第二个问题是第一个问题的延伸,我们通过资源库来提供统一的数据访问入口。图2-24展示了资源库的基本结构,从中可以看出内存数据与持久化数据的映射关系,以及资源库与持久化媒介之间的交互过程。

图2-24 资源库的基本结构

在架构设计上,资源库是一种常见的架构模式,应用非常广泛,我们经常使用的Hibernate、MyBatis等各种ORM框架实际上都是这一架构模式的具体实现框架。而资源库作为对象的提供者,能够实现对象的持久化。持久化的媒介有很多,传统的关系型数据库、各种NoSQL以及代表持久化新方向的NewSQL等,都可以实现数据的CRUD操作。显然,针对这些不同的持久化媒介,具体的技术体系也是不一样的。

为了通过资源库来屏蔽数据访问的技术复杂性和差异性,我们需要设计资源库的具体表现形式。图2-25展示了其中的一种表现形式。

图2-25 资源库模式的表现形式

在图2-25中,客户端通过一定的查询条件来对资源库发起请求,然后资源库把数据访问的具体技术和实现策略封装起来。这样,开发人员通过资源库就可以实现对各种类型的数据访问操作,资源库为我们屏蔽了技术复杂性和差异性。

2.5.2 资源库的设计策略

在DDD中引入资源库模式的目的在于为客户端提供一个简单模型来获取持久化对象。作为一种持久化对象,资源库可以分成定义和实现两个部分。资源库的定义表现为一个抽象接口,而实现则依赖于具体的持久化媒介,如图2-26所示。

从架构分层而言,对现实事物(包括持久化在内)的抽象内容位于领域层,而具体实现则可以位于基础设施层,所以在组件划分上,资源库的定义和实现分别位于领域层和基础设施层。关于这点,我们在2.6节中还会进一步讨论。

图2-26 资源库的定义和实现

日常开发所涉及的数据访问操作,其主要的应用场景是数据查询。因此,对查询类操作的支持程度也是衡量一个资源库实现方案的重要标准。通常,开发人员可以通过构建不同的规约化查询对象来对资源库发起请求。图2-27展示了这一应用场景下的类图结构。

图2-27 资源库和查询对象使用示例

在图2-27中,基于Account这个聚合对象,我们把这两个规约化查询对象命名为Account-SpecificationByUserName和AccountSpecificationByAgeRange。而Repository和Specification接口分别代表资源库和查询对象。

关于资源库设计还有一条基本原则,即每一个聚合类型对应一个资源库,因为对聚合的操作需要在一个事务中进行。 9xbxP0GWbAXeAAp+3Zd5lSoX6dcXoBLNqHgzktALzMijV1LcS1keZS+5J/MhXeD7

点击中间区域
呼出菜单
上一章
目录
下一章
×