隨者 Itereation::Two被併入 Adobe 成為 Consulting Team與 Flex 2 /AS3 的面市,Cairngorm這個framework的正統性與普及性也跟者水漲船高,最近專為 Flex 2 量身打造的新版 Cairngorm v2 也剛放出來,所以早上花了點時間再 review一次,看看有沒有什麼大改變,本文就是一早研究心得的速記。
簡單來說,Cairngorm是一個framework,提供了許多現成的 class library、運作機制與template,目地是幫助工程師更有紀律的開發中、大型專案(by saying mid to large I mean 5-10 engineers in several teams and project time ranges from months to years)。
它的架構很單純,只有六大項
-business
-commands
-control
-model
-view
-vo
Cairngorm在最上層定義了六大塊的基礎結構,然後在每個 project 再 extends 後加入自已需要的功能,這也是大部份 framework 的玩法,例如 ARP, Struts, Cake等。
以 Cairngorm 2 內附的 login 例子來說,它的事件流程是這樣的:
1. 畫面上有 帳號、密碼兩個文字框與一個 login按鈕,當user按下 button時,form會將兩個文字欄位的內容打包成一個 LoginVO(Value Object),然後將此事件廣播出去
2. 背景裏的 FrontController早先會先透過 addCommand()註冊偵聽這個事件,並且轉手將它交給 Command 處理
3. Command裏面只做兩件事,一是建立一個 delegate物件,透過它去連回server(細節請看下一步),二是建立好 responder 物件,裏面有 onResult, onFault兩個 callback handler
4. delegate 則是真正跟 server連線傳接資料之所在(講的fancy一點就是它會連回 middle tier做資料交換與同步),在這個物件裏面可以決定要用 remoting, web service, http get/post 等任何一種方式來傳遞,只要確定當結果回來時,要正確的 mapping回 responder裏面的 callback handler
5. 當 repsonder接到result後,就做後續的處理;在Cairngorm的設計裏,有一個叫做 ModelLocator 的 central storage,這個玩意基本上是個 Singleton Class,裏面放一堆程式執行期間要共用的變數與物件,以前大家都塞在 _global裏,後來 AS2時代我叫它 GlobalSettings (也有人叫它 SystemInfo),總之意義都一樣,以這個例子來說,responder就會將接到的result更新到 ModelLocator裏面。
6、最特別的一點是在 ModelLocator被更新後,由於它裏面每個 member 都被設定為 binding,因此資料一改變,就會牽動所有bind到它身上的物件,例如 view的切換或 dataProvide的更新。
至此一個事件流程就跑完了。
這裏面比較有意思的地方有幾個:
-每個tier切割的很乾淨,甚至太乾淨了(你聽過水清則無魚吧?),分工明確且單純,因此可以說是非常的 decoupling,對大型專案來說這是非常重要的。
-command 與 delegate 徹底分離,他的考量是這樣如果將來要從 Web Service 跳到 remoting甚至更炫一點的 Flex Enterprise Service時,只要換掉 delegate層就好,responder 的部份可維持不動。
-他善用 flex 2裏 event bubbling的特性,讓所有的事件都bubble到最上層的 Application後再集中做處理,只是這樣做的小麻煩就是一定要用自製的 event class去廣播才行。
簡單結論:
1、Cairngorm 是一個設計的想當不錯的framework,但實務上應用的機率實在不高,主要原因是他的優點也就是他的缺點。例如切割的太乾淨導致開發時間反而延長,對中小型的專案(五十萬以下二到三人合作)來說優點變成了負擔。
2、他有部份設計雖然乍看之下很 decoupling,但實作上卻會碰到難以避免的麻煩,例如 command 雖然設計美意是可重覆使用,但實際上每個案子的差異性卻會導致這種機率變的很低;另一個例子是 command 與 delegate分離,實務上當從 web service切換到 remoting時,如果傳回的資料結構與型態不同,勢必得將 callback handler重新寫過,所以一開始這樣的分離設計就是有問題的。
3、簡單講,想到每做一件事(例如 login)就要寫六個檔案(controller, command, delegate…)就覺得有點沒力,就算再自虐的 java工程師大概也不會想輕易嚐試,更別提如果這是在debug,光是trace到正確的檔案恐怕就得花六倍的時間。
正如古諺所云:Know the rules so you know what you are breaking.
知道有Cairngorm 這個東西還是挺不錯,至少知道那些地方可以吸收使用,那些地方可以再改良,更重要的是如果有一天真要上場處理超大型專案,至少也知道該從那裏下手使力(死道友不死貧道?)。
最後,做個小小民調:
你已經在使用 Flex 2 了嗎?(即使只是裝起來稍做把玩)
如果是,請留個言出個聲吧,真好奇在中港台三地已經有多少玩家們投入這個領域了。
下載網址
by jeremy
分享到:
相关推荐
本文对Flex轻量级开发框架Cairngorm进行了详细的描述,相信对急于想学些本框架的开发人员来讲有很大用处。
XUI 是用于构建智能应用程序的 Java 和 XML RIA 平台。 Swing、AWT 和其他小部件集可用于一系列硬件。 XUI 的模块化框架可以帮助应用程序开发的许多方面。 可以使用 NetBeans 和 Eclipse。
Memória SPI - AT26F004
sierra-os是一个PHP Rich Internet Application用户界面框架。 sierra-os仅使用XHTML,CSS,Javascript和AJAX在浏览器窗口中模拟桌面UI。 它提供了一个基于插件的体系结构,以简化应用程序的部署。
DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. 设计目标是简单实用,快速开发,降低ajax开发成本。 欢迎大家提出建议,我们将在下一版本中进一步调整和完善功能....
dwz-ria-1.4.6.版本本地演示资源包,官方同步更新
UAPV63-RIA-单据开发.pdf
R语言实践第三版代码,刚刚找到的,分享下
DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. DWZ富客户端框架设计目标是简单实用、扩展方便、快速开发、RIA思路、轻量级 DWZ框架支持用html扩展的方式来代替...
DWZ-RIA-1.2Final国产框架,js框架,十分好用
DWZ富客户端框架dwz-ria-1.4.6,为你量身定做的,Web应用程序后台框架,非常漂亮,简单实用,不需要懂ajax,Jquery,就可以做出跟他们一样的效果喽
Cairngorm是Abode推出的Flex RIAs框架,其实是MVC的发扬光大,它由七大部分组成。 Model(数据模型M):使用singleton(单例)模式共享变量; VO( Value Object):储存特定值对象变量。 VIew(视图V):将Model的数据...
DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. DWZ富客户端框架 1.5.2 更新日志:2016-01-14 调整DWZ插件注册和初始化机制;修复export插件bug;添加百度地图...
奥普特AOI专用光源(OPT-RIA系列)pdf,奥普特AOI专用光源:RIA系列光源专用于电路板焊锡检测;不同角度三色照明,凸显焊锡三维信息,层次清晰;漫射板导光,光线均匀,减少反光;红、蓝、绿、三色搭配,其它多种颜色...
DWZ富客户端框架 v1.1.4稳定版本 (jQuery RIA framework) 国人开发.zip
Flex+4.0+RIA开发宝典-代码 Flex+4.0+RIA开发宝典-代码 Flex+4.0+RIA开发宝典-代码
DWZ富客户端框架(jQuery RIA framework),是中国人自己开发的基于jQuery实现的Ajax RIA开源框架。
Cairngorm exemplifies and encourages best-practices for RIA development advocated by Adobe Consulting, encourages best-practice leverage of the underlying Flex framework, while making it easier for ...
UAP63-1RIA-单据开发 用友官方资料