用命令模式实现对象存储——对象与关系数据库

一、开发背景

面向对象方法在软件开发的分析、设计以及编码中作用越来越重要,它 在适应系统需求变化、提高软件可重用性和开发效率方面有着其它开发方法无法比拟的优点 。面向对象思想将应用域中的概念描述成对象,应用系统由一系列对象构成,对象之间可以 传递消息,系统的运作可说就是对象间的协同工作。有过开发经验人都知道,应用系统中有 些是对象是要持久存在的,需要将它们存入磁盘,以便在重启系统时能够调入系统。这些对 象在面向对象方法中主要指实体对象,为了一致,本文中以实体对象代表所有需要存储的对 象。

目前,对象存储方式有两种:一种是存入文件,另一种是存入数据库。将对象存 入文件中,容易实现,操作简便,有很多类库已实现了此功能,但是文件存储方式难以表示 对象之间的关系,性能上也有所不足,难以满足大型系统的要求。将对象存入数据库,理想 的选择是面向对象数据库,但面向对象数据库虽有所发展,仍不成熟,还不能满足需要。关 系型数据库系统经过多年的发展,技术已经相当成熟,应用十分广泛,大部分信息系统都以 其作为后台数据管理。如今成熟的数据库产品有很多,为了降低在数据库编程方面的难度, 各种数据库访问模型相继问世,如ADO、ODBC、BDE、ADO.Net和JDBC等,虽然如此,关系型数 据库并非为适应面向对象技术而存在和发展,面向对象语言和关系数据库之间不能实现直接 对象存取,需要经过转换,为了提高开发效率,降低应用系统与数据库之间的耦合度,在二 者之间开发对象存储模块十分必要。

二、实现策略

数据库特点。数据库由 数据表构成,在面向对象编程中,数据表一般代表实体对象,表中的字段代表实体对象的属 性。由于数据表一种特殊的数据结构,每个表的字段数、字段类型与长度和其他约束均不相 同,因此建立能统一表示各数据表结构的类是很难的。数据表虽在结构上有所不同,但各数 据表也有相同之处:它们都有一个名字,表上都有共同的操作,就是如查询、增加、删除、 修改等存取操作。

实体对象与数据表之间的映射。针对数据库结构的特点,我们为 所有实体对象建立一个抽象基类,类中有实体对象名,有数据库存取操作的接口,每个接口 以数据库连接对象为参数。实体对象可从抽象基类继承,增加相关属性和属性的赋值与读取 方法,实现从抽象基类中继承而来的数据库存取接口。数据库存取接口的实现策略是:读取 实体对象名作为数据表名,用数据访问模型建立记录集,用记录集中的字段值为实体对象的 属性赋值或将属性值存入数据表中。这样就为实体对象与数据表建立了对应关系。

命令模式。实体对象与数据表的建立对应关系后,不能孤立存在,不能由其自身创建和存储 ,必须采用某种机制将它们组织起来,向应用系统提供一致服务,与其他对象交互。借鉴设 计模式中的命令模式可以完成此项功能。命令模式结构如图1所示。

图1:命令 (Command)设计模式

⑴.命令模式解决方案描述。

命令抽象类说明所有具体 命令(ConcreteCommand)支持的接口,具体命令(ConcreteCommand)封装了接收者 (Receiver)使用的服务。客户创建具体命令(ConcreteCommand),并将这些具体命令 (ConcreteCommand)绑定在指定的接收者(Receiver)上,调用者(Invoker)实际执行一 条命令或取消一条命令的执行。

⑵.命令模式结论:

①命令对象和命令算法被 分离;

②调用者(Invoker)从指定的命令中分离出来并得到保护;

③具体 命令(ConcreteCommand)是对象,它们可以进行创建和存储;

④在无须修改代码的 前提下,新的具体命令(ConcreteCommand)可以被增加进来。

时间: 2024-11-03 22:17:16

用命令模式实现对象存储——对象与关系数据库的相关文章

