2009年1月12日星期一

面向服务开发的七项原则

1. 动态的服务替代了静态的组件
构建一个Web服务不仅仅是像传统的组件开发期望的那样创建具有特殊功能的软件。一个W
eb服务的Web服务描述语言(WSDL)文件动态地描述了Web服务的功能。所以,开发人员只
需要指出在哪里找到WSDL文件,这样调用Web服务的软件在运行时就可以找到对服务功能的
描述。该原则要求在运用Web服务的系统中显示逻辑层同商业逻辑层和持久(persistence
)逻辑层分离开。当开发人员构建一个Web服务时,他们可能不知道那个服务是如何被调用
的、或者Web服务使用者的用户界面将是怎样的。一个Web服务架构师不能将商业逻辑和显
示逻辑结合起来。

2. 服务呈现(Exposure)和响应(Reflection)替代了传统的系统集成
当今的系统架构师根据系统级的需求来集成项目。架构师计划各种组件应该如何集成。作
为这种top-down方法的替代,面向服务的开发采用了一种bottom-up的方法。在任何系统结
构形成前,系统中的每个组件都呈现成一个Web服务。然后,每个服务(查询一个服务自己
的功能)给外部系统提供它们访问服务所需要的信息。

在构建一个系统时,Web服务架构师首先考虑系统的需求,并进行服务装配。在服务装配过
程中,架构师访问服务的动态描述,它们只代表了实际的API的一部分。然后,架构师确定
系统的结构,即使在运行前,单独的组件及其接口并没有被完全地描述。

3. 为广泛的适用性编写代码替代了为可重用性编写代码
为可重用性编写代码是面向对象编程的一个重要的特点。实际上,对开发人员来说,编写
可重用的代码可能比为单独用途的应用程序编写代码更具挑战性。因此,灵活的软件方法
(如Extreme Programming(XP))就避开了可重用性。在XP中,如果外来的功能进入到代
码中,那么开发人员就重新编写、或重构(refactor)代码,直到它尽可能地简单。

虽然重构可以形成一些重用的方法,因为最终代码满足很多情况,但这种方法同传统的为
可重用性编写的代码不同,因为它的目的是创建灵活的和广泛适用的代码。重用性和广泛
适用性的代码的区别是很小的,但它们却是面向服务的开发过程的本质。最好的方法就是
把面向服务开发的结构性原则同灵活的开发原则结合起来。

4. 特别的升级替代了单独的组件(Disruptive)升级
模块性是面向对象编程的另一个基本的原则。如果系统是模块化的,那么构成系统的单独
的组件就可以被升级或替代,而不影响系统的其它部分。不幸的是,在如今的企业组件结
构中,模块性在很大程度上是个谜。
当然,问题是在一个复杂的系统中替换或升级组件并不像人们期望地那样简单或便宜。We
b服务呈现了动态服务描述,而不是简单地呈现APIs。如果根本的API发生改变,服务描述自动调整,系统的其它组件在运行时可以根据变化做出调整。

5. 可扩展性采用Bottom-Up式设计过程,而不是Top-Down式设计过程
可扩展性比随处添加一个附加的服务器要复杂多了。首先,架构师要预测使用模式并为负
载平衡和故障转移(failover)做计划。然后他们必须设计系统以避免出现瓶颈问题。这
种用于可扩展性的方法就是top-down式的,因为它首先从企业级角度考虑了潜在的系统交
易模式。

然而,在一个完全实现了的具有Web服务的环境中,可扩展性应该是以bottom-up模式来处
理的。架构师可以设置UDDI注册来提供备份Web服务清单,主要是为了可扩展性和故障转移 。如果一个系统遇到未预料到的交易,它就可以自动在注册文件中找到备份服务,得到它们的服务描述,然后很快绑定到附加的服务上。

6. 平台依赖性为平台不相关性让步
企业系统开发的基于组件的方法就是在平台上构建组件,并通过它们的接口来呈现它们的
功能。本质上,组件就像踢球的足球运动员,平台就像球场。因此,如果俩个球员在不同
的球场,那么他们之间的交流就会很困难。
面向服务的方法采用的观点是,整个软件环境是由动态描述的服务组成的,在需要的时候
,它们可以很快地被找到并调用。要注意,平台在任何时候都不会很快被抛弃,这是很重
要的。Java 2 Platform、Enterprise Edition(J2EE)和.NET将转移到用户所处的外围,
这些平台提供了必要的底层框架来编写和运行Web服务,并提供了用户需要访问那些服务的接口支持。面向服务的争论的中心议题只会是Web服务,它们是以XML为基础的。

7. 软件的松藕合(Federation)替代了紧藕合(Dictatorship)
Web服务的松散藕合解决了带有严格APIs的基于组件的结构中紧密藕合的许多问题。但是,
面向服务开发的松散藕合原则对企业软件的传统的、紧密藕合的世界还有更深远的影响。
运用松散藕合,架构师就可以通过组合Web服务的动态描述的集合来创建企业软件。软件供应商将提供服务的松散藕合。随着时间的推移,由于开发人员进行了特别的升级,构成这
种企业包的各种Web服务将一天一天地发生变化,通过根据需要装配另外的Web服务,在运 行时,系统就会不断发生变化。

没有评论:

发表评论