UML软件工程组织

粗粒度接口使SOA的服务融合成为可能
作者: ZDNet China
面向服务架构(service-oriented architecture,SOA)的一个主要优势是能够将不太复杂的服务融合成为应用程序、流程或者其他更加复杂的服务。这项活动,有时候叫做服务融合(service composition),允许开发人员使用来自不同环境的服务合成应用程序和进程,而不需要考虑这些环境的细节和差异。SOA的这一特性在很大程序上取决于正在被建造的和被粗粒度接口(coarse-grained interface)所公开的服务。

服务粒度
服务粒度(service granularity)指的是服务所公开功能的范围。细粒度服务(fine-grained service)可能是那些能够提供少量商业流程可用性的服务,例如基本的数据访问服务。还要稍粗糙一点的粗粒度服务可能会提供一些最基础的操作,这对于系统专家很有价值,但是对于一个商业流程专家来说就没有很大的价值了。对于商业(流程)专家来说,最有价值的服务是由底层服务、组建和对象组成的,这三者被有机地构造起来以满足特定的商业需求。通过定义和公开能够满足商业流程要求的接口,这些粗粒度服务能够被创建自一个或者多个已有的系统。

粒度的级别
图 A所示,粒度的级别一般取决于软件实体的目的。服务的粒度级别通常会比对象或者组件的粒度级别更粗。在典型状况下,服务会公开一个单一的、离散的商业流程。

图A

粒度的级别

作为复合接口的服务
通过使用粗粒度接口,服务系统能够对每项服务所参照的对象进行访问控制。在每项服务可以被作为一组更加精细的细粒度对象的抽象来实现的同时,对象自身能够对公共访问隐藏起来。通过给对象、组件和细粒度服务进行分组,以及通过使用外观(facades)或者接口,就能够实现每项服务,如图B所示。

图B

粗粒度服务

有效的服务接口
要做到对商业专家完全有效,服务接口应该清楚地说明它们所进行的商业操作、所需要的输入参数、可能的错误或者异常,及其结果。服务接口应该能够让商业专家很容易地理解,而这些专家没有必要具有深入的技术知识。这就使得商业专家能够高效率地使用服务来实现商业流程同应用程序的融合。图C说明了接口粒度同商业流程融合之间的关联,以及这些关联对系统专家和商业专家的影响。

图C

服务的融合

一个简单的例子
为了说明粗粒度接口的概念,现在让我们通过应用一个新的外观来使用一些简单的对象,并从中融合出了一个更加有用的商业服务。假设我们有一个叫做UserInfo的类,以及另一个叫做UserAccount的类。通过对一个新的接口进行抽象来表示流程,我们能够从这些类里创造出一个有用的商业流程getUserAccounts来。我们会把Java作为我们的目标开发语言。

Listing A里的代码定义了一个简单的UserInfo类,而Listing B里的代码定义了一个简单的UserAccount类。

现在,让我们来定义包含有getUserAccounts商业流程的服务接口:
package com.jeffhanson.services;

public interface FinanceServices
{
public UserAccount[] getUserAccounts(UserInfo userInfo);
}

有了自己的接口,我们现在就能够将两个类的实例融合成为一个有用的商业流程,getUserAccounts,如Listing C所示。

服务融合
服务融合允许你使用来自各种环境的服务进行应用程序和流程的融合,而不需要考虑这些环境的细节和差别。如果服务是使用粗粒度接口所构造的,那么服务融合能够实现的可能性要大得多。有了一组有效设计和融合的粗粒度服务,商业专家就能够有效地融合出新的商业流程和应用程序了。

来源:ZDNet China

 

版权所有:UML软件工程组织