软件项目实训及课程设计指导——如何在基于面向服务系统架构设计的项目中应用WebService技术(下篇)
6、Web服务组件在开发中常应用的各种设计模式
(1)在Web服务组件具体开发中常用到的设计模式
GOF设计模式在设计Web服务组件时可以起到“调适不同的接口”、“隔离不同的功能组件”和“统一请求的入口”等方面的作用。在Web服务组件具体开发中,常用的GOF设计模式如下:
1)适配器(Adapter)模式:为内部系统提供一个不同的接口
2)门面(Fa?ade)模式:封装复杂的内部实现,提供一系列简单的接口
3)代理(Proxy)模式:作为其他对象的代理,代替它提供服务
(2)应用适配器模式调适不同平台下的Web服务组件
适配器模式可用于将一个现有软件应用系统的业务功能组件的接口转化成对外的Web服务组件所需要的目标接口,以满足Web服务组件对外及其客户端的需要——此时的适配器功能组件类(Adapter),其实是一种转换器角色的组件;适配器设计模式中的适配器功能组件类也能够使原本无法在一起工作的两个业务功能类能够在一起工作——此时的适配器功能组件类,其实是一种组合转换器的角色的组件。如下示图中的UML类图体现组合适配器(对象适配器)中的各个类之间的关系。
一个典型的应用场景就是将原有的企业应用系统包装成一个Web服务组件。比如可以将原有的一个C++的企业应用系统转换为满足J2EE技术平台的需要,然后再通过J2EE平台中的WebService技术实现的支持,将它发布为Web服务组件。
这只需要利用JNI(JavaNativeInterfaceJava,本地接口)技术做一个适配器功能组件,为原来的C++组件提供一个Java程序访问的接口,然后再转化为Web服务组件。
(3)应用门面模式包装不同的业务功能组件以提供一个统一的对外服务接口
由于企业应用系统是多层次的,在构建Web服务功能组件时,通常会存在以下的问题:
1)各个组件的层次联系过于紧密,特别是Web服务功能组件和系统中的其它的业务功能组件具有较强的依赖关系;
2)Web服务的客户端需要访问多个不同形式的Web服务组件,多次的网络请求和响应将导致出现Web性能方面的问题。如何减少网络连接次数和实现批量的读写操作?
3)需要对Web服务组件提供一定的安全控制机制,使得Web服务的客户端不能随意访问部署在Web服务器端不同的Web服务组件。
门面设计模式常用于构建粗粒度的对外功能服务,并包装内部的细粒度的功能服务,从而为复杂的Web服务组件系统提供一个简单的对外接口;另外,应用门面设计模式构建Web服务组件系统还可以重用已有的企业应用系统中的各个功能组件并分布为Web服务,降低Web服务组件系统的开发成本。从如下示图所示的体现门面设计模式中类关系的UML类图中可以了解到门面模式是在客户端和后台系统之间插入的一个中间层组件,这个门面中间层组件跟后台的多个类或接口打交道,而客户端只需要跟门面中间层组件进行交互。
因此,通过应用门面设计模式中的门面类型组件达到将使用端(Web服务系统中的客户端访问者程序)与Web服务器端子系统或者Web组件的内部复杂性交互相互分隔,从而使得使用端只需要与门面组件对象交互,而不需要与Web服务器端子系统内部的很多对象交互。
(4)应用代理模式
代理模式可以实现为其它对象提供一种对目标对象访问的代理,以控制对这个目标对象的访问——如提高访问的性能或者安全性等。代理模式中的代理组件类实现将业务处理工作从一个对象传递到另一个对象。熟悉Struts2MVC框架的读者对代理模式应该不会感到陌生感,因为在Struts2框架中应用代理模式实现前端控制器FilterDispatcher和后端业务控制器Action类之间通过ActionProxy代理组件相互隔离。如下示例图为Struts2MVC框架的工作原理图。
在Web服务组件系统的开发中存在大量的后台技术实现的细节和各种消息的数据结构,而如果直接公开这些复杂的数据结构和实现过程的细节给Web服务客户端的访问者,将会增加客户端访问者的技术实现的难度。
因此,有必要简化和隐藏这些技术实现的细节(如隐藏SOAP消息构造的过程)——这可以应用代理模式实现。而且代理组件可以代理多个不同的Web服务组件,如下为体现多代理的工作原理示例图。
7、WebServices技术在应用中所面临的主要问题
(1)WebService技术在应用中的安全问题
在WebService技术在具体应用时的安全问题主要体现为如下的三个方面:
1)对Web服务的客户端的身份验证和Web服务提供者的确认
应用统一身份认证服务,尽管WebServices技术在实现不同系统和不同平台之间的互联和整合方面能够大大地简化实现代码,但是,每个应用系统本身都有其自身的用户系统和认证方式。这将导致开发人员在为某个软件应用系统编写接入其它应用系统的功能代码时,增加了其实现的复杂度。
2)SOAP数据的传输和保护
由于SOAP协议的数据是基于XML明文传输,而且SOAP协议本身是在HTTP基础之上的协议。因此,如何有效地保护SOAP数据的传输,也是目前要解决的WebService技术安全的另一问题。
当然,可以应用SSL/HTTPS对连接加密,而不是直接传输明文数据;对XML数据本身加密和数字签名等技术手段改善这些问题。如下图所示例图为某个软件应用系统中的Web服务组件的接口描述的WSDL代码示例的局部截图,明显地发现出直接传输明文数据。
3)Web服务组件所在的底层系统的安全架构
如何提供可信任与授权的完整的安全构架,以确保基于WebService技术的系统的安全运作。
因此,如何解决WebService技术在具体应用中相关的各种消息数据的保护等Web服务安全有关的问题——身份验证、授权和数据保护?这还包括采用什么技术实现?
(2)Web服务组件的响应性能和数据处理的效率
在Web服务中至少有三个主要的因素与性能有直接关系,并影响到系统访问的总体性能:
1)网络交易时间:客户端请求者需要向远程Web服务发出请求。
2)处理消息所花费的时间:这包括对XML数据的解析、业务流程的管理、Web服务本身的调用以及对最终响应结果的XML编码化工作。
3)Web服务组件本身的程序所代表的业务功能处理在执行时所需要的时间,比如Web服务组件本身需要访问Web服务器端的数据库系统或者再去访问其它服务器获得业务相关的数据等,此时Web服务客户端将花费更多的等待时间。
其次,WebServices本身的性能是非常严重的——由于需要对基于SOAP协议的XML格式的数据实现序列化和反序列化等形式的转换是非常耗时的;另一方面,XML数据是文本格式,XML文件的膨胀将会导致网络的传输数据量加大而出现网络IO传输性能低下。
作者后记:
面向服务的软件系统体系架构设计方法在目前的企业级应用系统的开发实现中将会面临着模块化和标准化两大问题,其中在标准化方面需要解决如下的一些问题——如何形成标准?以谁(哪个企业)为标准?应该要遵守哪些标准?