1 模式定义
1.1 模式名称
抽象文档
1.2 模式描述
- 文档存储技术是一种非结构化的数据组织存储技术,被广泛应用于分布式NoSQL数据库存储领域,主要采用Key-Value映射与列式存储的数据结构
- 抽象文档设计模式主要描述本地缓存的数据结构,支持与匹配任何数据对象的读写操作
- 抽象文档的数据对象,支持子数据对象的多层嵌套,即多层多子树的数据结构
2 使用场景
2.1 对象存储
在计算机软件系统中,抽象是一种常用的软件架构技术,例如任何数据类型都可以抽象成数据对象存储类型,对象存储技术主要应用于Key-Value映射式的非结构化数据存储系统,例如云计算中的分布式数据对象存储技术(OpenStack S3)。
2.2 文档存储
文档(document)格式是一个非结构化的文本格式,例如前后端数据传输交互的JSON协议类型、页面展示的HTML模板、普通文本的日志文件等等,这些格式是NoSQL存储系统中常用的非结构化的数据存储类型,其数据结构主要使用Key-Value映射与列式存储结构,在索引系统上主要使用搜索引擎的倒排索引技术实现快速的关键字检索,目前MongoDB与Elasticsearch是比较流行的NoSQL存储系统。
3 设计实现
3.1 设计描述
理论上,设计模式是从OOP(面向对象编程)、OOD(面向对象设计)中诞生而来,因此,任何设计模式都需要具备继承、封装、多态的基本特性,否则设计模式将失去原本的设计意义。设计模式的设计实现,与算法的设计实现基本一致,需要包括数据结构设计与算法处理设计两个部分,而设计模式更加注重的是设计的通用性与可扩展性,抽象文档设计模式的通用性与可扩展性表现为可匹配任何类型的数据对象。
3.2 模式分类
结构类型 & 行为类型
3.3 背景描述
本文主要是以一台电动汽车为模型,对其抽象得出电动汽车的软件对象模型,因此,一台电动汽车的属性主要包括类型、型号、价格、部件,用户可以根据业务需求继续增加其他属性,这些不同类型的属性类型不影响抽象文档的存取操作,也就是说,抽象文档是完全支持数据类型安全的,理论上,一切皆为对象,对象类型由业务确定,业务写入的类型与读出的类型必须保持一致。
3.4 对象设计
如下图所示,抽象文档设计模式涉及到的接口或者对象,以及UML类图:
UML类图说明如下所示:
Document |
接口类型,定义抽象文档的基本行为,基本行为包括根据Key-Value关系存取数据对象 |
AbstractDocument |
抽象类类型,定义数据对象的存储结构、实现抽象文档的基本行为 |
HasModel |
接口类型,扩展定义抽象文档,增加抽象文档的属性分类,标识为型号 |
HasPrice |
接口类型,扩展定义抽象文档,增加抽象文档的属性分类,标识为价格 |
HasType |
接口类型,扩展定义抽象文档,增加抽象文档的类型分类,标识为类型 |
HasParts |
接口类型,扩展定义抽象文档,增加抽象文档的属性分类,标识为部件 |
Part |
实现类类型,电动汽车的部件,部件包括嵌套的子属性 |
Car |
实现类类型,电动汽车的组合对象,继承抽象文档的基本行为与基本属性,由电动汽车的所有属性组成 |
3.5 流程设计
主流程步骤如下所示:
-
定义接口
-
实现抽象接口
-
定义扩展接口
-
定义属性
-
定义部件
-
实现电动汽车
4 代码实现
4.1 Document
4.2 AbstractDocument
4.3 HasModel
4.4 HasPrice
4.5 HasType
4.6 HasParts
4.7 Part
4.8 Car
5 模式验证
5.1 测试用例
6 扩展设计
无