數據綁定(Data Binding)并不是一個新概念,IE 4.0就已對其給予了豐富的支持。但是,數據綁定并未受到應有的重視,許多開發者似乎更加愿意使用服務器端腳本(Server Script)的方法。然而實際上,無論是在動態網頁的代碼實現方面,還是在動態網頁的工作效率方面,數據綁定的效率都比后者更高。
本文將介紹數據綁定的體系結構、工作原理及其實現方式,最后對這兩種方法在編程工作量和網頁效率等方面做出比較和結論。
首先讓我們看一個簡單的例子。某一網頁顯示倉庫的當前庫存情況,用戶可自行選擇數據的排序方式:按貨物的名稱、價格、庫存量等排序。使用服務器端的技術,例如CGI、ISAPI,或者ASP等中間件,用戶若需要N種排序方式,則應用程序腳本至少要向服務器提交N次數據請求。對于同樣內容的數據,僅僅因為顯示方式的不同,就要進行多次數據庫操作,耗費大量的網絡帶寬。
另一個常見的例子是,大量數據需要分頁顯示時,每一次翻頁都需要重新向服務器建立連接,遞交查詢請求,再定位數據。對這些類似問題,數據綁定都提供了高效的解決方案!
數據綁定的體系結構和工作原理 數據綁定體系結構包括四個組成部分:數據源對象(Data Source Object)、數據顯示對象(Data Consumers)和兩個代理器(Binding Agent與Table Reptition Agent)。數據源對象向網頁提供數據,數據顯示對象就是顯示數據的HTML元素,代理器則用來保證前兩者的工作同步。圖1顯示了這四個部分協同工作的原理。
如圖1所示,數據源對象負責與后臺數據庫服務器通信,并將DB Server返回的數據以集合形式緩存在本地Cache。此后,對此數據集所做的任何操作,如排序、過濾、取子集等,都在本地Cache中進行,由代理器來負責數據源和顯示該數據的HTML元素之間的通信和同步。

