微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
2000　No.19　No.1　P.51-52




基于3层C/S结构的管理信息系统开发
于华
摘 要： 在分析传统2层C/S结构局限性的基础上，简要介绍了3层C/S结构的概念、特点以及基于这种结构的管理信息系统的开发方法。 
关键词： 3层C/S结构 管理信息系统 组件 ActiveX
1 传统2层C/S结构的局限性
　　随着计算机技术、网络技术和数据库技术的发展，MIS的开发平台从单一的体系结构、主机结构、PC－LAN的文件服务器结构发展到90年代以来较为先进的客户/服务器（C/S）结构。这种模式将应用一分为二，服务器负责数据管理，客户机完成与用户的交互任务，从而在主机模式和文件服务器模式中找到了平衡。然而，随着企业规模的日益扩大，应用程序的复杂程度不断提高，这种传统的2层C/S模式也逐渐暴露出许多问题，已不能适应不断增长的多方面需求。主要体现为以下几点：
　　（1）可扩展性差。它是单一服务器且以局域网为中心的，所以难以扩展至大型企业网或Internet。
　　（2）软硬件的组合及集成能力有限。
　　（3）难以管理大量的客户机。
　　因此，3层C/S结构应运而生。
2 3层C/S结构
　　3层C/S结构是将应用功能分成表示层、功能层和数据层3部分。这些层并不一定与网络上的具体物理位置相对应，它们只是概念上的层。一般情况是将表示层配置在客户机中，功能层和数据层既可以分别放在不同的服务器上，也可以放在同1台服务器上。典型的3层C/S结构如图1所示。

图1 典型的3层C/S结构
　　1．表示层（客户端服务程序）
　　表示层提供可视化的用户接口，它担负着用户和应用间的对话功能，用来表示信息和收集数据。它一般是使用快速应用开发（RAD）工具创建的。以微软的产品为例，当用户服务表现为Windows应用时，往往是用Visual Basic、Visual Foxpro、Visual C＋＋等编写出来的可执行程序。当用户服务表现为Web应用时，往往是用FrontPage或MS Visual InterDev写出来的HTML、DHTML网页或Active Server Page。
　　2．功能层（业务服务及其它中间层服务程序）
　　功能层相当于应用的本体，它是将具体的业务处理逻辑地编入程序中，是联系表示层和数据层的“桥梁”，它响应用户发来的请求，执行某种业务任务，并对相应的数据进行处理。用户不需要直接与数据库打交道。在实际应用过程中，功能层部件通常可分为2个以上的层次，因此这种模型也被称为多层次结构。
　　3．数据层
　　数据层就是数据库管理系统（DBMS），负责管理数据的定义、维护、访问和更新，以及管理并响应业务服务的数据请求。
　　DBMS必须能迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统。将数据服务和应用程序的其它组件分开，在维护、修改甚至重构数据结构及访问机制时，可以丝毫不影响业务服务程序和客户端程序。
3 3层C/S结构的特点
3.1 优越的系统性能
　　2层C/S结构是一种胖客户型，即数据计算和数据处理集中在客户端，这种系统的网络负荷大，直接影响业务处理的速度。在3层C/S结构中，数据计算和数据处理集中在中间层部件，因而3层结构系统能够实现分布计算功能。具体地说，可以根据需要把各个部件分别或重复地分布在不同的计算机上，使整个系统的工作量平衡分配到网络中。
3.2 具有灵活的硬件系统构成
　　对于各个层可以选择与其处理负荷和处理特性相适应的硬件。例如，最初可以用1台计算机作为服务器，将数据层和功能层都配置在这台服务器上，随着业务的发展，用户数和数据量逐渐增加，就可以将这台计算机作为功能层的专用服务器，另外追加1台专用于数据层的服务器。若业务进一步扩大，用户数进一步增加，则可以继续增加功能层的服务器数目，用以分割数据库。清晰、合理地分割3层结构并使其独立，可以使系统构成的变更非常简单。
3.3 提高系统的可维护性
　　3层C/S机构中，应用的各层可以并行开发，各层也可以选择各自最适合的开发语言。采用基于组件的开发方法，也使系统的维护和升级更加容易。对系统的修改或升级可简化到只对某个特定部件的更换。
3.4 进行严密的安全管理
　　越是关键的应用，用户的识别和存取权限设定越重要。在3层C/S结构中，对应用和数据的存取权限可以按层进行设定。这样，即使外部的入侵者突破了表示层的安全防线，若在功能层和数据层中备有另外的安全机构，系统也可以阻止入侵者进入其他部分。
3.5 开放性
　　在3层C/S结构中，客户端程序和功能层部件可用VB、VC、JAVA以及其它各种支持ActiveX的开发工具开发。由于采用ActiveX技术，每个功能层部件都有标准的接口，这样就可以将系统中的一些部件接口，提供给客户进行2次开发，客户可以重写自己的客户端程序和自己的浏览器程序，也可重写满足特殊需要的功能层部件，此外还可添加新的部件。
4 基于3层C/S结构的应用开发
4.1 基于组件的应用程序开发方法
　　使用3层结构模型可以将应用程序的需求分解成明确定义的服务，然后创建具体的物理组件来实现它们。根据性能和维护的需求、网络带宽以及其它因素，可以在网络上灵活地部署这些组件。
　　这种基于组件的解决方案将应用程序的开发分成2大类任务。1类任务是开发能被很多程序使用的核心组件（ActiveX控件和服务器、存储过程等）；另1类任务是集成这些核心组件，象搭积木一样将它们组装在一起，构造出特定的业务解决方案。组件的组装模型如图2所示。

