Posted on 2009-07-31 13:26
sailor 閱讀(153)
評論(0) 編輯 收藏
ADF(Application Development Framework)是Oracle公司為簡化Java EE程序開發的復雜性專門開發的一種解決方案,ADF通過減少實現設計模式和應用程序框架的代碼量,簡化了Java EE的開發。ORACLE為ADF提供的最新IDE是Jdeveloper 11g,它應該是目前對ADF框架支持最好的工具——從設計到最終部署整個過程都提供了非常好的支持。
1 Oracle ADF的架構
Oracle ADF的架構是基于MVC設計模式的,其架構如圖所示。

下圖說明了ADF各個模塊在一個完整的Web Application中的結構關系。

1.1 ADF Business Components
在以數據庫為中心的業務邏輯中,ADF提供了下面三種關鍵部件: Entity Object, ViewObject, Application module。這三層建立的順序是這樣的,先建立持久層的實體對象(Entity Object),然后建立數據訪問層的視圖對象(ViewObject),最后建立接口層(Application module)。其中建立持久層的實體對象主要是和數據庫的表或者同義詞對象建立關聯,數據訪問層的視圖對象(ViewObject)是基于實體層的實體對象建立的(當然也可以只建視圖對象,不過這樣就不是基于實體對象的,而是基于SQL),主要是進行數據庫的訪問,而接口層是整個Business Service 層和Model層的接口,在數據訪問層建立的視圖對象需要注冊到接口層中,這樣在Model層中才可以訪問。
1.2 ADF Model層
ADF model是ADF框架最核心的模塊——它實現了JSR-227規范,包括兩部分:Data Control和declarative bindings(聲明式綁定)。
Data Control 通過使用標準元數據描述業務層中操作和數據集合(包括屬性信息,方法調用等),從而抽象了業務邏輯的實現。當開發人員創建好接口層(Application module)時,Data Control也就自動創建好了,它包含了接口層中所有的功能。也就是說所有訪問業務對象的方法現在都通過Data Control來進行,這樣使得綁定層使用一種方式來訪問數據,不論后臺的數據對象是如何獲取得(數據庫,webservice, javabean, csv等)??梢园袲ata Control看做是一種代理機制,從而隔離了業務邏輯層和UI層。
Declarative bindings (聲明式綁定)則是抽象了從DataControl中獲取數據和調用的細節。其中包括三種基本的聲明式綁定對象類型:Iterator bindings,Value bindings,Action bindings。
由于 ADF model是ADF框架最核心的模塊,也是最復雜的地方。而由于DataControl都是自動建好的,通常開發人員不需要去關心它。所以在這一層最主要的就是理解Declarative bindings, 在開發過程中通常得在backing Bean中來訪問這些綁定對象來實現一些特定的功能,在下一篇中會列出一些在backing Bean中常用的訪問綁定對象的代碼。
1.3 ADF Controller
Controller層是用來控制頁面流程的。ADF Controller在實現了JSF標準的基礎上進行了擴展,提供了更大的頁面流功能。
1.4 ADF Faces Rich Client
ADF Faces Rich Client (RC)是基于JSF標準,內建有AJAX功能的組件。據說ADF Faces RC提供了超過100個富客戶端組件,其中包括了內置Flash和SVG數據可視化組件。通過使用這些組件,用戶帶來極大的視覺沖擊。除了使用ADF Faces RC,Oracle ADF也對Apache MyFaces Trinidad視圖技術提供了完全的支持。
2 一些關于學習ORACLE ADF的資料
1. ADF API和關于ADF框架的詳細文檔
2. jdeveloper 11g相關
3. 一些簡單的ADF在線視頻
4. ADF Faces RC Component最佳實踐下載
5. ADF Faces Data Visualization Components Demo
相信學習使用過Oracle adf都抱怨過其復雜性。雖然ADF框架倡導的是快速開發,但這是在開發人員熟悉該框架的前提下。相比于其它MVC框架,其復雜性造成的漫長的學習周期只能讓其叫好不叫座,以及技術不開放,只有授權的用戶可以申請源代碼,相關的學習文檔也比較凌亂(最新的中文文檔基本上沒有),這些都是阻礙這個優秀的框架在國內流行的因素。
原文:http://liuxuan620.javaeye.com/blog/371253