关键字:soa
简介
如果您加入IT行业已经有一段时间了,那么当您听说供应商们推出新的技术时,您会有似曾相识的感觉。如果您对于大量有关面向服务架构的宣传感到晕眩,那么您并不是惟一的一个。在最近的会议上,一个习惯于使用COBOL编码的与会者问道,SOA和他所使用的COBOL copybook之间的区别在哪里。我从未使用过COBOL copybook,但是曾见过大量的技术出现又消失,所以我可以理解这个问题。在本文中,我将说明隐藏在SOA背后的主要驱动力,以及如何改进技术以支持SOA。我将在概念层面上进行讨论,并在最后给出一些参考资料,以供想要深入钻研的人使用。
重用所面临的障碍
重用一直是软件开发的首要目标之一。这很明显:如果您编写了一段代码来实现某种功能,如果无需在其他很多地方再重新编写或维护它,那么无疑会提高生产率。然而,重用实现起来并不轻松,也并非自动化的。首先,必须以一种可重用的方式来组织或编写代码。然后,必须知道存在一段可以被重用的代码。在组织代码方面,不同的编程语言以不同的方式为重用提供内置支持。过程和函数是大多数程序员所熟悉的基本单元。面向对象的语言,比如C++和Java,还提供了定义和扩展自定义的类型或类的手段。这些特性背后的基本理念就是封装(也就是说,只需通过一些定义良好的接口来访问其中的功能,实现对于您而言是一个黑盒子)。这些特性有其用途和优点,但是当涉及到支持更大规模的重用时,它们也存在一些局限性。
首先,这些编程语言工件是非常低级的,只有特别熟悉它们的程序员才能进行有效的重用。 其次,即便是在同一个项目团队中,要发现可重用的资产也不是一件容易的事情,更不用说在企业范围内了。 最后,这个层面上的代码并不支持网络,这意味着无法跨机器调用这些代码,也无法在另一种编程语言中透明地重用它们。例如,假定我已经使用C++编写了一个定价模块,那么不费一番工夫,我是无法在Java中调用这个模块的。在这里我想表达的是,这些特性肯定有其用处,但是这个层面上的重用实际上就是剪切和粘贴代码,这易于出错而且不可扩展。
面向重用
“服务”这个概念的出现就是为了解决这些重用问题中的一部分。CORBA是对象管理组(Object Management Group,OMG)提出的一个标准,这或许也是使用基于标准的分布式计算模型来解决重用问题的首次全面努力。
其思路是,通过一个抽象接口正式实施封装的概念,并提供一组可由这些服务(或CORBA技术中的对象)使用的基础性服务。接口是使用一种叫做IDL(Interface Definition Language,接口定义语言)的语言定义的,而且为各种编程语言定义了映射。服务可以使用这种语言来描述。要使用某个特定的服务,只需使用IDL即可,而无需了解实现该服务的实际细节。这些服务还支持网络。这提供了一种跨硬件、语言和网络的便利途径。
CORBA还定义了一套丰富的基础性服务,比如用于注册和发现对象的目录服务(称为命名(naming))、基于公开属性发现对象的交易(trader)服务、用于异步通信的通知服务、事务服务,等等。所以,现在可以快速构建服务,因为可以利用这些基础性服务。还可以跨越多种边界轻松重用这些服务。其他的分布式组件模型,比如微软的DCOM和J2EE,都以一种或多或少类似的方式来构建和使用服务。
SOA到底是什么?
现在,我们已经准备给出面向服务架构(即SOA)的定义了。遗憾的是,关于SOA,存在多种定义,有时它们还相互冲突。很多定义都结合了一种特定的技术(特别是Web services),或者在定义中包含一种特定的特性(例如调用类型)。我将给出一些我认为抓住了SOA本质、而不是将其与特定的技术相关联的现有定义。但是,首先让我们看一看面向服务架构中的术语“服务”。
文章来源于领测软件测试网 https://www.ltesting.net/