SDO規(guī)范則負(fù)責(zé)解決如何在異種服務(wù)間交換數(shù)據(jù)。它定義了一套中立的數(shù)據(jù)結(jié)構(gòu),目前有Java和C++的具體語言規(guī)范 ,Java規(guī)范解決了Java Bean和SDO的映射,C++規(guī)范解決了C++類、結(jié)構(gòu)體和SDO的映射。
SCA主要是針對在面向服務(wù)的計(jì)算環(huán)境里,組件的實(shí)現(xiàn)方法。同時(shí),它強(qiáng)調(diào)了這些組件與現(xiàn)有的平臺,組件之間的關(guān)聯(lián),并描述怎樣通過已有的技術(shù)、平臺甚至于現(xiàn)有的組件來實(shí)現(xiàn)面向服務(wù)組件。另外,在將這些服務(wù)組件實(shí)現(xiàn)以后,它們的接口以及這些接口的語義是怎樣描述的。
其實(shí),新的組件描述應(yīng)該是技術(shù)獨(dú)立、平臺獨(dú)立、語言獨(dú)立的,也就是說它是一個(gè)開放的規(guī)范,這樣就可以讓很多IT廠商在不同的平臺上用不同技術(shù)和語言來參考和實(shí)現(xiàn)這些技術(shù)。除此之外,面向服務(wù)的組件需要相互之間的交互,這種交互應(yīng)該是松耦合的,也就是說需要打破過去那種緊耦合的現(xiàn)象。因?yàn)椴还苁?NET、J2EE還是更早的CORBA等技術(shù),它們在支持分布式計(jì)算時(shí),其組件往往和平臺、語言以及實(shí)現(xiàn)技術(shù)緊密相關(guān)。
過去,如果一個(gè)組件要調(diào)用另外一個(gè)組件的功能,它需要知道后者的接口在什么位置,使用什么協(xié)議和消息格式,這往往與其實(shí)現(xiàn)技術(shù)有直接的關(guān)系,所以技術(shù)、平臺、語言和位置等各種各樣的因素的透明性對于組件之間的交互就是非常重要的一件事情了,而SCA恰恰就規(guī)定了這一部分的內(nèi)容。
過去我們所采用的技術(shù)中,不管是.NET也好,J2EE也好,它們都有基于自身平臺下的規(guī)范,比如在J2EE環(huán)境下,我們就會通過JDBC、Entity Bean這樣的方式訪問數(shù)據(jù)庫或者其它數(shù)據(jù)源;而在.NET下同樣有類似ADO這樣的方式來訪問各種不同的數(shù)據(jù)源。這里面的問題在于,平臺透露了太多的技術(shù)細(xì)節(jié),程序員需要了解很多相關(guān)的內(nèi)容,比如他需要?jiǎng)?chuàng)建一個(gè)JDBC或ODBC的數(shù)據(jù)源,再利用這些規(guī)范所提供出來的編程接口來想辦法得到數(shù)據(jù)源中的數(shù)據(jù),為達(dá)成這個(gè)目標(biāo),程序員還需要去做對象-關(guān)系映射,以實(shí)現(xiàn)對象到關(guān)系數(shù)據(jù)庫或者與之相反的數(shù)據(jù)轉(zhuǎn)換。目前有一些技術(shù)可以用來解決這些問題,比如前段時(shí)間在Java社群中一直都非常流行的Hibernate等,諸如此類的方法和工具很多,他們都是用來協(xié)助程序員處理上述工作的。但無論如何,你都無法逃避地要看到很多這些方法中非常底層的技術(shù)細(xì)節(jié),而且,程序員需要學(xué)習(xí)所有這些不同的技術(shù),了解它們適應(yīng)于什么情況,處理各種情況下的不同技術(shù)細(xì)節(jié)。事實(shí)上,程序員需要抽象層次更高的東西,比如業(yè)務(wù)數(shù)據(jù)對象(Business Object)以及它內(nèi)部各種細(xì)粒度數(shù)據(jù)對象之間的關(guān)聯(lián),這是可以用一致、通用的方式來表示和操作的。有了抽象層次更高的模型,程序員就可以通用的方式來定義和訪問業(yè)務(wù)數(shù)據(jù),從而以統(tǒng)一的方式來描述和訪問不同的數(shù)據(jù)源,降低對程序員技能的要求,提高生產(chǎn)率,更容易在不同的應(yīng)用環(huán)境交換。
這樣,不管是Java或者C++語言描述下,程序員都不必去了解平臺上的技術(shù)細(xì)節(jié),用一個(gè)XML Schema描述這樣的通用、簡單的的業(yè)務(wù)數(shù)據(jù)模型,然后在運(yùn)行將對象持久化到你的關(guān)系數(shù)據(jù)庫、XML或者其它數(shù)據(jù)源中。
SDO 的目標(biāo)有很多,從某種程度上講 SDO 看起來好像是 J2EE 的一把多功能“瑞士軍刀”,因?yàn)樗奶匦钥蓪?shí)現(xiàn)多種不同種類的功能,基本來講,SDO 及其相關(guān)的技術(shù)設(shè)計(jì)有以下五大主要專題:
1)簡化數(shù)據(jù)訪問:第一個(gè)目標(biāo)是提供對多種企業(yè)信息系統(tǒng) (EIS) 的統(tǒng)一的數(shù)據(jù)訪問,包括數(shù)據(jù)庫、遺留應(yīng)用程序(使用 JCA)、XML 或者是 Web 服務(wù)數(shù)據(jù)源。通過使用 SDO 的一種獨(dú)特而簡單的模型,應(yīng)用程序擺脫了使用多種 API 和框架進(jìn)行數(shù)據(jù)訪問的復(fù)雜工作。
2)數(shù)據(jù)提取:使用 SDO 后,數(shù)據(jù)的表示是獨(dú)立于其數(shù)據(jù)源的,它采用了一種叫做 Domain Store 的 J2EE 模式,這種級別的數(shù)據(jù)提取有很多優(yōu)點(diǎn),例如使數(shù)據(jù)操作變得更容易,實(shí)現(xiàn)了不同層之間的松耦合。
3)數(shù)據(jù)操作:一旦檢索到信息后,SDO 會提供一種統(tǒng)一的編程語言進(jìn)行數(shù)據(jù)操作,簡單的說,就是通過使用 API 及其接口,SDO 客戶機(jī)可以讀取數(shù)據(jù)和修改數(shù)據(jù)。SDO 為此提供了連接和斷開連接的兩種模型。
4)數(shù)據(jù)傳輸:SDO 有一部分概念是關(guān)于傳輸對象 (Transfer Object) 和傳輸對象組裝程序 (Transfer Object Assembler) 模式的。數(shù)據(jù)封裝到 SDO 對象中后,它就可以在 J2EE 層間高效地傳輸。
5)設(shè)計(jì)模式的采用:SDO 的一個(gè)關(guān)鍵目標(biāo)是鼓勵(lì)大家采用公用的 J2EE 模式,這也是 SDO 體系結(jié)構(gòu)以一些廣為人知的模式為基礎(chǔ)的原因,例如傳輸對象 (Transfer Object)、數(shù)據(jù)訪問對象 (Data Access Object)、傳輸對象組裝程序和 Domain Store等。如果使用了 SDO,應(yīng)用程序就可以從這些經(jīng)過了驗(yàn)證的設(shè)計(jì)策略中受益,從而可以推動(dòng)分層技術(shù)和松耦合的發(fā)展。