posts - 6,  comments - 4,  trackbacks - 0

分析和设计

SOA 分析和设计也可以指以下术语中的一个或多个:

服务建模
面向服务的分析和设计
面向服务的建模和体系结构 (SOMA)
Rational Unified Process for Service-Oriented Modeling and Architecture (RUP SOMA)


分析会在较高的(概念级)抽象级别上对将要构建的系统进行描述。分析的输入是一组需求和现有的资产

(或是应用程序或系统)。输出则是对需要构建的各个方面的描述。分析对 SOA 来说是至关重要的,因

为通过分析,可以在服务标识期间使 IT 与业务保持一致。分析结果将作为输入在设计中使用。


大多数体系结构(在第 1 部分中有述)工作是在分析和设计的工作流中、在项目的细化阶段执行的。
面向服务的分析和设计利用了分析和设计原则(如面向对象的开发或基于组件的开发中的原则)。例如,

您也许还记得所谓的面向对象的分析和设计 (OOAD)。不过,必须注意的是,SOA 的工作重点始终在于服

务(而不是对象或组件)。

服务标识

服务标识 是核心的面向服务的分析活动。服务标识的目的是将各个分组的概念化服务及其操作标识出来

自顶向下方法

业务体系结构工作从一组业务目标开始,标识出一个或多个应予关注的业务流程,这在 SOA 中是非常典

型的。通过业务建模工作,可能会出现已经过设计的业务流程(即未来的流程),对于正在设计中的系统

,它们可以被视为功能性的需求。

自顶向下方法旨在分解业务元素(主要是业务流程和用例),然后将它们细化为适合服务的粒度。在使用

自顶向下方法的过程中,您通常要在业务任务中标识出各种服务操作。这种做法的好处在于,您可以确保

标识的服务与业务保持一致。

自底向上方法

自底向上方法旨在分析现有的 IT 资产(如遗留的应用程序和系统),找出可以作为服务公开的功能,以

便重用它们。

重用是 SOA 的一个重要组成部分,对于 SOA 的成功是极为关键的。您可能知道,遗留应用程序(即已经

部署的应用程序)是您的公司最宝贵的资产,应该加以利用。例如,自底向上方法将分析现有的信息管理

系统 (IMS) 事务或 COBOL 程序。

对于自底向上的分析,有一句忠告:您必须谨慎从事,不要盲目地公开现有的 IT 功能。例如,用于创建

、读取、更新、删除 (CRUD) 数据的各项服务的粒度可能太小,无法与业务保持一致。

此外还要注意,您应使用现有的资产分析工具(如 IBM WebSphere Studio Asset Analyzer),这一点至

关重要,因为准确的部署和运行情况常常是无人知晓的。

中间相遇方法

中间相遇方法在需求(由自顶向下的分析标识出来的服务)和现有的 IT 资产提供的功能之间进行协调。

中间相遇方法需要业务分析师、软件架构师和遗留应用程序专家彼此协作。注意,虽然在特定项目的上下

文环境之外进行的自底向上分析也是有价值的(例如,某个企业体系结构团队对候选服务进行编目),但

事实上,作为项目的一部分,在工作开始时通常会采用自顶向下方法,对一个或多个业务流程进行分解。

此后,会在这个上下文环境中进行自底向上的分析,试着为所需的服务找到与之匹配的项(中间相遇方法

)。

通过上述三种方法,可对服务集及其操作进行标识和验证(例如,通过验证,可以确保服务先前并不存在

,或服务与业务保持一致),并对它们分组,归入各个逻辑类别(如业务组件或业务功能区域)。另外还

要标识业务项(如策略或索赔),这些业务项主要来自现有的数据遗留应用程序。下一个步骤是完整地指

定这些服务及其操作,定义它们的结构和行为。

 

 


服务实现

服务实现旨在对如何实现服务进行设计。这一设计已经达到最为详细的程度(仅次于代码级)。它的目的

并不是实现(构造)服务,而是在设计级描述如何实现服务,至于实现(构造)服务,将在第 3 部分予

以介绍。服务实现是由软件架构师和设计师来完成的。

在规范和实现之间有一道明显的鸿沟。您可以用一个简单的方法看出它们的区别:如果说服务规范解决的

是是什么的问题,服务实现介绍的就是怎样做。

设计模型

由 RUP SOMA 定义的设计模型,是服务实现的核心输出工作产品。它描述了 SOA 的实现,是对实现(包

括代码)的抽象。服务实现的输出将被输入到服务的正式实现之中。

服务组件

您应当关注的主要设计模型组件是设计组件,它表示的是一个或多个服务规范是如何实现的,还描述了如

何处理所有的功能性/非功能性需求,以及结构和行为规范。

在服务实现期间会创建大量的新类,对服务组件和服务进行细化。此外还会定义这些类的结构和行为。

正如先前所说的那样,服务实现应当大量使用设计模式(如委托模式、独立模式和工厂模式),这些模式

一般是在服务实现期间被应用到各个类的。

 

服务设计原则

这一部分将列出您在设计 SOA 解决方案时必须牢记的四项服务设计原则。不过请注意,这并不是一份官

