UML软件工程组织

 

 

基于MDA的央行会计核算系统前台代码自动生成
 
作者: 赵艳平 张书杰  出处: 计算机与信息技术
 

摘 要 中央银行会计集中核算系统ABS包含大量的用户界面,输出格式复杂,数据变化大。本文提出一种基于MDA(模型驱动框架)的代码自动生成解决方法,使用模板技术实现了UNIX下前台代码自动生成,取得了很好的效果。

 关键字 中央银行会计核算系统; 代码自动生成;MDA;平台无关模型;模板

 1 引言
 中央银行会计集中核算系统(ABS)是人民银行中心支行及其以上辖区内会计核算集中处理, 并通过中国现代化支付系统连接,实现中央银行资金清算的计算机网络系统。ABS包含大量的用户界面和打印输出的账表,输出格式复杂,数据变化大。但是其实现有一定的相似性, 整个过程包含大量的简单重复劳动。并且在银行系统领中大量应用程序族或者不同的项目都属于同一个应用领域的应用。如果能够定义一个抽象的、独立于任何技术的模型,再通过代码生成器生成相关代码,那么这将会使编程人员从繁复的代码中解放出来。这就是OMG (Object Management Group ) 组织提出的MDA(模型驱动框架)思想的起源。OMG提出,一个MDA的应用,使建立以平台无关的PIM( Platform Independent Model)开始,然后使用相应的MDA工具,结合具体技术,将PIM映射成为特定平台上的PSM ( Platform Specific Model),最后通过这个应用的特定PSM,使用代码自动生成器,自动生成大部分的特定平台上的应用程序代码。MDA分离业务模型与实现技术之间的耦合的关系,最小化技术变化对系统的影响. 从宏观看, MDA使得应用模型与领域模型在软件生命周期得到了复用.

 本文讨论的代码自动生成是针对比较局限的领域而言的,即需求已经被正确的理解并由人转化为解决方案领域中的抽象模型,即平台无关模型,将此作为代码生成器的输入。将模型和程序模板结合,将具体的业务模型映射成应用程序源代码或配置文件。MDA要做的就是把模型本身也作为一个开发的工件,使用编译器来自动生成系统所需要的代码,从而实现快速开发系统。ABS前台自动生成引入MDA思想方法使得开发重点集中到模型的创建,模型驱动整个开发的过程。

 2 自动生成任务

 2.1系统需求

 ABS 采用C/S 模式,运行环境为SCO UNIX。系统界面为SCO OPENSERVER 平台下的字符终端界面,提供菜单选择,表格录入。

 2.2 性能需求
 (1) 通过工具由模型自动生成该类完整的.hpp 文件和.cpp 文件,能够直接在平台下编译。
 (2) 生成界面保留原会计核算系统的风格。表格设计在界面空间内尽量与实际会计凭证相一致,为会计业务人员所熟悉的形式交互形式。
(3) 界面上各类操作的方便性、可靠性、正确性. 这要求在输入数据时, 用户能以最简便、可靠的方式完成输入, 并保证输 入数据的正确性, 对输入数据进行合法性检查和限制。
 如图1、图2展示了系统中前台界面。
 
 图1 竖向菜单

 3 平台无关模型

 3.1 模型表达

 要实现将一个模型通过代码生成器映射为所需要的代码,首先要将某个具体业务模型转换为代码生成器可以读取的文件,然后代码生成器从这些输入文件中提取出模型中的信息并生成系统应用代码。OMG定义了一系列建模语言,用于创建PIM或PSM,它可能是UML,也可能是日常的英语,或者是某种编程语言,能够想到的任何语言都行,为了让机器识别,支持模型的自动交换,需要对模型加一些限制.最为广为人知的PIM语言是UML.这也是使用最广泛的建模语言。
 
 图2 画面

在本文中,我们针对本项目自身的特点,我们用文本文档定义专业符号作为FIM表达方式,能够完整描述模型信息。比UML更为直接、清晰、有效和有针对性一些。从整体上看FIM模型可以分为菜单模型、功能模型、画面模型、数据交换模型等。这些模型作为自动生成的输入,经过代码生成器生成系统所需源代码或配置文件。图3展示了代码生成的过程。


 图3 代码自动生成结构

