雷 洋
一种基于可扩展标记语言的软件系统解耦合设计方法研究
雷 洋
南京模拟技术研究所,江苏 南京 210016
软件系统的解耦合设计是软件系统具备高可扩展性、高维护性的基础设计之一,因此如何建立软件系统的解耦合结构是软件系统设计的重点关键技术之一,尤其是大型软件系统。通过使用可扩展标记语言(Extensible Markup Language,XML),提供一种系统解耦合的设计方法。此方法在模块化系统设计的基础上,设计了一种软件系统模块开发的接口标准,建立了一套软件系统解耦合的系统结构。将此方法应用于系统的开发过程增强了系统在应用逻辑扩展过程中的友好性和易用性。
系统解耦合;软件系统;系统设计;可扩展标记语言
解耦合设计是基于高内聚松耦合的理念对系统进行设计的过程。内聚是一个模块内各个元素彼此结合的紧密程度;耦合是一个系统结构内不同模块之间互连程度的度量。解耦合设计过程是让一个完整系统的模块与模块之间尽可能地独立存在。也就是说,让每个模块尽可能地独立完成某个特定子功能,而模块与模块之间的接口尽量少而简单。如果某两个模块间的关系比较复杂,最好首先考虑进一步的模块划分,这样有利于修改和组合。软件系统的解耦合设计是软件系统开发必须考虑的设计理念之一,也是软件质量保证的基础之一。
可扩展标记语言(Extensible Markup Language,XML),是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。XML的核心是数据,重点在于数据的内容。XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言。XML还是一种元标注语言,即定义了用于定义其他特定领域有关语义的、结构化的标记语言。这些标记语言将文档分成许多部件并对这些部件加以标识。本文主要关注XML的数据特性,不对XML的上述特性展开分析。
XML基于数据的特性使其成为跨平台、跨应用、跨模块交互的一种优质媒介。本文定义接口标准中XML文件的格式标准就是利用该特性建立系统的交互桥梁。
接口标准是一套模块与模块、模块与框架、系统应用与系统框架之间的通信与交互的约束规范,同时建立一种系统结构用于该标准的具体应用。系统内部可以通过接口标准实现模块封装;系统框架可以通过接口标准建立模块与模块之间的通信与交互;系统应用之间可以通过接口标准建立沟通和调用框架。
接口标准定义了一系列系统用于模块间如何进行调用、交互和数据传输的约束,最终是XML文件的表现形式。接口标准主要由四部分组成:面向功能的接口标准、面向调用的接口标准、面向框架的接口标准及XML格式标准,如图1所示。
图1 接口标准
2.1.1 面向功能的接口标准
面向功能的接口标准定义了一系列的模块功能封装约束条件,用于开发者封装模块功能。用户按照接口标准封装各个功能,并通过面向调用的接口标准中定义的逻辑方法进行使用完成功能的调用。约束条件包括了以下方面。
(1)ID唯一性约束:模块的ID和模块内功能ID的定制规范,用于系统标识该基本功能;(2)描述性约束:功能描述的编写规范;(3)输入约束:功能输入参数获取的规范;(4)输出约束:功能输出参数获取的规范;(5)执行约束:功能的执行规范;(6)执行结果约束:功能的获取执行结果的规范。
2.1.2 面向调用的接口标准
面向调用的接口标准定义了一系列的模块封装约束条件,用于开发者封装模块。用户按照接口标准封装各个模块,并通过框架接口按照面向调用的接口标准中定义的逻辑方法使用,完成各个模块内功能的调用。约束条件包括了以下几个方面。
(1)模块类型定义:模块的类型和ID的写入规范;(2)模块生命周期约束:模块对应的封装类实例从创建、使用、销毁全过程的生命周期管理规范;(3)模块功能生命周期约束:模块功能对应的封装类实例从创建、使用、销毁全过程的生命周期管理规范;(4)XML文件导出约束:模块以及模块功能XML文件导出规范。
2.1.3 面向框架的接口标准
面向框架的接口标准定义了一系列的模块功能调用、模块管理的约束条件,用于系统框架对各个模块功能进行整合。系统通过面向框架的接口标准管理、调用各个模块。约束条件包括了以下方面。
(1)框架调用模块功能约束:框架调用模块功能的方法;(2)系统各个模块管理约束:各个模块的管理约束条件。
通过上述接口标准的定义,系统框架、模块之间、外部程序通过接口调用而非函数调用实现对模块以及模块内部功能的调用。需要特别指出的是,系统调用的接口并非传统意义上的模块接口文件,而是根据上述接口标准生成的接口文件,该接口文件采用规范约束的方法进行定义,在系统规划完成之后并不会随着系统需求的改变而改变。接口文件结合XML文件的使用实现了当功能模块发生变化时,系统各个模块的衔接接口不会随之变动,这一特征正是松耦合、高内聚要求的关键特征。
软件系统模块化开发过程中难以避免模块间的嵌套调用,不良的嵌套调用、复杂的嵌套关系往往是导致系统崩溃和难以维护的根源之一。需求的不断更新也是系统开发过程中经常遇到的问题。需求的变更面临着系统功能和结构的变化,反复的模块接口变更会带来系统开发的不确定性。
图2 系统模块的封装与生成
如图2所示,系统模块开发过程中,开发者利用接口标准对系统模块进行封装,生成系统模块的封装类和模块功能的封装类。封装类的实例化过程和调用被隐藏在具体的接口实现类中,而模块之间、模块与框架之间的调用通过标准接口进行,实现模块对外接口在开发过程中的一致性需求,降低了开发过程中需求变更对系统各个接口变动带来的影响。
图3 接口、实现类之间关系图
图3描述了接口与接口、接口和实现类之间的关系。顶层框架接口的实现类包含了模块调用接口和模块功能接口。实现类通过调用上述两个接口完成对系统各个模块和模块功能的调用,面向系统的则是顶层的框架接口。模块封装基类包含模块功能接口,各个模块通过继承该基类实现对模块的封装,各模块的封装类中包含了模块内功能封装类。功能封装基类实现对模块各个功能的封装,模块内各个功能通过集成该基类实现对模块功能的封装,模块内功能最终通过模块功能接口被外部调用。
通过标准接口、封装基类的泛化和封装类之间的组合过程,在系统中建立一套模块之间的通信和交互方法,实现系统各个模块之间的松耦合设计。对于系统框架以外的应用,开发者可通过XML文档描述标准进行二次封装实现读取系统内部功能,为开发可视化的功能逻辑编辑提供技术实现的基础。
软件系统通常由多个系统级模块构成,并通过系统逻辑将模块串联起来,从而实现系统功能,但是系统逻辑随着用户需求和系统功能的变化需要不断地进行修正,因此建立各个模块之间、模块与系统框架之间的松耦合交互和通信机制,解决系统结构如何适应不断变化的系统需求的问题,是系统结构设计的重点研究内容。
综合考虑软件系统的上述特征和模块间松耦合设计的思路,笔者在系统设计开发过程中使用上述接口标准作为模块之间的交互方法,同时结合所要构建的软件系统建立该标准的系统应用框架,从而实现对系统整体框架的约束,实现系统各个模块之间的松耦合特性。
通过引入上述接口标准和框架,其优点在于以下两个方面。
(1)建立接口规范,形成稳定的系统框架。相比于一般的接口开发,该设计进行了更加深入的接口开发,形成了一套统一的接口标准,规定了每一个系统模块内部、模块与模块、模块与系统之间的开发规范。将最终的代码实现隐藏在接口标准之后,从而在一定程度上建立了稳定的系统框架。一般的接口设计,往往在较大的需求变更之后,接口也随之变化,从而影响到系统的稳定。
(2)为系统外进行系统逻辑编辑提供了基础。接口标准中提供的XML文件格式,结合系统框架接口,为外部进行系统内部逻辑调用提供了前提,基于该前提条件进行外部逻辑编辑器的开发,从而实现了无须变更平台代码即可修改系统运行逻辑的关键技术。
图4 软件系统中的应用示例
图4是该系统解耦合设计方法在软件系统中的应用示例。由于多数软件系统中系统逻辑的扩展性要求较高,因此系统设定了系统逻辑编辑。系统逻辑编辑完成之后需要在软件系统中驱动运行,上述接口规范提供了该项功能实现的基础。同时基础功能的变更,也将封装在上述的接口规范之后,保证了软件系统框架的稳定性。
将本文描述的方法应用于软件系统的设计,在系统开发过程中虽然在一定程度上增加了模块的开发工作量,但是对于整个系统的结构而言可以忽略不计。该方法描述的接口标准,基于接口标准建立的系统结构较好地满足了系统设计要求。将本方法应用于对扩展性要求较高,系统内部各个模块之间的逻辑变化需要适时进行调整的系统中时,该方法具有较好的推广应用价值。
Research on Decoupling Design Method of Software System Based on Extensible Markup Language
Lei Yang
Nanjing Institute of Simulation Technology, Jiangsu Nanjing 210016
The decoupling design of software system is one of the basic design of software system with high scalability and high maintenance. Therefore, how to establish the decoupling structure of software system is one of the key technologies of software system design, especially large software system. A design approach to system decoupling is provided through the use of Extensible Markup Language (Extensible Markup Language, XML). Based on the design of modular system, this method designs an interface standard for software system module development, and establishes a set of software system decoupling system structure. Applying this method to system development process makes system friendly and easy to use in the expansion process of application logic.
system decoupling; software system; system design; extensible markup language
TP301.6
A