面向多数据源的终端软件中间件的设计 王超,纪阳** 作者简介:王超(1988-),男,硕士研究生,主要研究方向:移动互联网与物联网相关技术研究 通信联系人:纪阳(1972-),男,博士生导师,主要研究方向:宽带移动通信新技术研究、移动互联网业务与应用、泛在网技术、Livinglab创新模式. E-mail: ji.yang.0001@gmail.com (北京邮电大学移动生活与新媒体实验室,北京 100876) 5 摘要:随着科技的进步和智能终端的广泛应用,终端应用以及服务已经逐渐成为人们生活的一部分,这不仅使得终端软件数量迅速地增加,同时也给开发者带来了新的挑战。与普通软件不同,终端软件面临着多种数据源,而不同数据源的差别给开发带来了很大的难度。本文设计了一种终端侧的软件中间件,旨在解决多数据源带来的各种问题。本文设计的中间件可以屏蔽底层数据源的各种差异,同时也为上层提供了一种统一的操作。这不仅降低了终端侧10 应用的开发难度,同时也增加了软件的扩展性以及可维护性。同时此中间件还在统一数据访问方式的基础上提供了通用的缓存服务,使得其更适合终端软件环境,并在一些终端软件中得到了应用。 关键词:计算机软件;多数据源;终端;中间件 中图分类号:TP311.1 15 The Desgin and Development of The Terminal Middleware for Multiple Data Source WANG Chao, JI Yang (Mobile Life and New Media Laboratory, Beijing University of Posts and Telecommunications, 20 Beijing 100876) Abstract: With the development of the technology and the wide spread of intelligent mobile terminal, the terminal application is becoming one part of people's lives. Different with common software, the terminal software faces more data sources, and the differences of the data source makes the development more difficult. To address this issue, this paper provides a middleware for 25 multiple data sources. The middleware in the paper can not noly shield the differences of the data source in lower layer, but also provides a unfied access for upper layers. This can reduce the difficulty of the terminal software development, and with this middleware, the expansibility and maintainability of the software are also increased. This middleware also provides a common cache service based on the unified data access, and makes itself more suitable for terminal software 30 environment and has been applied in some terminal applicactions. Key words: computer software; multiple data source; terminal; middleware 0 引言 现代智能终端技术快速发展[1],随着iOS和Android等现代终端操作系统的出现,智能35 终端变得越来越强大。一方面,终端应用可以像普通应用一样对网络,数据库等资源进行操作;另一方面,由于终端本身具有的移动性等特点,其有可能面对自身的各种数据源,比如通过自带的API获取位置,温度等信息。由于移动终端应用比起普通应用有着更为复杂的业务场景和业务逻辑,其所涉及的数据源也更为广泛。各种不同数据源可能会带来一些问题。首先,数据源的数据获取方式和返回格式各不相同,因此具有相同业务性质的数据源间的服40 务迁移相对困难,大大降低了软件中组件的可替换性。另一方面,由于上述问题中数据源差异的存在,也不利于针对于数据的服务的统一构建(如缓存等)。 本文以中间件的形式为上述问题提供了一种中间件的解决方案。通过中间件,屏蔽了下 层数据源的差异,同时中间件为上层组件提供了一个统一的访问接口,实现了数据的操作的统一化和一致化。该设计具有良好的扩展性,不仅增强了数据源的可替换性,同时由于统一45 访问方式和接口的存在,使得基于此中间件了上层数据服务构建更加的容易和便捷。 1 问题分析 面向多数据源的中间件的目的在于屏蔽底层数据源的差异,并向上层组件提供统一的接口,因此,要达到此目的,有以下几个工作。 1) 底层数据源的适配 50 为完成设计,必须保证数据源能以某种方式接入中间件。中间件需要一种机制做到不同数据源的识别,并能正确地和数据源做到交互。 2) 数据资源化以及统一化的访问 资源是在概念上可以独立存在的实体。任何在语义上可以命名的信息都可以被称作资源。数据资源化的概念来自于REST[2],资源是在概念上可以独立存在的实体。任何在语义55 上可以命名的信息都可以被称作资源。资源对应着概念实体,而不是信息内容本身。在中间件中,底层适配模块要提供资源到具体数据的映射功能。同时中间件也会为上层提供统一的数据访问接口以访问不同资源,降低原始数据源访问方式差异所带来的耦合性。 3) 返回的数据格式的屏蔽 以Web数据为例,其数据返回格式可能为XML或JSON或者自定义格式。不同格式的60 数据造成了上层模块处理的差异化。中间件应当对此差异做屏蔽,并返回上层组件统一的数据实体。此工作使底层数据源与上层逻辑组件的耦合性进一步降低,并有利于软件不同部分的独立演化。 4) 其他数据处理服务 依赖于以上工作,可以在此基础上增加一些通用的数据处理服务。以缓存服务为例,依65 赖于中间件提供的统一接口,可以为所有中间件提供的数据设置缓存,并以统一的资源标识进行缓存存储。 2 终端软件中间件架构设计 中间件的位置在数据源之上,它屏蔽的底层数据源,并为上层提供统一的访问接口。另外它还为数据提供了一些通用的服务(如缓存等)。图1显示了中间件的总体架构。 70 中间件有以下几个重要组成部分: 1) DataMapper DataMapper提供了一种资源映射机制,它使用Key加上Parameters的形式唯一地确定了一种资源,并可以根据Key和Parameters的不同组合唯一确定一个次元。DataMapper可以派生出若干子模块,如RestMapper,FileMapper等。每个派生模块确定了具体的资源映射75 规则,并负责映射一类资源。 例如RestMapper负责映射网络Rest接口资源,FileMapper负责映射本地文件资源,而LocalDataMapper 则负责映射本地的数据资源如传感器数据等。由DataMapper处理后的数据统一了数据的获取方式,并为之后的数据处理做准备。 2) DataManager DataManager会持有若干DataMapper用来与下层数据交互,在上层它为其它组件提供80 了访问接口。DataManager可以被看做一个连接/管理层,不仅连接下层数据和上层的请求,还统一管理各种类型数据,并提供一些附加机制,如缓存,编解码机制等。 3) 解码器和编码器 当DataMapper获取数据之后,用户可以根据自己的需求设置解码器,DataManager会自动根据解码器将数据转换成需要的数据格式。同时当用户需要更新数据的时候,可以用编85 码器将传入的数据转换成数据对端可以接受的数据方式。一个DataMapper实例会对应一种编码器和解码器,DataManager会获取DataMapper的编码器或解码器进行编解码。 4) 缓存模块 缓存模块是DataManager内部用于存储数据缓存的模块,它依赖于中间件提供的统一的数据资源标识,并根据此做数据存储。缓存引擎具有两个子模块,分别是内存引擎和持久化90 引擎,分别对应内存的易失性存储和本地的持久性存储,外部模块可以根据需求灵活切换。 DataManagerDataMappersRestMapperFileMapperLocalDataMapper...内存引擎持久化引擎缓存模块内存持久化介质数据中间件DataManager解码器编码器使用中间件的模块... 图1中间件的整体架构 Fig. 1 The architecture of the middleware 3 中间件的具体实现 95 3.1 DataMapper的设计以及统一化的数据访问 DataMapper是中间件中最核心的模块。DataMapper的主要工作是完成中间件对下层数据的适配,同时将下层资源化并提供一个统一的访问。DataMapper是一个抽象模块,它提供了最基本的原则来描述数据的操作,并要求其衍生模块实现其提供的接口。和其他中设计中采用XML适配异构数据源的方式[3][4][5]不同,DataMapper通过为不同数据源设立与之对100 应的DataMapper的方式来适配数据源。与前者相比,DataMapper的方式可以适配更广泛的数据源,而更有通用性。 DataMapper本身并不与任何数据源发生交互,这些工作是由其衍生模块完成的。图 2 表示了DataMapper和其衍生模块之间的关系。 DataMapperRestMapperLocalDataMapperFileMapper 105 图2 DataMapper以及其衍生模块 Fig. 2 DataMapper and its derived modules DataMapper的每个衍生模块负责具体数据源的数据处理工作。比如RestMapper负责标准的REST接口的数据源适配,而FileMapper和LocalDataMapper则负责文件和自身数据如来自于自身的传感器的数据适配。 110 中间件使用Key加Parameters来作为资源标识。Key和Parameters可以通过配置的方式来确定和具体数据源的对应方式,下面我们对Key和Parameters分开做讨论: 1) Key 每一个Mapper实体都会有一个唯一的Key,而Key可以由开发者自己定义。在本文中,每一个Mapper实体都代表着一类资源。而我们可以根据Mapper的具体功能将Key设为语115 义上与其相符的相关内容。比如,当生成一个RestMapper并将其Key设为ClassInfo,其代表着此Mapper会访问一个REST的而且是获取班级信息的接口。 Key将不同目的类型的接口进行区分,使开发者可以仅根据key的值快速找到相应的接口。 2) Parameters 120 Parameters指参数,在确定了Key之后,Mapper会根据传入的Parameters获取到最终的资源。Parameters的数据格式为字典类型,即键值对的形式,下面是Parameters的一个例子: { “classID” : 1 125 “studentID” : 10 } 在上面的例子中,Parameters有两个键,分别是classID和studentID,分别代表了班级的ID与班内学生的ID,如果此Mapper目的为获取学生信息,则上例会返回在班级1中,班内编号为10的学生的信息。 130 利用Key加Parameters机制,可以完整地定义资源的位置,同时,其数据输入更为简洁,调用仅需要传入关键信息,而重复的冗余信息则交给了Mapper做统一处理。 采用Key加Parameters的形式可以将不同种类的资源统一成同一种访问形式,但是由于底层资源的实际差异,需要有一套映射机制来实现差异化的屏蔽。 资源的模板是由Mapper具体实现的,每个不同的Mapper都会有不同的映射方式。但135 是总体来看,每个Mapper都会有一个资源模板来规定映射的规范。 资源模板定义了资源映射的规范。图3表示了通过资源模板生成资源描述的过程: 根据资源模板映射到资源描述资源模板Parameters(参数)资源描述 图3 通过资源模板生成资源描述 Fig. 3 Generate resource description with resource template 140 在DataMapper中,DataMapper读取资源模板和传入的参数,并在处理后生成最终的资源描述,从而来访问不同的底层资源。 资源模板可以是任何形式,但大多以字符串的形式配置到Mapper中。比如,一个RestMapper的资源模板为:http://xxx_building.com/{building}/{room}/ 学术论文网Tag:代写硕士论文 代写论文 代写代发论文 代发论文 |