3.2 FIM设计
 针对用户界面建模的要求, 本文将对象模型进行扩展. 该模型从对象建模出发, 不仅表达了对象的要素构成,还给出了各字段要素的分组和展示顺序、操作和计算约束以及它们之间的交互关系等复杂信息, 为生成足够复杂用户界面提供了必要的信息. 依据对象模型的定义, 可以实现从被操纵对象模型到界面构成的自动化映射,以下对各模型进行说明。

 菜单模型描述前台的菜单路径及相对应的交易,用于生成前台界面的竖向菜单。竖向菜单是呈树型分布的,其属性:“M”表示该菜单还有子菜单,“F” 表明为叶子节点,关联一个与之对应的功能模型,即由该菜单进入界面操作。

 功能模型描述每一个菜单叶节点的具体动作。在模型中定义了一系列动作类型,设计者需要根据业务逻辑对这些动作类型组合以完成用户的一次交易操作。功能模型对以下三个模型起到统领和调用作用。

 画面模型定义交易的窗口,用户可以在里面输入交易所需的数据,可以显示输出的数据;并对输入输出的数据进行合法性检查和翻译。该模型定义窗口的显示位置和大小、字段名称、字段展示顺序、字段类型、字段显示长度、分组和换行等。

 数据交换模型用来描述画面、列表、交易等对象的数据赋值及相互之间的数据交换情况。

 消息模型用来对报文的处理,与后台进行通信,完成发送或接收报文,实现前后台数据交换。

 字段模型用来描述了生成程序中将会出现的所有字段的信息,说明各字段类型相应的数据类型及相应的字段存储长度及字段显示长度。

 4 代码的生成
 本文在MDA的应用中,采取了较容易的实现MDA-light,这样平台相关模型这一步可以说是被跳过了,直接从高度抽象的PIM生成源代码。如图4所示代码自动生成采用系统模型结合程序模板库和界面构件库,按照一定的生成算法生成系统源代码。
 

 4.1 程序模板及构件
 4.1.1 模板


 在界面开发的过程中,积累了丰富的经验。为了使这些开发经验在整个软件开发过程中得到复用,以提高开发效率和质量,那么我们采用模板支持开发。模板即是将要生成的代码的雏形,为了自动生成代码,需要将业务中有共性的地方抽取出来作为模板。针对以上提到前台自动生成模型,即平台无关模型,我们设计出以下与之对应的程序模板。

 (1)CFaceCtrl模板:完成从菜单到具体交易(菜单叶子节点到具体的交易)的过渡和对应工作。
 (2)CBarMenu模板:横向菜单的类,画横向菜单和让用户选择菜单中的某一项。
 (3)CWnd模板:交易的窗口类,用户可以在里面输入交易所需的数据。
 (4)CLst模板:列表框类,这个类适宜那些采用列表框来显示数据的交易画面。
 (5)CMessageDeal模板:报文处理的类,根据得到的信息生成、发送报文,然后接收返回的报文。
 (6)CDataExChange模板:数据交换的类,实现窗口和报文,报文和报文之间等信息交换。
 (7)CMsgFile模板:处理和文件有关的操作,一般用于查询相关的操作,多条记录的输出。
 
 4.1.2 界面构件
 界面构件库是根据程序模板库的需要建立的,它是配合程序模板库进行代码生成的重要组成部分,它主要采取将页面细化,然后再在生成代码的时候进行组合的方式实现的。一个界面有若干基本元素组成,比如其横向菜单有录入、查询、上翻、下翻、修改、删除、复核、撤销、应答、退出等等动作关键字,我们据此建立了基本元素的类,这些基本元素往往各自功能独立,代码生成时进行组合。沿着这个思路,最后实现代码生成。

 4.2 结合模板的代码生成
 代码生成阶段,设定需要生成的目标代码语言类型,执行代码生成命令,系统自动将定义的对象映射到目标代码所定义的组件,结合相应的规则和算法即可生成系统前台代码。模板的使用简化了开发,将固定部分直接写入到输出源代码的文件里;对于可变部分可以引进变量,在运行时将变量动态的插入模板中,替换这些变量。

 下面以CFaceCtrl族类代码生成为例,简单说明代码生成过程。相关代码如下:

/*程序固定部分*/
WriteTimeInfo(lF_CFC_cpp_pfile);//
strcpy(lCH_temp,"#include \"../hpp/");
strcat(lCH_temp,gs_Class_Name);
strcat(lCH_temp,".hpp\"");
......
fprintf(lF_CFC_cpp_pfile,"%s\n",lCH_temp);
......
/*生成程序可变部分*/
while(1)
{
if(lI_num<gI_func_num)
{
fprintf(lF_CFC_cpp_pfile,"if(fstr_cmpnc(func,\"%s\")==0)\n{\n",gCH_function_names[lI_num]); // gCH_function_names为变量,可变数据替换变量
.....
lI_num++;
}
else
break;
}
fprintf(lF_CFC_cpp_pfile,"\telse return NODE_NOT_FOUND; \n}\n");
......
fclose(lF_CFC_cpp_pfile);
return RET_CREATE_CFC_CPP_SUCC;//返回代码生成成功布尔值
}

我们系统的目标语言是C++,那么若系统要求运行平台为WINDOWS,目标语言是其它编程语言,那么我们只需重新定义程序模板库和映射规则,无需改变业务模型和领域模型。从而分离业务模型与实现技术之间的耦合的关系,最小化技术变化对系统的影响。

 5 结束语
 本文所讨论的代码自动生成方法已经得到全面实现,生成的代码可以直接在Unix平台下进行编译和执行。MDA代码生成技术给开发带来诸多好处。①代码的自动生成,替代了程序员大量重复性工作,它提高了代码的生成效率,减少了代码出错率;②模型作为代码生成器的输入,使得设计与最终源代码无缝连接;③模型是通过专业的符号体系文本的陈述说明,这恰恰说明了使用模型驱动的前台开发更易维护。④基于模板的开发,有利于标准化和代码复用,方便了代码维护和代码迁移。

 该前台自动生成工具还存在很多不足之处,比如文档模型表述还不够简练等。借鉴UNIX下的前台自动生成工具的设计思想和文档结构,我们还探索在WINDOWS下的前台自动生成工具,根据前台文档模型,编写支持各种语言的自动生成工具,实现“模型驱动开发”的思想。

 参考文献
 [1] Anneke Kleppe等著.解析MDA[M].人民邮电出版社,2004
 [2] 徐龙杰,万建成. 面向用户界面建模的扩展对象模型[J].小型微型计算机系统.2006,27(5):901-905
 [3] 刘发贵,胡耀民.基于MDA的模式化软件设计方法与应用[J].计算机应用.2005,25(4):790-795
 收稿日期:9月12日 修改日期:9月22日
 作者简介:赵艳平(1981-)女,山东郓城人,硕士研究生,主要研究方向:分布式开发、软件开发。张书杰(1943-)男,河北安平人,教授,博士生导师,主要研究方向:计算机网络、信息安全等。

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号