面向服务开发的七项原则 [转]
未来的软件结构要求有一套新的开发方法。你们公司做好准备了吗?
by Jason Bloomberg
当今关于Web服务(web services)的描述主要是关于集成的。走出不景气阶段的企业都把降低集成成本作为一个明显的目标。运用公开的、基于标准的、松散藕合的Web服务技术就给企业提供了一个不是很昂贵的集成方法。然而,Web服务不仅仅是使集成简单化了,它们的用处更多。实际上,它们将注定要从根本上改变人们创建和使用软件的方式。
为了摆脱老式的思考方式,软件专家必须要了解Web服务的技术,并且要了解Web服务可以给我们带来怎样的前景。下面的面向服务开发的七项原则——它们是随着老式思考方式转变到新的思考方式而产生的——为你形成这种新层次的观念提供了指南。
1. 动态的服务替代了静态的组件
构建一个Web服务不仅仅是像传统的组件开发期望的那样创建具有特殊功能的软件。一个Web服务的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)代码,直到它尽可能地简单。
虽然重构可以形成一些重用的方法,因为最终代码满足很多情况,但这种方法同传统的为可重用性编写的代码不同,因为它的目的是创建灵活的和广泛适用的代码。重用性和广泛适用性的代码的区别是很小的,但它们却是面向服务的开发过程的本质。最好的方法就是把面向服务开发的结构性原则同灵活的开发原则结合起来。
by Jason Bloomberg
当今关于Web服务(web services)的描述主要是关于集成的。走出不景气阶段的企业都把降低集成成本作为一个明显的目标。运用公开的、基于标准的、松散藕合的Web服务技术就给企业提供了一个不是很昂贵的集成方法。然而,Web服务不仅仅是使集成简单化了,它们的用处更多。实际上,它们将注定要从根本上改变人们创建和使用软件的方式。
为了摆脱老式的思考方式,软件专家必须要了解Web服务的技术,并且要了解Web服务可以给我们带来怎样的前景。下面的面向服务开发的七项原则——它们是随着老式思考方式转变到新的思考方式而产生的——为你形成这种新层次的观念提供了指南。
1. 动态的服务替代了静态的组件
构建一个Web服务不仅仅是像传统的组件开发期望的那样创建具有特殊功能的软件。一个Web服务的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)代码,直到它尽可能地简单。
虽然重构可以形成一些重用的方法,因为最终代码满足很多情况,但这种方法同传统的为可重用性编写的代码不同,因为它的目的是创建灵活的和广泛适用的代码。重用性和广泛适用性的代码的区别是很小的,但它们却是面向服务的开发过程的本质。最好的方法就是把面向服务开发的结构性原则同灵活的开发原则结合起来。