当CDN遇上对象存储:完美!

 CDN技术在今天的网络环境下,已经是"无孔不入".不管是热火朝天的电子商务还是蓄势待发的VR技术,从遥远的大洋彼岸的无人驾驶到越来越广泛关注的无人机技术,得到国家大力支持互联网+政策到第四次技术革命前奏的云计算大数据存储,无不闪烁着CDN技术的身影及影响.已经有越来越少的IT工程师不知道CDN了. 那麽在CDN"大行其道"的今天.我们怎样利用好这门技术为我们服务.是我们这一批IT技术工作者的职责和任务.让它与越来越多的新的技术和产品相结合,更好的为我们这个时代服务

Ceph分布式存储学习指南1.7 Ceph对象存储

1.7 Ceph对象存储 对象存储是一种以对象形式而不是传统文件和块形式存储数据的方法.基于对象的存储已经引起了行业界的大量关注.为灵活地使用它们的巨量数据,这些组织正快速采用对象存储解决方案.Ceph是一个众所周知的真正的对象存储系统. Ceph是一个分布式对象存储系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口.RADOS网关利用librgw(RADOS网关库)和librados这些库,允许应用程序跟Ceph对象存储建立连接.Ce

iOS设计模式 - 命令模式

前言: 命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作.通过把请求封装成对象,客 户端可 以把它参数化并置入队列或日志中,也能够支持可撤销操作.命令对象将一个或多个动作绑定到特定的接收器.命令模式消除了作为对象的动作和执行它的接收器之 间的绑定. 正文内容大纲: 1.电视机.遥控器与接收器之间的关系 2.改变一个视图的明暗程度(未使用命令模式) 3.命令模式介绍 4.改变一个视图的明暗程度(使用命令模式) 5.附录 1.电视机.遥

设计模式之命令模式

        在日常生活中,我们常常会遇到这样一些问题:需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活.        命令模式是非常实用的一个模式,比如最常用的就是我们编写项目中用到的撤销\恢复(Undo\Redo)就是通过命令模式(Command)来实现的;在如我们的计算器.小孩通过遥控器控制赛车运动,

Design Pattern - 命令模式

一般执行一个操作的过程, 创建对象, 并调用对象的函数, 函数执行, 返回 比如下面的类图, client直接调用Receiver.action 而命令模式, 抽象出command对象, 并在command对象封装对Receiver.action的调用 而client只负责创建command对象(invocation), 并提交给Invoker(通过setCommand), 而command真正的执行(execution)由Invoker控制 从而实现invocation和invoker的分离和

设计模式 ( 十三 ) 命令模式Command(对象行为型)

设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述         在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活.  例子1:电视机遥控器 : 遥控器是请求的发送者,电视机是请求的接收者,遥控器上有一些按钮如开,关,换频道等按钮就是具体命令,不同的按钮对应电视机的不

C++永久对象存储 (Persistent Object Storage for C++)

c++|object|对象      C++永久对象存储 (Persistent Object Storage for C++)简介 描述对象类型 从存储器中分配和释放对象 永久对象协议 存储器构造函数 打开存储器 POST++ 的安装 POST++ 类库 和 POST++一起使用 STL 类 替换标准分配子 如何使用 POST++ S调试 POST++ 应用的细节 关于 POST++ 更多的一些信息 简介POST++ 提供了对应用对象的简单有效的存储. POST++ 基于内存文件镜像机制和页面

C++永久对象存储

C++永久对象存储 (Persistent Object Storage for C++) 简介 描述对象类型 从存储器中分配和释放对象 永久对象协议 存储器构造函数 打开存储器 POST++ 的安装 POST++ 类库 和 POST++一起使用 STL 类 替换标准分配子 如何使用 POST++ S调试 POST++ 应用的细节 关于 POST++ 更多的一些信息 简介 POST++ 提供了对应用对象的简单有效的存储. POST++ 基于内存文件镜像机制和页面镜像处理.POST++ 消除了对永

干到底--三种存储类型比较-文件、块、对象存储

http://limu713.blog.163.com/blog/static/15086904201222024847744/ http://www.dostor.com/article/2012-12-27/7887715.shtml   块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD.