Delphi5.5的MIDAS编程
数据库应用程序中三个基本层:
l 数据层:负责存储数据
l 业务层:负责从数据层获取适当格式的数据并执行最后的合法性检查(也叫做执行业务规则)。业务层也就是应用服务器层。
l 表示层:也叫做GUI层,负责在客户应用程序中以适当格式显示数据。总是与业务层打交道,不直接与数据层打交道。
Delphi下多层体系结构的优点:
1. 业务规则集中:业务规则放在应用服务器上
2. 瘦客户体系结构:数据访问由应用服务器来控制,数据表示则由客户的应用程序完成。只需发布客户应用程序和一个用来访问服务器的DLL文件。
3. 自动错误调和
4. 公文包模式:公文包打开数据模式,允许不必一直与应用服务器或数据库服务器保持活动连接。
5. 容错
6. 负载平衡:负载平衡的算法有随机法、顺序法、最少网络用户和最少网络流量等。Delphi4及以上版本提供了一个顺序法实现负载平衡的组件。
典型MIDAS体系结构:
窗体/数据模块 远程数据模块(RDM)
客 户 服 务 器
TdatasetProvider TDataset
TclientDataset
TDispatchConnection
一、 服务器
二、 客户端
Delphi中用于连接客户和服务器的是TdispatchConnection。通过它的AppServer属性,可以调用服务器上自定义的方法。TdispatchConnection派生了几个子类,分别有不同的连接特性:
1. TDCOMConnection:通过标准Windows服务,提供安全验证的核心。对于intranet/extranet应用程序尤为有用。就需要在中间层应用服务器配置DCOM的安全验证,用dcomcnfg.exe。缺点有:
难于配置,主要是在跨route或网域,分布也困难
不能很好兼容防火墙
在WIN95机器上要安装DCOM95
2. TsocketConnection:易配置,只使用一个端口进行传输。必须运行ScktSrvr进行配置。Delphi4下要求安装WinSock2,Delphi5下不使用回调,可以用WinSock1连接用户。
3. TOLEnterprisdConnection:提供内嵌的容错和负载平衡。进行容错和简单负载平衡的组件TsimpleObjectBroker。可把WIN9X作为服务器。
4. TCORBAConnection:相当于DCOM的开放标准。
5. TwebConnection:允许MIDAS在HTTP或HTTPS上进行数据传输。限制有:
不支持回调
客户必须安装WININET.DLL
服务器端必须运行IIS4.0或Netscape3.6及以上版本
客户端程序的编写可以有多种方式:
1. 主窗体为ActiveForm,调用其它普通窗体的方式。ActiveForm实际上也是一种ActiveX组件,它同时也是一个ActiveX的Container对象。这就是说它可以包含其它的组件。这样我们就可以把普通的VCL控件加入到ActiveForm中。
ActiveForm的创建和发布:
在Delphi中选New|ActiveX|ActiveForm
其中的Make Control Licensed选区项要注意,一般不选,否则ActiveForm在客户端下载时就需要License,就是要把开发机器上的License文件拷贝到客户端机器上。Include Version Information选项一般要选上,这样客户端在运行程序时就可以根据服务器上的版本号决定是否下载新的版本了。
创建并编辑完窗体后,就可以发布了。首先要在服务器上安装IIS,创建一个虚拟目录,准备放ActiveForm发布后生成的一些文件。选Project|Web deployment Options
这里是发布的各种设置。Targer dir是生成的一些文件存放在目录,Targer URL是客户机器访问服务器的URL,HTML dir是生成的ActveForm访问的主页存放目录。Use CAB file compression选项,选中时,ActveForm将打成CAB文件下载到客户端,不选中时,将编译成.OCX文件。Include file version number选项和创建ActveForm时一样,指发布时是否包含版本信息给客户端比较。Auto increment release number选项,一般要选中,这样程序每发布一次就会把版本号自动增加。这样客户端就可以比较后下载新版本。Deploy additional files选中的话,发布程序将包含Additional files页中添加的其它文件,如MIDAS.dll。
这些设置好之后,就可以点Project|Web deploy发布了。
有了一个ActiveForm,再通过ActiveForm调用普通的Form,就可以方便建立基于IE运行的application了。可在ActiveForm创建时,创建普通的窗体,再show出来,但这样,Form是独立在IE外的。如果创建同时,把Form的Parent设为ActiveForm,并设Form.visibal:=true,这样这个普通窗体就显示在ActiveForm上了。当然最后不要忘了在ActiveForm的destroy事件,把Form释放。通过这种方法,可以把任何普通的程序,转变为基于IE的应用程序。
使用ActiveForm为主的应用程序时,应为程序首次执行要下载ActiveForm,这样在某些速度较慢的网络上,要考虑ActiveForm文档的大小是否可以接受。下载时间过长,可能会造成DCOM或Socket逾时的情况。可使用Package和CAB技术使文档变小,但这毕竟有限。另外的办法是,程序员分析和设计整个应用系统,把共享的应用程序逻辑编写成企业对象,执行在应用程序服务器中,在ActiveForm下载后执行。但这样如果频繁调用大量数据,有时会降低执行效率,可能也难以接受。所以具体怎么样处理,最重要的是程序员的经验和实验。
2. 全部窗体都使用ActiveForm。ActiveForm不是直接调用,而是把要调用的ocx当作一个Internet链接来调用的。这种方式,客户端要下载大量的ActiveForm,这在一般网络上是难以接受的,所以很少采用。
3. 使用WEB方式。
因为下载和执行效率的关系,ActiveForm并不适合使用在Internet上。但一般的ASP+角本语言,也只适合简单查询多层应用系统。现今最好的解决方法就是XML+角本语言(最好是JavaScript)+企业对象+中介软件,能够满足电子商务应用的需要。
Delphi5提供功能强大的InternetExpress技术来开发分布式Web应用系统。从客户端到服务器到中介软件都可以只用Delphi来开发,而且是基于XML的。
4. 普通窗体。必须安装客户端程序,无法达到客户端免维护的要求,一般不采用。
参考文档:
l 《delphi5.x分布式多层应用系统篇》——李维
l 《delphi5.x分布式多层应用电子商务篇》——李维
l 《delphi5开发人员指南》——Steve Teixeira Xavier Pacheco
l 一并感谢Internet上众多优秀的DELPHI程序员们