北极星

搜索历史清空

  • 水处理
您的位置:电力电力新闻综合正文

SOA中的服务接口设计最佳实践之一[1]

2008-08-04 18:38来源:希赛关键词:SOA收藏点赞

投稿

我要投稿

  面向服务的体系结构(Service-OrientedArchitecture,SOA)强调企业内不同系统间的松散耦合。服务接口结构在SOA中是最重要的,因为设计糟糕的服务接口对需要使用这些接口的所有应用程序都会造成负面影响。设计良好的服务接口能够加速项目计划的执行,从而提高您的SOA解决方案对业务需求的响应能力。本文是本系列的第1部分,重点讨论服务接口设计的最佳实践,包括有关开发方法、服务粒度以及操作签名方面的概述。本系列的后续文章将讨论设计Web服务描述语言(WebServicesDescriptionLanguage,WSDL)文档结构以及错误处理方面的最佳实践。

  引言

  面向服务的体系结构(Service-OrientedArchitecture,SOA)正快速成为很多企业中的主要体系结构样式。构建SOA解决方案的主要目的是通过松散耦合其系统来对企业进行武装,从而能更好地响应业务需求。在SOA解决方案内设计Web服务的主要目标之一是支持快速构造业务流程。您还希望加速企业内以及与外部业务合作伙伴的应用程序集成。

  在实现SOA解决方案的上下文中,服务接口的结构非常重要。设计糟糕的服务接口可能会极大地导致使用此接口的很多服务使用者应用程序的开发过程变得非常复杂。从业务角度而言,设计糟糕的服务接口可能使得业务流程的开发和优化变得复杂。相反,设计良好的服务接口可以加速开发计划的执行,并对业务级别的灵活性起到促进作用。

  Web服务从本质上就非常适合用于构造SOA解决方案。Web服务领域的很多现有和未来的行业标准可确保互操作性,此类标准包括SOAP、JavaAPIforXML-basedRPC(JAX-RPC)、WSDL和WS-*规范等等。各种流行的开发环境(如IBM®Rational®ApplicationDeveloper和IBMWebSphere®IntegrationDeveloper)中均包含了基于标准的工具,从而能够加速SOA项目的进行。

  本文的重点是服务接口设计抽象层面的东西:

  设计与开发方法

  服务粒度

  操作签名

  开发方法

  基于XML和Web服务的编程模型和开发工具定义了三种构建Web服务的方法:

  自底向上

  各种先进的集成开发环境(IntegratedDevelopmentEnvironment,IDE)提供了用于从现有代码(如Java™或COBOL)创建Web服务实现的工具。使用此方法时,开发人员通常将选择现有的JavaBean或EJB组件,并调用向导来生成WSDL文件,以用于将Bean或EJB作为Web服务调用。

  自顶向下

  使用此方法时,开发人员将首先使用WSDL和XML模式(XMLSchema,XSD)构造定义Web服务接口,然后为服务生成框架实现代码。接下来,开发人员将完成框架服务实现。大多数先进的IDE(如RationalApplicationDeveloperV6和WebSphereIntegrationDeveloperV6)都为此方法提供工具支持。

  中间相遇

  此方法对前面两个方法进行了结合。开发人员首先使用WSDL和XSD定义服务接口,并为服务生成框架实现。如果有必要,开发人员还可以使用自底向上技术来通过方便的应用程序编程接口(ApplicationProgrammingInterface,API)公开现有代码。然后开发人员将编写在新设计的接口和旧接口之间进行转换的代码。

  很多熟练的Java开发人员喜欢使用自底向上技术来加速SOA项目中的Web服务开发。他们将首先用Java开发新服务的实现,然后将使用强大的代码生成向导来为这些服务创建WSDL接口。尽管此方法可以加速各个服务的实现,但这对整个SOA项目通常都意味着问题。

  之所以出现问题,是因为自底向上生成经常会得到无法重用的类型定义以及多个定义为表示语义等效信息的类型。

  最佳实践:使用自顶向下和中间相遇开发方法,而不使用自底向上技术。使用XSD和WSDL设计您的服务接口,然后生成框架Java代码。

  当存在现有遗留代码(例如JavaBeans、EJB、COBOL等)时,就适合使用自底向上开发方法。采用此方法时,应该仔细地复查现有类的接口,然后再生成WSDL接口。如果Java接口仅包含任何以下内容,则可以将其视为弱类型:

  作为方法的参数或返回类型使用的java.lang.Object

  作为方法的参数或返回类型使用的集合类(例如java.util.Vector)(JAX-RPC约束)

  应该考虑对遗留代码进行重构,以确保接口为强类型;或构建中介,以使用强类型接口包装弱类型接口。

  Java与WSDL的比较

  可以使用Java或WSDL描述您的服务接口。Web服务相关的规范(如SOAP、JAX-RPC和JAX-B)定义了映射,以说明采用Java定义的类型如何映射到WSDL/XSD中以及如何进行反向映射。

  最佳实践:使用WSDL和XSD(而不是Java)描述服务接口。服务接口定义是一种WSDL端口类型。

  XML模式规范定义范围比Java更广的用于描述消息结构的构造。其中包括各个选择、限制的派生、Annotation及其他。因此,与采用其他方式相比,使用WSDL和XSD定义接口并生成框架Java代码的方式更好。

  WSDL和XSD一起形成了与技术无关的可供SOA实现使用的接口定义语言。除了Java之外,WSDL/XSD接口定义可以用于生成采用很多语言(例如COBOL和C )的框架实现。

[1][2][3]

投稿与新闻线索:陈女士 微信/手机:13693626116 邮箱:chenchen#bjxmail.com(请将#改成@)

特别声明:北极星转载其他网站内容,出于传递更多信息而非盈利之目的,同时并不代表赞成其观点或证实其描述,内容仅供参考。版权归原作者所有,若有侵权,请联系我们删除。

凡来源注明北极星*网的内容为北极星原创,转载需获授权。