關鍵字: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本質、而不是將其與特定的技術相關聯的現有定義。但是,首先讓我們看一看面向服務架構中的術語“服務”。
文章來源于領測軟件測試網 http://www.kjueaiud.com/