面向对象的多层次结构开发模式
 

2009-10-16 作者:易学明、曹克虎、李强 来源:ccidnet.com

 

◆传统的开发结构

直至九十年代初,大部分商业应用系统的开发都是采用集中式开发架构。这种集中式开发结构一般都属于特定的专有体系结构,缺乏开放性,且其处理方式基本上是非分布式的,中央主机的负担很重。另外,一些规模不大的mis系统采用的是文件服务器开发方式。在这种方式下,工作站与文件服务器之间相互传输的是整个文件,随着数据的积累,网络负担越来越重。当网络用户增加,超出网络并发响应能力时,便会产生数据传输瓶颈,整个网络性能就会严重下降。

九十年代中期,随着微型机计算能力的大大增强和网络技术的迅速发展,一种新的计算架构——客户机/服务器模式应运而生。对于数据库系统,客户机/服务器体系结构体现为:数据的应用和数据的存取分别由客户机和服务器执行,客户机用来把数据“表现”给用户,主要处理界面的功能;而服务器则作为后台,集中于完成数据的处理、存储、检索等功能。当用户需要访问数据库时,通过系统提供的应用程序接口(api),把数据库访问请求提交给服务器。驻留在服务器的dbms接到请求后,负责完成数据库的访问,并将访问结果返回给客户机。这种计算结构在网上传输的只是客户请求命令、服务响应以及数据记录,而不是整个文件,因此网络上的信息流量大大减少,有利于解决数据处理和数据传输的瓶颈问题,在一定程度上也减轻了服务器的负担,使服务器得以充分利用其较强的计算能力和数据存储能力。sybase系统就是基于这种标准客户机/服务器体系结构的典范。图1给出了标准客户机/服务器结构的示意图。

图1 标准客户机/服务器结构

标准的客户机/服务器体系结构在传统商用领域得到了许多应用,但也存在一些局限。比如说,目前大多数mis系统普遍存在这样一个问题:一旦系统的数据结构因需求变化而不得不有所改动时,前端的应用程序往往要进行大的修改。当系统较大时,前端应用程序需要很多人来写,这时,仅仅是一个表结构的变动也常常导致多个开发人员对多个模块进行修改,可以说是“牵一发而动全身”。而且,采用传统的开发结构,无论是在系统的分析设计阶段,还是在代码编写阶段,都要求每个开发人员对系统有较深的了解,这样每个开发人员不仅要熟练掌握开发工具,还要熟悉业务,开发的难度大,要求高。此外,这种结构的服务器端一般都只是在一台机器上进行处理,服务器的负担比较重。

◆多层次结构开发

事实上,大多数的应用程序都能够概括成三个不同的元素:用户界面元素、信息处理元素和数据存储元素。用户界面元素与用户进行交互,为用户显示信息、响应用户生成的事件;信息处理元素根据从用户那里接收到的命令和信息来完成程序数据的处理;数据存储元素则检索、存储以及管理由用户界面元素和信息处理元素所生成和使用的数据。图2表明了这些元素之间的相互作用关系。

图2 分布式应用程序元素

分布式应用程序将以上三个元素适当分配到多台计算机上进行处理。一方面,程序的模块化程度更高;另一方面,资源可以得到更有效的利用(web就是分布式应用程序的一个例子)。

到了九十年代末,随着面向对象技术的日益成熟和internet技术、分布式计算技术的不断发展,出现了一种新的开发模式——多层次开发模式。多层次开发模式的显著特点是推出了专门的应用程序服务器来完成独立于用户界面端和数据库服务器端的信息处理工作。作者曾以面向对象数据库versant、corba的实现软件orbix和orbixweb,以及前端的java开发工具jbuider建立了多层次的分布式开发环境,并在此基础上开发了“sdh长途电路管理系统”。

◆versant+orbix开发模式及其特点

versant是业界领先的面向对象数据库系统,orbix则是corba标准在业界的最好实现。二者都提供了在一致的、面向对象的环境下建立易于管理、功能强大的应用程序开发方法。orbix提供了灵活的分布式模型,主要是对象动作行为的分布。orbix完全遵循corba标准,可以远程激活服务器程序和远程调用对象,但是基本上不提供对象的持久性支持。versant作为一个数据库管理系统对对象的持久性提供了强有力的支持,而且实现了从数据库服务器到应用程序地址空间之间的高效对象传送,但其提供对象的分布式能力非常有限。

