DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> Ajax 的 Java 對象序列化(2)
Ajax 的 Java 對象序列化(2)
編輯:AJAX詳解     
Fujak Superpix72 Camera 7.2 Megapixel digital camera featuring six shooting modes and 3x optical zoom. Silver. $299.99 自行序列化的不足 有趣的是,清單 3 中的代碼展示了讓 JavaBean 把自己序列化為 XML 的一個主要不足。假設要用這個文檔表示顧客的訂單歷史視圖。在這種情況下,不太可能要顯示每個歷史訂單中每個商品的完整說明,或者告訴顧客他或她自己的姓名。但是如果應用程序有一個 ProductSearch 類,它就是以 Item bean 列表的形式返回搜索結果,那麼在 Item 的 XML 表示中包含說明可能會有幫助。而且,Item 類上代表當前庫存水平的額外字段,在產品搜索視圖中可能就是需要顯示的有用信息。但是,不管當前的庫存水平是否與當前情況相關(比如對顧客的訂單歷史來說),這個字段都會從包含 Item 的任何對象圖中序列化出來。 從設計的角度來看,這是數據模型與視圖生成耦合的經典問題。每個 bean 只能用一種途徑序列化自己,一成不變的方式意味著 Ajax 交互最終要交換它們不需要交換的數據,因此造成客戶端代碼要從文檔中找到需要的信息更加困難,而且也會增加帶寬消耗和客戶端的 XML 解析時間。這種耦合的另一個後果就是 XML 的語法不能脫離 Java 類獨立變化。例如,對顧客文檔的方案做修改,可能會影響多個 Java 類,造成它們也不得不做修改和重新編譯。 我稍後會解決這些問題,但是首先來看一個對自行序列化方式的可伸縮性問題的解決方案:XML 綁定框架。 XML 綁定框架 近些年來,已經開發了多個 Java API 來簡化 XML 文檔到 Java 對象圖的綁定過程。多數都提供了 XML 編排和拆解;也就是說,它們可以在 Java 對象圖和 XML 之間執行雙向會話。這些框架封裝了 XML 處理的全部工作,這意味著應用程序代碼只需要處理普通的 Java 類。它們還希望提供有用的輔助功能,例如文檔驗證。籠統來說,這些框架采用了兩種不同的方式:代碼生成和對象到 XML 映射。我將分別解釋這兩種方式。 代碼生成方式 使用代碼生成的框架包括 XMLBeans、JAXB、Zeus 和 JBind。Castor 也能使用這項技術。這類框架的起點是描述文檔數據類型的 XML 方案。使用框架提供的工具,就可以生成代表這些方案定義類型的 Java 類。最後,用這些生成的類編寫應用程序,表示自己的模型數據,並通過框架提供的一些輔助機制把數據序列化成 XML。 如果應用程序要使用大型 XML 語法,那麼代碼生成方式是個很好的方法。在數十個類上編寫定制 XML 序列化代碼的可伸縮性問題由此消除。另一方面,也不再需要定義自己的 JavaBean。框架生成的 Java 類通常非常符合 XML 的結構,所以對它們進行編碼很難。而且,生成的類變成啞數據容器,因為一般不能向它們添加行為。一般來說,在應用程序代碼中要做些妥協,才能很好地處理方案生成的類型。另一個缺陷是如果修改方案,會造成生成的類也要修改,所以也就會對圍繞它們編寫的代碼帶來相應的影響。 這種類型的 XML 綁定框架在數據拆解時最有用(例如,使用 XML 文檔並把它們轉化成 Java 對象)。除非擁有大型數據模型而且有可能從生成的類中獲益,否則基於代碼生成的框架對於 AJax 應用程序來說可能有很大的殺傷力。 映射方式 采用映射方式的框架包括 Castor 和 apache Commons Betwixt。映射通常是比代碼生成更靈活和更輕量的解決方案。首先,可以像通常一樣編寫 JavaBean,包括任何行為以及任何自己喜歡的方便的方法。然後,在運行時,調用框架中基於內省的編排器,並根據對象成員的類型、名稱和值生成 XML 文檔。通過定義類的映射文件,可以覆蓋默認的綁定策略,並就類在 XML 中的表示方式對編排器提出建議。 這種方法是在可伸縮性與靈活性之間的良好折中。可以按照自己喜歡的方式編寫 Java 類,編排器負責處理 XML。雖然映射定義文件編寫起來簡單,可伸縮性也足夠好,但是映射規則最多只能改變標准的綁定行為,而且在對象結構和它們的 XML 表示之間總要殘留一些耦合。最終,可能不得不在 Java 表示或 XML 格式之間任選一個做些折中,才能讓映射方法起作用。 數據綁定總結 Dennis Sosnoski 就 XML 數據綁定 API 的主題,在代碼生成和代碼映射兩個方面寫了深入的文章。如果想進一步研究這個領域,我推薦他在 Castor 和代碼生成框架方面的精彩文章。 總之,代碼生成方式損失了過多的靈活性和方便性,對於典型的 AJax 應用程序用處不大。另一方面,基於映射的框架可能工作得很好,但是要恰到好處地調整它們的映射策略,以便從對象生成需要的 XML。 所有的 XML 綁定 API 都具有手工序列化技術的一個主要不足:模型和視圖的耦合。被限制為一個類型一個 XML 表示,就意味著在網絡上總要有冗余數據傳輸。更嚴重的問題是,在情況要求客戶端代碼使用專門視圖時,客戶端代碼卻無法得到它,所以可能要費力地處理給定對象圖的一成不變的視圖。 在傳統的 Web 應用程序開發中,采用頁面模板系統把視圖生成與控制器邏輯和模型數據干淨地分離。這種方法在 Ajax 場景中也會有幫助。 頁面模板系統 任何通用目的的頁面模板技術都可以用來生成 XML,從而使 AJax 應用程序根據自己的數據模型生成任何 XML 響應文檔。額外收獲是:模板可以用簡單的、表現力強的標記語言編寫,而不是用一行行的 Java 代碼編寫。清單 5 是一個 JSP 頁面,采用了 Customer bean 並表示出定制的 XML 視圖,適合客戶端代碼生成訂單歷史組件。 清單 4. 生成訂單歷史文檔的 JSP <%@ page contentType="application/xml" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>${order.date}
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved