`
lixinye0123
  • 浏览: 333345 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

RIA framework - Cairngorm 2 淺析

    博客分类:
  • Flex
阅读更多

隨者 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 
分享到:
评论

相关推荐

    puremvc-js-multicore-framework-master

    在JavaScript开发中,PureMVC可以用于构建各种Web应用,包括单页应用(SPA)、富互联网应用(RIA)等。其简洁的设计和强大的组织能力使得它可以很好地适应复杂的项目结构。 8. **扩展和优化** 除了基本的PureMVC...

    Flex轻量级开发框架-Cairngorm介绍

    相比于其他框架如PureMVC,Cairngorm更加简单易用,特别适合于小型到中型的RIA项目。它通过一系列的设计模式和技术手段,使得开发出的应用程序具有良好的结构化和可维护性。 #### 三、Cairngorm框架结构详解 ...

    rapid-framework-common-3.9.3.20100923-src doc

    这使得开发者可以创建富互联网应用程序(RIA),提供更加丰富的用户界面和交互体验。 8. **FAQ和Snapshot** `faq.html`包含了常见问题解答,为开发者在使用过程中遇到的问题提供了参考答案。而`snapshot.html`可能...

    《R语言实战(第2版)》_RiA2-master.zip

    《R语言实战(第2版)》_RiA2-master

    XUI RIA Framework-开源

    XUI 是用于构建智能应用程序的 Java 和 XML RIA 平台。 Swing、AWT 和其他小部件集可用于一系列硬件。 XUI 的模块化框架可以帮助应用程序开发的许多方面。 可以使用 NetBeans 和 Eclipse。

    sierra-os :: PHP RIA Framework-开源

    sierra-os是一个PHP Rich Internet Application用户界面框架。 sierra-os仅使用XHTML,CSS,Javascript和AJAX在浏览器窗口中模拟桌面UI。 它提供了一个基于插件的体系结构,以简化应用程序的部署。

    dwz-ria-1.4.1

    DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. 设计目标是简单实用,快速开发,降低ajax开发成本。 欢迎大家提出建议,我们将在下一版本中进一步调整和完善功能....

    Memória SPI - AT26F004

    ### Memória SPI - AT26F004:详尽解析与编程支持 #### 引言 在电子设计领域,闪存(Flash Memory)作为非易失性存储器的一种,因其高速读写、高可靠性和良好的电擦除性能,在嵌入式系统中占据着重要地位。其中,...

    dwz-ria-1.4.6.版本本地演示资源包

    在“dwz-ria-1.4.6 版本本地演示资源包”中,我们可以深入理解 DWZ UI 的核心特性和最新改进。 1. **DWZ UI 框架概述** DWZ UI 提供了一系列组件和工具,如表格、表单、对话框、菜单、按钮等,帮助开发者快速构建...

    奥普特AOI专用光源(OPT-RIA系列).pdf

    奥普特AOI专用光源(OPT-RIA系列)pdf,奥普特AOI专用光源:RIA系列光源专用于电路板焊锡检测;不同角度三色照明,凸显焊锡三维信息,层次清晰;漫射板导光,光线均匀,减少反光;红、蓝、绿、三色搭配,其它多种颜色...

    Silverlight Cairngorm-将Cairngorm移植到.NET

    Cairngorm是一个轻量级的MVC(Model-View-Controller)框架,常用于构建富互联网应用程序(RIA),在Adobe Flex社区中广受欢迎。本文档和相关示例旨在帮助开发者理解如何在.NET环境中复用和扩展Cairngorm的架构。 ...

    DWZ-RIA-1.2Final

    【DWZ-RIA-1.2Final】是一个专注于富互联网应用(Rich Internet Application,简称RIA)开发的国产前端框架,其主要目标是提供一套高效、易用、功能丰富的JavaScript工具集,帮助开发者快速构建交互性强、用户体验...

    DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.

    DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. DWZ富客户端框架设计目标是简单实用、扩展方便、快速开发、RIA思路、轻量级 DWZ框架支持用html扩展的方式来代替...

    DWZ富客户端框架dwz-ria-1.4.6

    DWZ富客户端框架dwz-ria-1.4.6是一款专为开发高效、美观的Web应用程序而设计的后台框架。这款框架集成了多种技术,旨在简化开发过程,让开发者无需深入理解AJAX和jQuery等复杂技术,也能快速构建出与专业级应用相...

    RIA框架Cairngorm

    Cairngorm是Abode推出的Flex RIAs框架,其实是MVC的发扬光大,它由七大部分组成。 Model(数据模型M):使用singleton(单例)模式共享变量; VO( Value Object):储存特定值对象变量。 VIew(视图V):将Model的数据...

    DWZ富客户端框架(jQuery RIA framework) 1.5.2.zip

    DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. DWZ富客户端框架 1.5.2 更新日志:2016-01-14 调整DWZ插件注册和初始化机制;修复export插件bug;添加百度地图...

    Cairngorm2.rar

    Cairngorm 2.1是该框架的一个重要版本,它包含了三个主要的压缩子文件:`cairngorm2_2_1-bin.zip`、`cairngorm2_2_1-doc.zip`和`cairngorm2_2_1-src.zip`。 `cairngorm2_2_1-bin.zip` 文件通常包含框架的编译后库...

Global site tag (gtag.js) - Google Analytics