将orbix和versant两种技术结合起来,就可以实现分布式的corba对象在面向对象数据库中的持久性存储。结合这两种技术,一方面,由于利用了corba服务器程序的可远程激活的特点以及corba对象的可远程调用执行的特点,用户界面端可以与corba服务器灵活地通信;另一方面,corba技术和versant技术的结合可以实现corba对象的持久性存储,同时,corba对象的分布式计算能力使应用程序的处理功能可以在多个服务器上进行分布。因此,利用corba分布式对象技术,我们就可以在传统的客户机/服务器模式中再加入一层专门用于信息处理的应用程序服务器,从而形成三层的开发结构(如图3所示)。

在图3所示的利用versant 和orbix开发的三层结构模式中,用户接口层作为orbix 的客户端进程,它可以远程激活服务器程序,也能远程调用orbix 服务器进程提供的对象。该层只需安装orbix的客户端软件,而不需要安装数据库的客户端软件。用户接口层的开发语言可以任意选择,不受其他层的影响,如采用c++、java、powerbuider和visual basic等。它与中间层的通信采用corba的标准通信协议——iiop协议,因此,尽管前台与中间层的开发语言不同,使用平台也可能不同,却不需要进行复杂的网络编程。

中间的应用程序层既作为orbix的服务器进程,同时又是versant的客户端,它利用versant来提供对象的持久性支持。该层需要安装orbix的多线程版本——orbix mt以及集成了orbix和versant的适配器软件——orbix+versant adapter(ova)。当用户接口层的程序接收到用户通过交互式界面发出的数据请求时,用户接口层的程序就通过标准的idl接口去调用中间服务器提供的corba对象及其标准接口函数。中间服务器的corba进程探测某服务器程序的corba对象是否被调用,如果该服务器程序尚未启动,便会启动可能运行在另外一台机器上的服务器进程。因此,用户接口层无需知道该服务器程序具体在哪台机器上以及是否已启动,而只需根据标准接口去调用就可以了,从而实现中间层服务器程序的平台无关性和位置无关性。调用corba对象的接口函数就像调用一般的c++对象的函数一样,通过调用该corba对象的其他函数(包括该corba对象的接口函数和内部函数),实现对数据库中数据的查询和其他的处理,再将结果通过标准接口返回给用户接口层。

存储层是versant数据库服务器,中间层应用程序对存储层数据的存取是通过ova适配器软件来实现的,它可以使corba对象作为versant的持久性对象,对corba对象的属性修改可以透明地存储在数据库中。对于其他的数据库,orbix也有相应的适配器软件,用户自己也可以开发。

这种三层的开发模式能够更好地利用计算机资源,也使得开发分布式应用更加方便。

1) 用户接口层只是普通的corba 客户程序,完全与数据库无关。

对orbix客户端而言,它并不清楚也不必关心它所调用的orbix对象是否是持久的。因此,不像客户机/服务器结构那样,用户接口层不需要安装客户端的数据库连接工具。在传统的客户机/服务器结构的客户端开发中,一般要求开发人员对系统有较深的了解。当然,如果系统设计做得很好,分工很细,开发人员也可以不需要对系统有太多的了解,但是,系统设计工作要做到这种程度是非常困难的。而三层结构开发模式从逻辑上就已经很清楚地描述了各个层次的编程人员的分工。不同层次的编程人员对系统可以有不同的了解程度,用户界面的编程就基本不需要对系统有多少了解,而中间层ova应用程序的编写者事实上只负责面向对象模型的具体实现,对象模型中的一个对象类大体上对应idl标准接口的一个用户界面接口。中间层应用程序服务器的编写者只需负责对象模型的具体实现,无需考虑界面的问题,也无需考虑用户接口层采用什么语言以及什么平台去访问它。用户接口层的编写者则只需考虑界面的编程,至于所调用的标准接口是如何实现的,根本不必关心。

一旦idl标准接口根据对象模型定义好了,用户接口层的程序就可以去调用,即使这些接口还根本没有具体的实现代码;而中间层应用程序服务器的编写者可以同步编写这些接口的具体实现代码。在开发工作的逐步展开过程中,两个层次的开发者可以合作调试。这种并行开发可以大大提高开发的速度。

由于面向对象技术的类和对象的封装特性,即使对象的属性和方法的实现有些改变,用户接口层也基本不受影响,不会像传统的开发方法那样,有很大的耦合关系。此外,由于用户端只能通过中间层访问数据,本身并不直接与数据库打交道,从而可以屏蔽很多危险事件,所以系统具有更好的安全性。在本地,如果需要的话,作为corba客户端程序的用户接口层也可以连接自己的数据库,如图3中第三层的java程序,就可以通过jdbc驱动程序直接连接到sybase等数据库上。

2)由于中间层ova应用程序利用corba技术,应用系统具有很强的跨平台和跨语言能力。

中间层的ova应用程序负责处理用户接口层的用户请求,从存储层获取数据,并将必要的数据传送给用户接口层。每个应用程序服务器对于orbix 客户端而言,是一个orbix服务器,同时又是versant数据库服务器的客户端。ova是把orbix 和versant集成起来的软件,它可以使分布式的corba应用程序使用versant持久性对象和数据库,使ova应用程序的对象既是分布式的corba对象,又是持久性的versant对象。中间层的一个应用程序服务器也可以向另一个应用程序服务器发出服务请求。

这些中间层的ova应用程序可以在不同的平台上用不同语言(如java或c++)来编写,也可以在多台机器上运行,甚至不同的应用程序还可以连接到不同的数据库,实现多个数据源的集成,这种实现对客户端是完全透明的,客户端只需按标准的idl接口去调用就可以,而且对orba对象的调用是不受操作平台和语言的限制的。

3)存储层维护数据的完整性、安全性,响应中间层的请求,实现数据的存储。

versant的面向对象数据库技术提供了对象的直接存取、快速响应的功能。此外,versant能进行有规则的备份,并提供容错服务以确保系统的持续可用。

另外,我们知道,powerbuider对sybase数据库进行直接访问。当10个powerbuider用户同时访问sybase数据库时,sybase数据库至少需要10个用户的license。然而,采用corba软件作为中间件时,客户端对数据库的访问是间接的,它通过corba 的应用程序服务器去访问数据库。现在假设只有一个corba应用程序服务器程序,有10个corba的客户端。当10个corba的客户同时进行数据查询时,事实上都是向该corba服务器进程发送请求,corba服务器进程再去访问数据库。当一个corba应用程序服务器应付不了这样繁忙的客户端请求时,可以再启动一个同样的应用程序服务器进程去分担负荷。corba提供了一个可伸缩的服务器到服务器的体系结构。服务器的事务对象库可以通过corba orb进行通信,它们可以运行在多个服务器上,从而动态地平衡客户器端请求的负载。orb能够迅速地将请求交给当时可用的对象,并随着请求的增多调用更多的对象,使服务器对象协调地运行。这样,通过应用程序服务器的引入就可以节约一定量的数据库用户license。对同一个应用程序服务器的访问,也可以要求一个客户端进程或者一个客户对应一个该应用程序服务器的进程来专门处理其请求,这时的情况,就类似powerbuider用户对sybase的访问,一个客户进程就需要一个用户license。

◆面向对象的系统分析、设计与建模

在采用多层次的开发结构时,我们可以注意到,无论是前端的java客户程序、中间层的corba服务器程序,还是后台的versant数据库,都采用面向对象的思想和方法。如果开始阶段的系统分析、设计和建模再采用传统的结构化系统分析与设计方法,就会显得不太协调和自然。为了避免在开发阶段进行不同意义上的转化,多层次结构的开发最好采用面向对象的方法。通过对现实世界的分析,构造出适当的面向对象模型,使应用域和计算机域的对象都使用统一的概念,使系统分析、设计和各个阶段实现都使用同一概念表示,实现全过程的面向对象开发。在采用面向对象的方法进行设计和编码过程中,系统开发人员强调的是围绕对象而不是围绕功能构造系统。当系统中的功能发生变化时,一般来说原来的对象还是存在的,且只是围绕这些对象的一些属性和操作发生变化,这时,只需要修改和增加一些对象的属性和操作就可以,对象的基本结构并不发生变化。对用户而言,对象内部方法的实现和一些变化并不重要,他只需通过确定的输入或命令对对象进行操作,获取所需的结果,从而增强了系统的灵活性。

在传统的客户机/服务器结构的基础上引入专门的应用程序服务器,从而构成多层次结构开发模式,这是一种全新的开发模式。随着面向对象技术、分布式计算、分布式对象技术的日益成熟和发展,这种新型的多层次结构开发模式必将具有更广阔的应用前景。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织