图2 组件的组装模型
　　与传统的应用程序开发方法相比，基于组件的方法具有以下优点：
　　（1）能够使用多种语言工具（如：Visual Basic、C/C＋＋、SQL或其它工具）编写可重用组件，这样程序员就不会被束缚于单一的语言或工具，能够使用他们所熟悉的、最适合特定任务的语言和工具；
　　（2）创建能够被很多应用程序使用的通用组件，可大大减少开发的开销。组件的使用者不需要知道组件的内部结构，只需要理解与它们之间的接口，这样就能够以最少的开销开发尽可能多的应用程序；
　　（3）组件可以部署在网络上，从而取得效率、性能和安全、维护上的最大利益。
　　通常，基于部件的应用程序开发过程包括以下步骤：
　　（1）确定应用程序的需求；
　　（2）把这些需求映射成抽象的业务对象以及它们提供的服务；
　　（3）把业务对象及其服务映射为软件组件；
　　（4）在网络上部署这些组件。
4.2 用VB和ActiveX组件进行企业开发
　　目前，组件分为二大类，一类是由微软推出的ActiveX，另一类是Sun的JavaBean。ActiveX可以做到操作系统级兼容，即在Windows平台下运行，支持Windows平台下的各类开发工具，如Visual C＋＋、Visual Basic、Visual Foxpro和PowerBuilder等等；JavaBean在所有支持Java的平台上皆可运行。ActiveX和JavaBean的区别其实就是性能与平台无关性的区别。在目前的商业软件中，ActiveX的应用更为广泛。
　　当分布式应用通过网络进行通信时，ActiveX可以使用2种不同的机制对客户请求作出响应：分布式组件对象模型（DCOM）和远程自动化（Remote Automation）。这二种分布式机制都有着与组件物理位置无关的特点。也就是说，当用Visual Basic创建ActiveX组件时，无需知道它将分布在哪台机器上。同样的组件，既可以将它放在本地机，也可以将它分布在其它机器上而不需要重新编译。这样，根据网络的性能和网络结构的变化，我们可以方便地调整组件的分布策略。
　　ActiveX标准非常适合为企业级的客户/服务器系统构造分离的组件：
　　（1）构造远程组件和构造本地组件的编程方法一模一样，无须特殊的编程经验。
　　（2）可以用ActiveX组件在服务器端实现复杂的商业规则，比起用DBMS（如SQL Server）来具有更好的编程、维护和排错手段。
　　（3）ActiveX组件可以自行开发，也可以购买商业组件，现在有越来越多的商业组件可以购买，所以我们只需要将特殊的商业规则开发成组件。
　　由此可见，在创建企业级的客户/服务器系统应用时，ActiveX组件是基本工具。
　　目前，用3层C/S结构开发的应用还不太多，一般在下列情况下应考虑采用3层结构。
　　（1）应用是用不同语言编写的；（2）有2个以上的异构数据源；（3）高工作负荷；（4）应用的生命周期较长等等。
　　从传统的2层C/S型应用过渡到3层C/S型应用时，要考虑时间和费用问题，需要循序渐进。
于华（山东财政学院计算机信息工程系250014）
收稿日期：1999－09－14
