我是一個JAVA EE開發(fā)人員,從業(yè)已經(jīng)有近七、八年的時間了。對JavaEE的企業(yè)用戶開發(fā)技術(shù)框架方面的比較熟悉。對Spring,Struts,Webwork,Hibernate等流行的開源框架也一直在工作中使用。
在現(xiàn)在的MVC框架中,我比較傾向于采用WebWork,靈活輕巧Struts2其實(shí)質(zhì)就是對WebWork2的一次升級,這也說明了WebWork相對與Struts1的優(yōu)勢所在。在現(xiàn)在的RIA開發(fā)成為趨勢之后,在工作中也使用了DWR做Ajax服務(wù)器端的數(shù)據(jù)處理,并采用js template的腳本處理頁面顯示數(shù)據(jù),其中最大的痛苦就是調(diào)試JavaScript,盡管我們使用了firefox的插件調(diào)試javascrpt。
正如“JAVA程序員當(dāng)如何選擇RIA開發(fā)環(huán)境”所提到ajax的的先天缺陷,并不適合RIA的全應(yīng)用開發(fā),如果只是在頁面中的局部使用是有一些優(yōu)勢,根據(jù)具體情況選擇最合適的。
在Flex的應(yīng)用程序開發(fā)當(dāng)中,學(xué)習(xí)了很對范例,基本上瀏覽了一遍Flex的幫助文檔,并自己做了些小程序。
其中遇到最大的困難不是在程序調(diào)試方面,而且程序管理方面的,代碼混亂,難以控制,尤其在多人開發(fā)的時候,更加容易出現(xiàn)這樣的情況。這樣的情況下RIA的開發(fā)是痛苦的,不適宜的。
Cairngorm開發(fā)框架說白了就是一個FLEX應(yīng)用開發(fā)的MVC框架(自己的感覺)。將Model,view,Control獨(dú)立分開,清晰明了。
什么是Cairngorm?Cairngorm是一個通過邏輯功能、數(shù)據(jù)、用戶視圖和代碼控制的任何事情來劃分你的應(yīng)用程序代碼的基礎(chǔ)方法論,可以叫做MVC(Model-View-Control)的一種實(shí)踐方式。
Cairngorm的劃分
Model Locator(模型定位器):存儲你的應(yīng)用中所有的Value Objects(數(shù)據(jù))和共享變量在一個位置。和Http的Session對象類似,只是它存儲在Flex接口的客戶端而不是在中間件應(yīng)用服務(wù)器的服務(wù)器端。
View(界面):通過一個或者多個Flex組件(按鈕、面板、組合框、Tile等等)組合在一起的一個個命名單元,綁定數(shù)據(jù)在Model Locator(模型定位器)中,并且產(chǎn)生基于用戶操作(點(diǎn)擊、滾動、拖拽等)的自定義的Cairngorm事件。
Front Controller(前端控制器):接收Cairngorm事件并映射他們到Cairngorm命令控制器上。
Command(命令控制器):處理商業(yè)邏輯,調(diào)用Caringorm代理和(或)其它命令。
Delegate(代理):由命令創(chuàng)建,實(shí)例化遠(yuǎn)程過程調(diào)用(HTTP、Web Service等等)并且處理命令的返回結(jié)果數(shù)據(jù)。
Service(服務(wù)):定義連接遠(yuǎn)程數(shù)據(jù)存儲的遠(yuǎn)程過程調(diào)用(HTTP、Web Service等等)。
有關(guān)Cairngorm的資料:/P>
Cairngorm
是Iteration::two的開源項(xiàng)目, 是使用macromedia Flex的RIA開發(fā)的最佳
實(shí)踐(best-practice)框架.
在Cairngorm基礎(chǔ)上開發(fā)RIA, 將會在Iteration::two的專家體系和現(xiàn)有的靈活可維
護(hù)企業(yè)解決方案中達(dá)到平衡.
Cairngorm本身并不是一個完整的企業(yè)應(yīng)用, 它只是提供了一個開發(fā)的骨架, Iteration::two稱
之為體系.
在這個體系中包括以下幾個部分:
1. Business(業(yè)務(wù)邏輯部分)
2. Command(命令部分)
3. Control(控制部分)
4. Model(數(shù)據(jù)模型)
5. View(界面視圖)
6. VO(ValueObject)
我們從Control說起:
在Control中, 定義了3個基類: Event, EventBroadcaster, FrontController.
Event用于在應(yīng)用不同的層之間傳遞事件, 并攜帶事件的數(shù)據(jù). 包含type和data兩個
成員.
type存放一個區(qū)別不同事件的名稱,將會在FrontController中進(jìn)行注冊.
而在命令(Command)類中, 會對事件進(jìn)行響應(yīng).
EventBroadcaster是一個單例類(singleton), 用于廣播用戶動作對應(yīng)的事件. 使用
方法: EventBroadcaster.getInstance().broadcastEvent( ... )
FrontController稍微復(fù)雜一點(diǎn)點(diǎn). 用于將特定的用戶動作分發(fā)到指定的命令類.
FrontConroller是請求處理的核心類. 整個體系中遍布的EventBroadcaster.getInstance(
).broadcastEvent( ... )這樣的調(diào)用,
都是用來通知監(jiān)聽控制器: 用戶發(fā)出了請求. 在實(shí)際應(yīng)用中, 開發(fā)者應(yīng)該生成一個
FrontContoller的子類,
并在構(gòu)造函數(shù)中調(diào)用addCommand()注冊預(yù)期事件的處理命令. FrontController的具
體實(shí)現(xiàn)類應(yīng)該創(chuàng)建一次而且只能創(chuàng)建一次.