在三层应用程序中,用activeForm作客户端界面,应注意的问题(50分)

  • 主题发起人 主题发起人 webccwebdfw
  • 开始时间 开始时间
W

webccwebdfw

Unregistered / Unconfirmed
GUEST, unregistred user!
我打算在三层应用程序中,用activeForm作客户端界面,主要解决客户端动态生成界面的问题
请问,应注意的问题,或是在客户端是否适合用activeForm(效率各方面是否有问题)?
 
1. 引言
传统的客户机/服务器一般为二层结构,这种结构的胖客户端现象给软件的维护、管理等带来许多困难。而企业规则的变化会使得管理信息系统做很大的改变。现在为适应网络的发展,三层或N层结构的客户机/服务器模式开始出现并为大多数开发人员说接受,特别是B/S方式更适应网络的发展,本文将介绍使用Delphi和Oracle进行B/S方式的开发。
2. B/S的基本结构
三层B/S结构将应用的三个部分明确的分开:表示部分、应用逻辑部分、数据访问部分。这三个部分在逻辑上独立的分开,分别加以实现,称之为:客户端、应用服务器、数据库服务器。而在客户端和应用服务器之间加入一个WEB服务器,就形成了一种特殊的B/S结构——Browser/Server,只在客户端安装一浏览器软件即可。客户端使用Internet Explore时,就可以让Internet Explore变成为能够处理数据的应用系统。B/S结构如图1所示:
图1 B/S结构示意图

