dorado是一套成熟的Web應用開發套件, 其中包含了一個完整的具有下一代Web應用特征的表現層解決方案。本文著重介紹了如何利用dorado的表現層與目前較為流行的Struts、Hibernate、Spring進行協同開發。

圖表 1基于MVC模式的總體框架圖
上圖是利用dorado的表現層與目前較為流行的Struts、Hibernate、Spring進行協同開發的總體框架圖。從此圖中我們不難看出與傳統的MVC的開發模式的最大區別在于View部分dorado的表現層實現。
1. 發起請求 從瀏覽器發出請求開始(如圖中的1號箭頭)。該請求首先將被Struts的ActionServlet接受,然后ActionServlet會根據用戶的Struts配置確定應觸發哪一個具體的Action。
2. 調用業務邏輯 Action的主要任務是調用某一個業務邏輯對象BO(Business Object)已完成相應的業務操作。由于我們在此框架考慮引入了Spring,因此Action將不必直接創建具體的BO。而是通過Spring框架利用反向注入的原理(Ioc)來得到BO的實例。
在BO當中我們應當通過數據訪問對象DAO(Data Access Object)來實現對數據的訪問操作。由于我們考慮在開發模式中引入Spring。因此,此處具體使用的DAO實例也應通過Spring來獲取。
為了更好地實現業務邏輯的面向對象化,我們還可以考慮利用Hibernate來作為DAO的具體實現方式。如此便有的了上圖中所展示的Model層的架構。最終在整個系統中DAO成為了唯一的數據庫訪問途經。通常我們可以將此圖中的DAO和Hibernate統稱為數據持久層。
另外,在某些情況我們也可以考慮簡化此處的持久層設計。由于Hibernate本身就可以作為獨立的持久層實現,因此也可以將此處的DAO對象省去,直接在BO中利用Hibernate完成數據訪問。
當我們的Action完成了對BO的調用之后,我們應當將業務邏輯個直接結果存入到上下文對象(Context)當中,以便于稍后的View能夠得到這些數據并用于界面的繪制和展現。在通常模式下BO的執行結果都是以VO(Value Object)的方式返回的。VO既可以可以獨立的JavaBean也可以是JavaBean的集合(Collection, 例如:List 、Set) 。
3. 轉發請求 當Action完成上述操作之后Struts應根據BO的執行結果和用戶的配置將請求轉發給某個具體的JSP來實現界面的展現。由于此處引入了dorado的表現層,因此JSP的作用已被弱化為了單一的對視圖模型(ViewModel)中的各種可視化對象進行布局。
視圖模型是一種用戶描述視圖邏輯的對象。例如我們將表格要如何顯示、單擊按鈕后要完成什么動作、下拉框如何進行賦值等信息都歸納為視圖邏輯。視圖模型只負責聲明和描述對象,而不負責對象具體的擺放位置。視圖模型無法獨立的訪問View層之外的數據,視圖模型只能引用在數據模塊(Module)中定義的數據。
數據模塊是dorado的表現層中專門用于訪問外部數據的一種對象。例如在此處的開發模式當中我們就利用數據模塊來訪問BO返回的執行結果。
4. 值對象(VO)的傳遞 由于我們不能把數據模塊的激活和BO的調用看作是一個同步的過程。因此數據模塊無法直接得到BO返回的執行結果,而只能通過上下文對象來獲取BO返回的VO。此處的上下文對象一般是指Request對象的Attributies屬性集。
數據模塊在得到VO之后需要自動將VO中包含的信息反射成dorado中的數據集(Dataset)。由于此種數據轉化在某些極端的情況是非常復雜的(例如VO的多級集合嵌套),因此我們必要定義一些描述信息來輔助dorado按照正確的方式進行數據轉換。值得慶幸的是dorado的Studio可以自動生成絕大部分的描述信息。我們只需要根據實際情況的在必要的時候對這些描述信息做少量的調整就可以了。
5. 反饋 VO的信息被正確的轉化到Dataset中之后,dorado的Module和ViewModel將按照其標準的方式運行,并最終通過JSP將視圖信息反饋給瀏覽器。此處,dorado的表現層之所以需要數據模塊、視圖模型和JSP的協同工作是為了更好的實現代碼的重用。
綜上5個步驟,我們不難看出dorado與Struts、Hibernate、Spring這些產品進行整合的關鍵在步驟4,即如何將VO轉換成dorado中的Dataset。而且事實上dorado的對象本身完全不需要對Struts、Hibernate、Spring中的任何對象進行直接調用。這種松耦合的結合方式可以充分的保證系統架構將來的靈活性和擴展性。
結論
此種開發模式與傳統的開發模式比較,其最大的優勢在于可以利用dorado大大的節省開發人員在開發Web應用表現層式的工作量,同時又為我們的應用提供非常友好、易用的用戶交互界面,將應用直接升級成新一代的富客戶端網絡應用(Rich Internet Application)。
此種開發模式與標準的dorado的開發相比將會帶來開發工作量的明顯加大,不過同時在開發模式上的標準化也可以在另外一些方面為我們帶來好處。例如可以系統架構具有更好的擴展性,使得將來在需要的時候引入其他框架類產品的變得相對容易。
|
工作量 |
界面 |
擴展性 |
傳統MVC
(使用上述開發模式中除dorado外的所有技術) |
最大 |
簡陋 |
好 |
引入dorado的MVC架構
(使用本文介紹的開發模式) |
較大 |
友好
(富客戶端) |
好 |
dorado的標準開發模式
(不包含Struts、Hibernate、Spring) |
較小 |
友好
(富客戶端) |
較好 |
Dorado除可以幫我們改善界面之外,還可以為我們提供國際化、性能分析、權限配置等等諸多實用的功能,由此可見引入dorado作帶來的好處是不言而喻的,此處不做過多累述。但是對于上表中的后兩種開發方式的取舍應根據多方面的實際情況來決斷。一般而言,對于規模不是特別大,參與開發的人員不多且預計系統將來升級和擴展不是很頻繁的項目,我們仍推薦選用相對簡單且快速的第三種方式,即直接使用dorado標準的開發模式。
與了解更多詳情請瀏覽一下網址:
http://61.151.239.187/doradosample/hibernate2.show.d
http://61.151.239.187/doradosample/hibernate3.show.d