從一開始,開發(fā)軟件應(yīng)用程序就是為了訪問某種數(shù)據(jù)庫。分布式應(yīng)用程序和基于 Web 的應(yīng)用程序也不例外。然而在分布式方案中,由于可能存在不同的硬件和軟件平臺或?qū)ο竽P停虑樽兊蒙晕⒂悬c(diǎn)復(fù)雜。盡管如此,數(shù)據(jù)就是數(shù)據(jù),在幾乎任何地方都需要得到交換和處理。
在我們進(jìn)入可編程 Web 時代 — Internet 的第三個階段 — 之前,數(shù)據(jù)訪問曾是一個相對簡單的問題;主要關(guān)心的問題就是選擇效能成本最合算的數(shù)據(jù)庫服務(wù)器。任何系統(tǒng)的所有模塊都必須符合數(shù)據(jù)庫服務(wù)器 — 一種對整個系統(tǒng)進(jìn)行完全控制的全能實(shí)體 — 的要求??蛻魴C(jī)/服務(wù)器應(yīng)用程序一直是這種模型的典型表現(xiàn)形式。
近來,n 層 Microsoft® Windows® DNA 系統(tǒng)致力于開發(fā)能夠?qū)缀跞魏畏N類的數(shù)據(jù)進(jìn)行迅捷可靠的訪問的技術(shù),這些數(shù)據(jù)種類包括:關(guān)系型、非關(guān)系型、層次型、半結(jié)構(gòu)化型、分散型、易失型等。這種數(shù)據(jù)訪問的統(tǒng)一方法成為“通用數(shù)據(jù)訪問”策略 — OLE DB 體系結(jié)構(gòu)的鼓舞人心的原則。Microsoft ActiveX® Data Objects (ADO) 的出現(xiàn)完成了一項重大的任務(wù):將成千上萬的 Windows 開發(fā)人員從過時的客戶機(jī)/服務(wù)器模型帶到數(shù)據(jù)訪問組件和 OLE DB 的奇妙世界。
在 Windows DNA 模型中,中間層組件通過 OLE DB 規(guī)范體貼地為我們定義的一種公用格式來獲取和交換數(shù)據(jù)。這種格式以行集格式為基礎(chǔ),并且通常被轉(zhuǎn)換為諸如 ADO 記錄集之類的一種更高級的結(jié)構(gòu)。
使用 ADO 記錄集有得有失。一方面,它們提供了一種豐富并具有吸引力的編程接口。另一方面,它們是嚴(yán)格基于 COM 的,在涉及許多平臺(尤其是非 Windows 平臺)的分布式異構(gòu)環(huán)境中無法使用。互操作性和可伸縮性是對現(xiàn)代 Web 系統(tǒng)的兩個很高的要求;互操作性和可伸縮性更好的數(shù)據(jù)訪問體系結(jié)構(gòu)同樣是最新的 ADO 版本 ADO+ 中的主要變化。
一種公用數(shù)據(jù)操縱語言
通常情況下,目前的分布式系統(tǒng)符合圖 1 中所示的體系結(jié)構(gòu)。
圖 1. 目前的分布式 Web 系統(tǒng)的典型體系結(jié)構(gòu)
表示層通?;?HTML 3.2 輸出,并能夠很好地與任何較新的瀏覽器一起工作。網(wǎng)頁是在 Web 服務(wù)器上使用 Active Server Pages (asp) 構(gòu)建的,并且只有在一些相當(dāng)特殊的情況下才試圖通過 COM、動態(tài) HTML 和 xml 支持來提供瀏覽器的實(shí)際功能。
ADO 記錄集的靈活性足以使您能夠毫不費(fèi)力地定位記錄以及使用過濾器和書簽。它們還提供排序、自動分頁和持久性等功能,并能在與數(shù)據(jù)源斷開時工作。可以在多層之間相當(dāng)高效地匯集記錄集,這歸功于其固有的并且極為緊湊的二進(jìn)制格式 — Advanced Data Table Gram (ADTG) 格式。
斷開的記錄集在組件之間的傳輸涉及到 COM 匯集,并強(qiáng)制接收組件配合這一匯集。換句話說,只有 COM 對象才能使用 ADO 記錄集。這在 COM/DCOM 在業(yè)務(wù)層中占主導(dǎo)地位的同構(gòu)體系結(jié)構(gòu)中不成問題。顯然,當(dāng)有關(guān)的服務(wù)器端組件的映射涉及到諸如大型機(jī)或 Unix 平臺之類的異構(gòu)節(jié)點(diǎn)時,就會帶來很大的不便。
所謂的 Internet 的第三個階段使這一方案離我們更近了。它預(yù)示了一個世界,在這個世界中,功能實(shí)現(xiàn)通過各種 Web 服務(wù)(即可以通過 HTTP 訪問的環(huán)繞著我們的衛(wèi)星系統(tǒng))成為可能。您將需要向這些服務(wù)中的某個傳遞一些記錄以進(jìn)行進(jìn)一步處理,這個方案并不是什么勉強(qiáng)的事情。沒有什么比 Web 服務(wù)更加容易的事了 — 不管它的內(nèi)部體系結(jié)構(gòu)或公共編程接口如何 — 它不接受 ADO 記錄集。
A目前現(xiàn)實(shí)中的 ADO,特別是記錄集,是在 Windows 和基于 COM 的方案中操縱數(shù)據(jù)的強(qiáng)有力的工具。不幸的是,隨著您的系統(tǒng)逐漸向完全的 Internet 互操作性方向演變,它們逐漸喪失了其吸引力。
目前,如果您通過 ADO 對數(shù)據(jù)進(jìn)行訪問,并希望將其傳送到遠(yuǎn)程組件,您要么使用從數(shù)據(jù)訪問模塊獲得的相同的 ADO 記錄集,要么將其轉(zhuǎn)換為能夠通過網(wǎng)絡(luò)傳送的另外的東西,更為重要的是,能夠在其最終目的地被理解。如前所述,記錄集需要 COM 匯集,舉例來說,COM 調(diào)用并不是總能穿過公司防火墻。此外,在對 ADO 記錄集進(jìn)行匯集時,總處理時間的很大部分是用于完成必要的類型轉(zhuǎn)換。事實(shí)上,您必須確保記錄中的所有的值映射到 COM 能夠識別并知道如何進(jìn)行處理的有效數(shù)據(jù)類型。
在有關(guān)的組件在物理上是分開的并在不同的機(jī)器上運(yùn)行時,COM 匯集因素變得更為重要。因此,在向完全由 Internet 連接起來的世界前進(jìn)的過程中,目前的 Windows 數(shù)據(jù)種類連同 ADO 記錄集必須有所發(fā)展才能繼續(xù)存在下去。