圖1
數據綁定的這種工作方式,使得程序開發人員只要使用擴展HTML和可插入的數據源對象,就能使腳本的編程量達到最小。與傳統的服務器端腳本生成的網頁相比,數據只要一次下載到客戶端后,對該數據所做的任何操作都不再需要額外的服務器請求,因此節省了網絡帶寬,提高了下載速度。
數據綁定的實現 本節將根據數據綁定的體系結構,分別介紹它的各個組成部分及其實現。
1. 數據源對象(Data Source Object)
實現數據綁定的第一步是:確定網頁所要顯示的數據,據此選擇一個適合的數據源對象(DSO),再在網頁中引用該DSO。數據綁定的靈活性首先表現在支持多種DSO,IE 4.0及以上版本支持下列DSO類型:
●Tabular Data Control(TDC):這是一種簡單的DSO,提供對格式化文本文件的訪問。也就是說,TDC提供的數據來源是用指定分隔符來格式化的文本文件。
●Remote Data Service(RDS):RDS的前身是ADC(Access Data Control)。RDS通過OLE-DB或ODBC與數據庫通信,獲得數據。
●JDBC DataSource Applet:它與RDS的不同之處在于數據庫連接使用JDBC。
●XML Data Source:擴展標記語言XML使用標準的方式來描述和交換結構化數據;XML的數據以開放的、基于文本的格式進行描述,并通過標準HTTP協議傳輸。XML本身的特性決定了它天生就是一種靈活強大的DSO。IE4.0使用JAVA APPLET來實現XML DSO;IE5.0支持Data Island,用戶可以直接用<XML>標記定義的數據作為DSO。
●MSHTML Data Source:除了使用外部的控件作為DSO外,開發人員還可以在HTML文檔中定義數據集,并使用MSHTML本身作為數據源。
●自定義類型DSO:除了以上明確定義的這五類DSO,IE還支持用戶自定義類型的DSO,只要該DSO遵循IE 4/MSHTML Data Binding Interface即可。
DSO可以在設計時指定,也可以在運行時動態增加、修改和刪除。
2.支持數據綁定的數據顯示對象(Data Consumer)
可綁定的HTML元素共分為兩大類:單值對象(Single-valued Consumer)和表對象(Tabular Consumer)。單值對象顯示DSO提供的當前記錄的某一個域,而表對象中的每行元素則分別對應一條記錄中不同的域,并以此為模板重復顯示數據集中的每條記錄。數據顯示對象既可以在設計時綁定到DSO,也可以在運行時動態綁定。
DSO和Data Consumer的動態特性,使得已經存在的元素綁定可以被修改;不但如此,DHTML對象模型(DHTML Object Modle)還支持運行時動態增加數據綁定元素和數據源對象,因此數據可以以異步方式下載到客戶端。該特性使得開發人員可以減少網頁內容的初始化下載時間,并可在一個頁面上顯示多個不同數據集的內容,交互式用戶將由此獲得高質量的服務。
支持數據綁定的HTML元素包括:A、Applet、Button、Div、Frame、Iframe、Img、Input(包括Checkbox、Hidden、Label、Password、Radio、Text等類型)、Label、Marquee、Select、Span和Textarea。其中,A、Button、Div、Img、Frame、Iframe、Lable、Marquee以及span支持只讀功能的數據綁定;而Input(除Button類型外)、Select、Textarea、Object和Applet元素支持被綁定數據的Update功能。
3. 數據綁定支持的操作
對于只讀類型的Data Consumer來說,數據綁定支持的操作就是顯示DSO提供的數據集。具體功能包括:
● 動態增加和修改被綁定元素及DSO,如改變所顯示的數據字段、對數據集進行過濾和排序等。
● 動態改變數據集的顯示方式,數據可以用HTML格式顯示,也可用簡單的Text格式顯示。
● 動態控制被顯示數據的數量,即可動態改變分頁顯示時每頁包含的記錄數。
支持Update功能的Data Consumer不但支持上述功能,還支持記錄的增加、修改和刪除。也就是說,用戶在交互頁面上對數據的增加、修改和刪除,將影響到顯示該數據的元素所綁定到的數據集。為了方便對數據集的控制,數據綁定允許開發人員使用ADO(Active Data Objects)提供的所有方法和屬性來維護DSO提供的數據集,包括Insert、Update、Delete及Navigation等操作。
數據綁定中一個非常重要的問題是,一定要清楚對Data Consumer所做的操作到底影響了哪些數據:是只對本地Cache中的數據起作用,還是已真正改變了后端數據庫(這與DSO的類型有關)。TDC、XML Data Source以及MSHTML Data Source都只支持對Cache中的數據進行改變,而不支持將改變后的Cache中的數據提交到數據源所連接的后端數據庫。而RDS和JDBC DataSource Applet都支持修改后端數據庫的功能。
比較及結論 從表1可以看出,相對于服務器端腳本,數據綁定所生成的網頁工作效率明顯提高。但是使用該方法對程序員的要求較高,需要對Data Binding的深刻理解才能充分發揮將它的優良特性。復雜的工作就是高效率所必須付出的代價,在應用中,開發者應根據具體的需求和實際情況,選擇適宜的方法或是將兩者結合使用,以便獲得最高的性能價格比。
表1 | 比較項目 | 數據綁定 | 服務器端腳本 | 網頁工作效率 | 數據下載 | 同步/異步 | 同步 | 對數據進行過濾或排序 | 只需建立一次連接 | n次操作需建立n次連接 | 分頁顯示 | 只需建立一次連接 | 每次翻頁需要新連接和定位數據 | 通過data consumer直接修改數據庫 | 支持,且不需編程 | 支持,但需編程 | 結論 | 下載速度明顯提高,與用戶交互快,提供高質量的服務 | 下載速度與交互速度不如數據綁定方式 | 編程工作效率 | 編程靈活性 | 高 | 高 | 編程工作量 | 少 | 多 | 編程復雜性 | 高 | 低 | 結論 | 編程工作量少,使用靈活.但要求程序員必須熟悉dso和data consumer所支持的特殊方法和屬性,編程比服務器端腳本復雜 | 雖然編程工作量大,但使用靈活簡便,只需熟悉一般數據庫操作的程序員即可勝任 |
|