一般情况下,为了能够适应客户机数目的增加和应用处理负荷的变动,将应用
服务器和数据库服务器分开来,这样企业在增加新的应用逻辑时,可以增加新的应用服务器。这样,有多个应用服务器同时运行时还有负载平衡能力。
3. B/S 各部分的功能
(1) 客户端IE浏览器
IE是用户与应用服务器的接口部分,负责用户与应用程序之间的交互。用来访问ActiveForm 组件的首页,并在第一次使用ActiveForm时自动将其下载到客户端。程序利用ActiveForm接受用户的输入、请求,发送到应用服务器端,应用服务器将处理结果以适当的形式返回给用户。
(2) Web服务器
Web服务器是用来连接IE浏览器和应用服务器的,是应用服务器的辅助部分。
(3) 应用服务器
应用服务器是应用逻辑处理的核心,它是具体业务的实现。所有的应用逻辑和企业规则都写成企业对象,放在应用服务器端。这样可实现真正的瘦客户端。为了减轻网络负载,提高执行速度,应用服务器和客户端之间的数据交往要尽量简洁,客户端将请求信息发送给应用服务器,应用服务器在和数据库服务器之间交互后,将处理的结果返回给客户端。
应用服务器一般和数据库服务器有密集的数据交往,应用服务器向数据库服务器发送SQL请求,数据库服务器根据SQL语句对数据库进行操作,然后将所的结果全部返回给应用服务器。这样二者之间的数据交换量很大,为了避免因负载过大影响网络速度,一般要将应用服务器和数据库服务器放置的尽量近一些或者是都放在同一台较好的机器上。
企业如果因某种原因使得某些企业规则发生变化,只要在应用服务器上改动一下即可,客户端不受影响。如果需要增加新的企业规则或者是企业应用逻辑变的复杂,可以增加新的应用服务器,它可以与原来的应用服务器在同一台主机上或者是在不同的主机上。
(4) 数据库服务器
数据库服务器一般是基于SQL语言,并具有客户机/服务器结构的关系型数据库管理系统。主要用来完成数据的存储、数据的访问、数据的完整性约束及用户角色的控制等。
4. 多层B/S结构的优点
(1) 具有可伸缩性
因为多层结构在硬件实现上是相互独立的,各部分可以各自选择与自己处理负荷和特性相适应的硬件,而不受其它部分的影响。在开始可以将应用服务器与WEB服务器放在一起,随着企业规则的增加和应用的发展,可以追加一台或多台主机作为应用服务器。
(2) 可维护性强
因为企业的规则和企业逻辑都放在应用服务器上,因此当企业规则或企业的逻辑发生变化时,只需在应用服务器端做修改即可,一处变处处变,使得维护工作量减少,维护费用降低。此外,由于各层是相互独立的在程序开发阶段可以实现并行开发,客户端只关注用户访问界面,并与其它客户共享相同的数据库访问模块,从而使客户端大大变瘦,实现瘦客户端,维护起来相对简单。
(3) 安全性
对二层结构来说,一方面企业的事务处理逻辑包含在客户端应用程序中,未经授权的用户很容易通过应用程序侵入系统,另一方面,授权的用户拥有连接数据库的权限,他可以使用自己的数据库访问工具连接到数据库对其进行操作,他们对系统的安全带来很大的隐患。对多层C/S结构来说,企业的应用逻辑和企业的规则大部分放在应用服务器端,最终访问数据库大多也是由应用服务器来完成,对用户来说是透明的。客户端不能直接访问数据库服务器,有效的防止用户的非法入侵,这样保证了系统的安全性。同时,企业模型运行在独立的计算机上,可以对企业模型、企业规则做更加严格的保护。
(4) 更能适应Internet发展趋势
随着Internet的发展,企业的运作越来越离不开网络。采用多层的客户端/服务器模式,既能提高企业的工作效率,又能适应Intenet发展的需要。
(5) 对事务进行更有效的管理
所有在客户机上对于企业模型的操作都反映到应用服务器上,可以统一的对所有事件进行管理,并进行记录。
5. 依据实例来实现
多层B/S结构有很多实现的方式,最直接的方式就是选用支持三层C/S结构的数据库前台开发工具,例如Delphi 5.0。考虑到所有客户端界面的一致性和Internet的应用,采用多层的Browser/Server结构来实现,形成浏览器—Web服务器—应用服务器—数据库服务器的结构,这种结构实质上是对三层结构的扩充,形成多层结构。下面介绍一下使用Delphi 5.0的ActiveForm技术来实现扩充三层结构的方法。
开发一个多层结构的应用程序的基本步骤如下:先建立一个应用服务器程序,在应用服务器运行着的前提下,建立客户端应用程序。最后使用Delphi5.0的ActiveForm技术对客户端应用程序进行包装,生成一个OCX控件和标准的HTML文件。然后通过Web服务器将HTML文件链接到公司或者是局域网的主页上,就可以通过浏览其来完成客户端的所有操作了。
(1) 在应用服务器端建立数据库别名
先使用Oracle的客户端SQL*NET建立一个与Oracle服务器的连接名Connection1,然后在Delphi的BDE内新建一个数据库别名Database1,把它的sername设置成Connection1,在用户名内填写Oracle数据库的一个用户,刷新一下即可建立一个连接到数据库的数据库别名。
(2) 建立应用服务器程序
首先用File|New…打开选项板,在选项板上的Multitier选项页上,选择Remote Data Module,然后点击确定按钮。在CoClass栏内填写你的远程数据模块的名称,在Intacing和Threading Model栏内的名称选默认选项,点击确定按钮。这时会有一数据模块出现,您可以在数据模块里面加入Ttable、Tquery、Tdatabase和TdatasetProvider控件,然后将Tdatabase与数据库相连,将Ttable或Tquery控件与数据库中的表相连,最后把TdatasetProvide和数据集控件连接起来。在应用服务器端Tprovider控件提供Iprovider接口,用于与远程客户端的数据信息交互。把做成的应用服务器运行一下,系统会自动注册应用服务器,这样一个最基本的应用服务器就做成了。
(3) 建立客户端应用程序
多层结构的客户端应用程序与一般的应用程序基本相同。首先用File|New…打开选项板,在选项板上的New选项页上,选择Application然后点击确定按钮建立一个工程。在新生成的Form 上添加TclientDataset控件、TsoketConnection控件和TdataSource控件,然后在Form上放一些数据感知控件例如TDBEdit控件或TDBGrid控件,用来显示数据。把TclientDataset的RemoteServer属性设成SoketConnection1,把 ProviderName属性与应用服务器的TdataSetprovider控件相连.TsoketConnection控件的Host属性填上应用服务器主机的IP地址,把ServerName属性设成远程应用服务器的名称。把TdataSource控件的DataSet属性与Tdatasource控件相连,数据库感知控件的DataSource属性设成Datasource1。
在客户端,有TsoketConnection控件与应用服务器相连接,TClientDataSet为用户提供数据集,与二层结构中的Ttable、Tquery控件的作用相类似。各个控件之间的关联关系如图2所示:
图2 控件之间的关联关系
(4)使用ActiveForm进行包装
① ActiveForm事实上也是一种ActiveX组件,只是ActiveForm本身也是一个ActiveX的Container对象。这个意思是说ActiveForm之中还可以包含其它的组件,而ActiveForm和它包含的组件可以整个变成一个OCX类型的组件,再使用于Internet Explore这个COM/ActiveX container应用程序之中。因为ActiveForm可以包含任何Delphi中的VCL组件,所以程序员可以建立一个拥有数据感知能力的ActiveForm组件。而且这个ActiveForm组件可以使用于任何一个支持ActiveX的开发工具之中,当然也包含使用于IE浏览器中。由于ActiveForm可以具有处理数据的能力,所以当它使用于IE浏览器时,就可以让浏览器变成可以处理数据的应用系统。这样,我们就可以利用ActiveForm的这一特点开发多层的应用系统,而且客户端只需要安装IE浏览器而不需要安装任何的数据库引擎和ODBC驱动程序以及任何BDE别名和ODBC数据来源设定的数据库应用程序。
在包装前,先建立一个ActiveForm的项目。首先在Delphi中关闭所有的项目,接着选择File|New于New Item对话框中选择建立ActiveForm,此时Delphi会弹出一对话框显示有关本ActiveForm的信息,在ActiveForm Wizard对话框中必须输入这个ActiveX组件的名称。此外还有一些选项要程序员选择,在使用ActiveForm时,最好将版本信息选项选中,因为版本信息可以让程序员控制客户端ActiveForm的新旧版本,又是IE决定是否动态的下载ActiveForm到客户端的重要依据。
② 在产生了空白的ActiveForm窗体之后,请设定这个窗体的长和高与客户端应用程序的主窗体的长和高相同,然后拷贝原先客户端应用程序项目的所有档案到ActiveForm项目的目录之中。
做完以上工作后,就需要编写一些代码了。先在ActiveForm 的程序单元中Users客户端的主窗体。然后在ActiveForm中声明一个变量,这个变量是客户端主窗体类别的对象变量,如果客户端主窗体类别的对象是Tform,下面的代码是声明主窗体的对象变量:
FMainForm:TForm;
接着为ActiveForm建立OnCreate事件处理函数,并且在OnCreate事件处理函数中编写如下的程序代码:
Procedure TActiveForm.ActiveFormCreate(Sender: TObject);
begin
FmainForm:=TForm.Create(Self);
FMainForm.Parent:=Self;
FmainForm.Align :=alClient;
FmainForm.BorderStyle :=bsNone;
FmainForm.Visible :=True;
End;
最后再编写OnDestroy事件的函数,OnDestroy事件的函数的代码如下:
Procedure TActiveForm.ActiveFormDestroy(Sender: TObject);
begin
FmainForm.Free;
End;
我们在做完以上工作后,就可以编译这个ActiveForm项目。等编译通过,说明我们的ActiveForm组件已经可以使用了。
(3) ActiveForm项目完成后还要进行对其分发。程序员在集成开发环境中选择Project|Web Deployment Options…弹出一对话框,其中Target Dir是ActiveForm分发的目的地址,HTML Dir是存放HTML首页档案的地址,Target URL是此ActiveForm组件位于HTML首页中Codebase tag的位置,这三项必须填写好。此外,下面的选项信息有一些最好也要选种例如:Auto incement release number和Include file version number选项。这是用来自动增加版本信息的。
在完成上面的工作后,就可以选择Project|Web Deploy开始分发ActiveForm组件到指定的位置,如果不出错误,我们就可以看到一个HTML首页的文件。把该文件连接到公司的主页上即可使用。
6. 结束语
随着Internet/Web技术的兴起,以B/S模式为基础通过浏览器访问数据库的新型企业管理信息系统将成为当前研究的热点。而用ActiveForm技术进行开发,使得整个开发过程变的更加简便,可操作性更强。
 
to:cwmdelpher
非常感谢您热心的帮助,不过好象和我说的不太一样。
我目前主要解决采用c/s三层结构,客户端采用activeForm即ocx,主要为了实现
显示界面,如管理员显示manager.ocx,sales.ocx等,让不同权限的人具有不同界面
同时,客户端启动时可以根据ocx的版本号,进行动态升级。
再次感谢您的帮助。
 
效率方面如果是局域网,一般没什么问题,以前做过B/S的,只是第一次下载较慢
 
以前做过这种东西,.OCX 根其他普通程序没什么区别,注意点主要是在ActiveForm嵌入
IE中,设置不好的话,有时会出现一些问题。
1、注意Activeform的发布,要把有关文件发布到服务器上,否则客户端无法下载插件。
2、注意IE安全属性的设置,一般要把安全设置偏低一些,否则不可下载。
3、通过Delphi的OpenDialog、SaveDialog控件在Aciveform中得到的文件路径是
错误的,需要用其他的方法获得。
其他的好像也没什么了,主要是注意插件的下载。
 
后退
顶部