方的正式列表,而且也并不全面,其中一些概念来自于其他范例,如面向对象。这些原则在面向服务的解

决方案设计中是十分重要的。

重用

在设计服务时,请把重用这一原则随时记在心中。通常,在设计时,特定的服务使用者会有特定的要求。

不过,如果您想从 SOA 中获益,您会希望那些需求略有不同的其他使用者会重用自己设计的服务。而在

您创建设计时,并不知道这些使用者,也不知道它们有什么需求,因此这并不是一项轻松的任务。

下面是您可以考虑的事项:

根据业务域(而不是技术)为服务及其操作提供一个有意义的描述性名称。
提供完整的、可由人工阅读或计算机处理的规范,并将其公布给服务注册中心,使服务可以被发现(详细

信息,请参阅本系列后续的部分)。
各个使用场景的服务质量与初始场景不同,例如,如果服务被频繁使用,需求和工作负载提高,可以制订

相应的计划。
是否有可能对服务提供的初始功能(是根据初始需求集提供的)进行扩展,以便完善服务。
是否有可能在多种不同的平台上实现某个服务规范。
松散耦合

耦合是指实体或系统彼此间的依存程度。在 SOA 的上下文中,您可以考虑服务规范与它的提供者或实现

之间的耦合,或服务提供者与服务使用者间的耦合。如要支持 SOA 应有的灵活性,必须采用松散耦合。

服务提供者无需了解服务使用者的某个特定实例,反之亦然。如果要替换某个服务提供者或服务的实现,

必须保证这样做对使用者造成的影响可忽略不计,或不会对其造成干扰。

如果要帮助实现松散耦合,请考虑下列事项:

将服务规范(本文中所述的服务和模型)与服务实现分离开来。正如第 2 部分有关 MDD 的那一节所描述

的那样,对于服务而言,拥有完整的规范是十分重要的,规范不会依赖于某个特定的实现。而且,服务契

约应处于规范级别(而非实现级别)。
使用工具,以一种人机可读的标准格式(如 WSDL 和 WS-Policy)描述服务规范,以使代码生成器能帮助

您实现服务( 本系列的第 4 部分将提供这一方面的详细信息)。
当开发服务使用者的代码时,请记住,可能存在服务中间层或其他提供者,请不要对某个提供者的实例的

任何信息进行硬编码。

无状态性

事务状态意味着服务必须具有关于某些发生的事件的信息,这些事件是一个在服务提供者和服务使用者各

自的特定实例间长期运行的事务的一部分。例如,如果服务操作已被调用,或在调用某个操作前需要先调

用另一个操作,在这两种情况下调用服务操作的结果是不同的。虽然在基于组件的开发中可以找到事务状

态的身影,但对于 SOA 来说,事务状态却是应该避免的。

数据(信息)状态意味着需要对数据实例的状态进行管理。某些服务通常需要管理数据的状态。以保险业

中的索赔服务为例。该服务必须管理索赔实例的状态,因为多个用户会通过不同的业务事务访问这些实例

。注意,保持状态不变的服务通常是原子(细粒度服务)。如要处理状态需求,您应依靠一些在实现中运

用的基础技术,如 Java™ 平台、使用状态会话 Bean 的 Enterprise Edition (Java EE) 等等。

粒度

对于面向服务的设计,您可以对粒度进行考虑,如服务提供者级或服务规范级的粒度(对于前者而言,要

考虑应提供多少服务)。服务规范是一个针对服务操作的逻辑分组。在此处,逻辑表示它在业务方面的合

理性。例如,在保险领域中,一个索赔处理接口将提供使用索赔处理的场景中所需的所有操作。这在 IT

实现方面也是合理的。例如,服务中所有被标识出的操作都可以通过同一种开发迭代实现。

在设计服务操作时,请考虑协作、使用场景,以及在服务提供者和使用者之间流动的消息的数目和大小。

粗粒度的操作可以提供更高的业务价值,而且使对实现的修改变得更容易了。粗粒度操作的参数(使用消

息作为输入、输出和故障参数)出错率较低。不过,使用细粒度的参数(而不是消息)通常具有更好的描

述性。例如,如果某个操作服务签名为 determineEligibility(application: ApplicationMessage),则

您需要查看 ApplicationMessage 的定义。如果签名为 determineEligibility(customer : Customer,

product : Product, date : Date, amount : Amount),则该签名的描述性更好。此外,Customer 或

Product 参数类型(举例来说)可以在其他操作中重用,这与 ApplicationMessage 不同。

对于服务粒度,请务必记住,服务是可组合的。这涉及到重用和在现有功能基础上提供新功能的能力。某

一粒度级别的一组服务可以通过编排,形成另一个具有较粗粒度的服务。您可以想想这个例子:多个服务

提供各种业务任务,然后将这些业务任务排成序列(一个业务流程),以提供另一个服务。

最终,如果要在设计决策中确定服务粒度,应当在性能(如在高效实现的前提下,用于交换的消息的大小

和数目)和重用的可能之间作出折衷。而且,一个典型的 SOA 会同时包括细粒度(原子服务)和粗粒度

(组合服务)两种服务。

 

posted on 2009-04-05 13:57 shivaree 阅读(130) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: