一. 前言
我台构建的“贵州电视台网络化设备管理系统”,包含贵州电视台设备的维修、查询管理系统,库房入库、出库管理系统,技术资料管理系统、网络化管理系统、报表系统、成本核算、数据库备份和结合局域网的公文管理、报表查询的系统。
我台在考虑选择哪种开发工具来开发贵州电视台网络化设备管理系统时,想过使用的开发工具有:VC++,BC++,VB,PB,Foxpro for Windows和Delphi C/S。Borland C++编写也有它的特点,也感觉过C++编写大型应用软件的优点和缺点,但投入代价太高!所以我们决定抛弃C++,另外选择。为郑重起见,我们测试了其余的开发工具,最后还是决定采用一个很新的工具Delphi 6。
开发顺利完成后,经历从Delphi 4 C/S升级到5,6C/S,使我们对Delphi 6 C/S Suite版本有了一定的了解,下面就几个比较突出的优点谈谈我们的感受。
二. 几乎完美的面向对象语言和技术
Delphi4.0的面向对象已经非常彻底,但6.0更好,增加了可视的Form的继承。这大大方便了类似数据输入界面的管理,比如我台设备管理系统的耗材入库录入和耗材出库录入界面,很多动作相同,于是可以先构造一个Form作为基类,继承下去两个甚至多个界面,相同动作写在基类中,不同的编写在子类中。由于所有函数支持“虚函数”特性,对程序编写和维护非常方便,大量类似的报表也采用了此技术。
考虑到系统中有大量的数据录入动作,我们编写了一个构件,叫DBKey,专门解决界面数据和数据库之间的动作。这样,程序员只要考虑用户输入数据的正确性和关系,而不用考虑数据如何存入数据库中和数据浏览、移动时的细节。如果数据进入数据库时的请求出错,构件会自动Rollback还原到录入状态,给出提示,使所有画面的处理动作一致。每个数据录入界面上都使用DBKey,还实现了很多细节的管理动作和打印动作。在输入界面完成后,只要修改和增加DBKey的功能,全部界面都具有了相同功能。比如,表单的打印输出就是在全部录入界面完成后,才加入在构件中的,于是全部界面都有了漂亮一致的打印输出功能。
由于每个企业对报表输出的数据要求都可能不一致,我们的报表输出的也采用了一个专用构件,程序员只要将需要的数据提交出来到一个临时数据库中就可以了。以后对数据的小计、合计、排序、增加自定义计算栏位、调整栏位顺序、报表打印样式、字体设计和将数据转出为各种dbf,txt,Word,Excel文件或发电子邮件、传真等功能都统一由构件实现。这样,使用感觉非常一致;而我台的设备维护管理工作也变得非常简单。
Delphi本身提供了一个很好的DBGrid,但我们在实际应用中,发现缺少一个中国人很常用的双层表头功能,比如在贵州电视台网络化设备管理系统中,上层表头为耗材总价,下层为耗材入库价、维修零件费、维修费等。于是,我们继承DBGrid派生了一个新的类,只编写了200多行程序,就实现了此功能。
Delphi的对象技术还帮助我们完成了两个高难度的工作:多语言支持和类似于Windows 2000的桌面和菜单管理。我们的软件可以自动和运行期间人工调整显示的语言:大陆的GB码、港台的BIG5码和英文,为外资企业提供了方便。我们的软件由于功能很多,普通用户可能不会全部使用其功能,也有可能希望更改表示功能的桌面和图标,重新根据部门安排和调整工作图标,于是我们又编写了一个构件能将用户重新设计的桌面、菜单保存起来,并对应系统的具体功能。这样,系统就可以根据用户的需求,随意的修改和组合,可复杂也可以简单。这样的功能,用别的RAD工具实现起来就会非常困难。
三. 完善的数据处理能力
Delphi 6中,增加了Data Modules的概念,可以将数据包装在一个模块中,在系统启动时或空闲时将它打开,这样,所有使用这些Table的模块都可以共用它,避免重复打开和关闭。并且,由于所有数据Table位于一个模块中,非常便于管理维护和迁移升级。
Delphi提供了非常方便的工具SQL Explorer,可以快速浏览各种数据库服务器上的资料,如stored procedure等。另外一个工具是SQLMonitor,可以测试和优化SQL查询。还提供了一个数据搬迁工具,可以将数据从一个地点全部或部分搬迁到另外一种数据库中。
BDE中,可以针对不同关系数据库设置大量的相关参数,调节处理性能。更提供了带缓存的更新动作CachedUpdate,大大提高了交易处理能力,这样,可以将多笔资料录入修改放在缓存中,确认后,再一次性的更新数据库。这个功能大大减轻了程序员保存临时数据的负担!
四. 对标准技术的完整支持。
Delphi提供了Windows 32位特性的完整支持。用Delphi编写multi-thread多线程的程序非常简单,系统提供了一个叫Thread Object的物件,只要新建一个Thread Object,然后给出Class Name,就产生了一个继承TThread的Class,在Execute中添入相关代码,就完成了。我们的系统中就使用了multi-thread来提高系统的执行效率,在空闲时,提前打开相关数据库的Table。
Delphi 6升级后,提供了对Microsoft的Active X技术(OCX技术的改进)的支持,可以在Delphi中像使用标准构件一样使用ActiveX构件,你可以直接购买别人开发的大量Active X(OCX)构件直接 使用,比如像复杂得可以完全兼容Microsoft Excel 2000的Formula One构件,大量支持WWW浏览器技术等。6.0版本中,还直接提供了一组Active X构件,实现了对ftp,pop3,smtp,http,nntp等协议支持。这样,在Delphi编写的应用程序中,就可以非常方便的进行Internet的访问,如收发E-Mail,访问Home Page和Download软件升级版本。Delphi中,对OLE2的支持也是非常完整,由于增加了一种数据类型Variant,我们可以在程序中,对Word,Excel等OLE2对象进行操作,非常方便。
五. 大量的第三方构件产品和工具
在Internet上,有全球大量的Delphi程序员编写的构件和范例程序。最有名的是DSP(Delphi Super Page,http://sunsite.icm.edu.pl/~robert/delphi//)和Delphi6.0(http://www.delphi6.com/)。前者是建立于Sunsite上的,位于波兰,有成千个构件和范例程序是Freeware和Shareware,可以免费或购买使用,几乎各种专题都会涉及。比如,我们早期曾考虑编写MAPI程序,结果去DSP上马上就找到一大堆构件和范例,还有Source,大大加快了开发速度;后来又有一次希望编写TWAIN32的扫描仪接口,结果有一下就有3个构件支持。于是,我们养成一个习惯就是当编写一个特别功能的构件时,先去Internet上找一找,几乎每次都会有收获。
还有大量的公司