界面自动生成工具
主题:本文介绍了一个直接根据数据库表结构定义自动生成对该表记录进行存取操作界面(FORM)的工具
1. 界面自动生成的必要性
一般在数据库应用程序,特别是MIS软件开发时,都会选择使用开发工具,如PB、C++BUILDER,DELPHI,UNIFACE等等。这些工具为数据库应用程序的开发提供了强大的支持和帮助,使大部分开发工作转化成一种简单的,机械重复劳动。对一个新手,只要拖拉一些控件,在短短1-2个小时就可开发出一个可对数据库进行操作的漂亮界面,这对一个新手的工作是一个极大的鼓励。但我与一些从事数据库应用程序开发时间较长的朋友交谈时,他们几乎全部都抱怨做数据库应用程序开发太没有意思,没有创新,作长了感觉很烦。有个朋友也做了个小工具来减少重复劳动,效果还不错。因此本人就决定开发了界面自动生成工具。开发的第一个工具是以ORACLE和C++BUILDER 为基础的,用于一个大型MIS项目开发,效果很好,大大地减少开发工作量,降低了开发成本,特别是为维护工作带来了很大方便。在那个开发项目中,当第一个开发负责人因故要离开该项目时,软件交接很容易。这是因为自动生成的程序很整齐,很规范,严格遵守命名规则,因此程序的可读性很好,数据库中的表名与界面名和源文件名直接对应,找源文件就很方便。 在第一个工具成功的鼓励下,本人开发了实用性更强的第二个工具,是基于DELPHI的,可选择ORACLE 或SQL-SERVER数据库管理系统,及BDE或ADO连接方式。这里主要介绍第二个工具的一些设计思路。
2. 工具设计的主要思路
由于界面的一个重要功能是对数据库中表内的数据进行存取,界面与表之间有着直接关联,因此这里采用为每个数据库表生成一套界面的思路。由于每个表的数据项多少不同,界面的空间有限,这里根据每个表内数据项所占用的空间不同生成三种界面:
A 对数据项占用空间较小的情况,在界面的上半部安排一个记录列表(DBGRID),
下半部安排编辑面板(安排LABEL和各种编辑框)。如图1
图1B对数据项占用空间中等的情况,把记录列表和编辑面板分别安排在两个界面
上。通过记录列表上的编辑按钮,调用编辑面板界面。如图2
图2
其中相片为图形文件,挡案按钮自动调用WORD,且把该WORD文件保存到数据库中去。
C对数据项占用空间较大的情况,生成类似与B的界面,只是在编辑界面上有
多页切换功能。
作为工具设计者来说,总希望生成的界面具有尽可能多的功能。但是靠计算机自动生成的只能是一些常规的,公共通用功能。对一些业务规则要求的非常规功能要自动生成难度很大,这还得靠人工来编程。对一些通用常规功能是否能自动生成,这还取决于该功能的语法定义是否简洁直观,及生成器开发难度。我们在生成器开发前,先开发尽可能多的通用控件。我们开发的通用控件有:通用打印控件,通用查询控件及时间编辑框。在对时间编辑框内数据进行编辑时,程序会自动弹出日历窗口。对DBGRID的功能进行扩展,可对DBGRID中的每一列进行排序,求最大值,最小值,平均值及求和。对界面生成时可供开发者选择的功能如下。
1)可选择该界面所对应的数据集使用TTABLE还是使用TQUERY。当使用后者时,给出查询条件。
2)一个数据项是否允许为空。本来数据库本身会做这个检查,但为提高效率,我们把这个检查放到前端来做。
3)该数据项在界面上是否可见。
4)该数据项是否是只读,或在插入时可给出数据,但不允许修改。
5)该数据项是否代表货币。
6)给出该数据项的检查范围(LIMIT)。
7)给出该数据项在读写时的MARSK。
8)定义该数据项是否存储图形文件,用户编辑该数据项时,当该数据项为空时会自动弹出文件目录窗口,供用户选择加载图形文件。当该数据项有内容时,会调用该图形文件的处理软件。
9)定义该数据项是否存储WORD文件。当用户编辑这个数据项时程序会自动弹出WORD窗口。
10) 可定义一个数据项为LIST框,且给出LIST内容。
11) 定义一些数据项,当这些数据项的内容都不为空时,它们所对应的记录将不允许修改和删除。(对应批准后的记录不能修改和删除的情况)。
在界面上除了提供常规的新增、修改和删除(确认,取消)外,还提供两个功能:在插入时可选择复制当前记录的数据。当用户调用其他操作,引起数据集刷新的情况时,光标会自动定位到原来位置。
对LOOK UP 框,从生成器实现来说,难度不大,但因要求的参数太多,开发者容易填错,这里就没有提供,让开发者手工来实现。在数据库应用程序开发中会大量使用的主从表结构,因语法定义有困难,这里就没有提供这种界面的自动生成。对一个主表对应多个从表的情况,有的开发者把一个界面的上半部分安排给主表,下半部分重叠多个子表,用按钮来切换子表,这样使用起来很方便。对这样的情况,开发者可在已生成界面的基础上,手工实现这样的界面安排,起码可减少工作量。可自动生成的通用功能可能还有不少,欢迎读者给我们提出新的建议。
3. 使用工具后的开发重点转移
目前我们使用的建模工具为ER-WIN。我们把数据项的物理含义说明放到逻辑模型的COMMENT中,把生成所需的选择放到物理模型的COMMENT中,预先为REPORT准备好一个模板。这样利用ER-WIN的REPORT功能,就可把生成器所需要的数据,通过ER-WIN的REPORT功能,按规定格式写入到一个TXT文件中去。生成器读这个TXT文件就可自动生成该文件中要求的全部界面。在C++BUILDER中生成器生成全部界面的 H 文件,PCC文件,DFM文件及作为主程序的PCC文件。在DELPHI中生成全部 PAS文件,DFM文件及作为主程序的DPR文件。在界面自动生成的基础上,开发者要做三件工作:
1) 根据业务处理流程,组织界面调用次序。这样生成的界面把数据库表定义,表操作和界面结合在一起对象性很强,很容易实现业务流程重构的要求。
2) 对表上一些生成器不能提供的操作,开发者手工去做。如安排新的按钮,编写事件程序,在已生成的程序中增加或删除部分代码,调用存储过程等。在实际工作中,当对已生成的代码作增删处理时,我们规定在修改处的两头必须用规定格式的注释行做出标记。这样当一个表中定义的数据项要增删改的修改时,在界面重新生成后,很容易把修改部分人工合到新界面程序中去。将来也可开发工具把修改部分自动合到新生成的界面中去。
3) 根据业务处理要求,编写存储过程。这里我们建议把尽可能多的业务处理放到存储过程中去做,这样做,其优点是明显的
由此可见,使用该工具开发时,开发者在概要设计时重点主要放在两个方面:一是搞好数据结构及相关界面生成参数设计,重点是使用ER-WIN去建模。另一个方面是搞好业务流程的提取,分析,整理。开发者不必再去考虑那些琐碎功能的分配与安排。采用界面自动生成工具来开发数据库应用程序带来的优点主要为:
1)容易保证程序和文档的一致性。当数据结构需要修改时,总是按照先修改ER-WIN内数据,再通过ER-WIN自动修改数据库内的表,再自动生成界面这个原则,文档和程序都来自同一个数据源,文档和程序自然会保持同步。
2)开发者可把主要精力放到业务流程分析及业务处理的实现,使开发工作显得不那么枯燥,开发者可把主要精力放到创造性的工作上去。
3)大大简化了文档编写工作。开发者在文档编写时可把主要精力放到业务流程分析结果的描述,存储过程定义,实现途径的描述。有关数据结构的描述及通用操作,可通过ER-WIN的REPORT功能直接产生。对在生成的界面程序上做增删改的那部分代码,由于这些都是小程序,很容易理解,详细设计说明书的编写要求可大量简化。对一些复杂程度不太高的系统,这部分的详细设计说明书可采用在程序中加较详细的注释行来代替。
4)采用工具来开发数据库应用系统,工作分工明确,层次分明,很容易实现大兵团联合开发的工作模式。集成调试相对要容易些。
5)降低开发成本,缩短开发周期,提高软件质量,增加软件系统的可维护性方面的优点,这里就不再赘述了。
4. 其他
本工具开发出来后,在本人周围的软件开发人员中引起两种不同的反响。一部分人员认为,该工具把他们从枯燥,无聊的重复劳动中解放出来,在软件开发中突出了系统分析和设计的重要性,对工具表示欢迎。另一部分人员认为该工具使用后,使软件开发失去了一种艺术创造的激情,用工具开发出来的界面过于单调,朴素,不易为用户接受。在1997年出版的本人所著的“软件开发技术与实践”一书中本人曾表示过这样的观点:为促进我国的软件事业发展,一定要把软件开发从艺术创造中解脱出来,走工业化大生产的路。
陈震秋 2002年4月14日
Email: zqcheng@yahoo.com