網上一段簡短扼要的cairngorm介紹:
Cairngorm的組成:
1. Model Locator:保存應用的ValueObject(數據)和共享變量,與HttpSession類似,只不過是保存在客戶端而不是在服務器端而已
2. View:一個或者多個Flex組件(按鈕、Panel、下拉框等等)組合在成一個被命名的單元。綁定Model Locator中的數據,根據用戶動作(點擊、滾動、拖放)產生自定義的Cairngorm事件。
3. Front Controller:接收Cairngorm事件,并映射到對應的Cairngorm命令。
4. Command:處理業務邏輯,調用Cairngorm的代理或者其他命令,更新Model Locator中的Value Object和變量值。
5. Delegate:在命令中創建,初始化一個遠程調用(Http, WebService等等),并將返回結果傳遞給Command。
6. Service:定義遠程調用連接遠程的數據存儲。
Cairngorm的工作方式:
1. 客戶端界面由各個View組成,View通過綁定Model Locator的成員來顯示數據。View根據用戶操作生成事件。這些事件由Front Controller廣播并接收,然后映射到相應的命令。命令包含業務邏輯、創建代理來完成操作,處理代理返回的結果,并更新Model Locator的數據。因為View是與Model Locator中的數據綁定的,因此Model Locator中數據更新后,View自動反應出數據的變化。由代理調用服務并返回處理結果不是必須的,但是這是推薦做法。
官方說明:
Cairngorm是Adobe Labs上的Flex MVC框架
Cairngorm文檔很少,其Wiki上有核心開發人員
Steven Webster寫了6篇文章來介紹
Cairngorm:
Part I - Introducing Cairngorm
Part II - Keeping State on the Client
Part III - Architecting the View
Part IV - Feature-driven Development
Part V - Server-side Integration
Part VI - Rapid and Consistent Development with Cairngorm and Flex
Steven WEbster是Adobe RIA的practice director。
第一部分、介紹
Cairngorm:
介紹
這6篇文章的系列展示了一個叫
Cairngorm的面向Flex開發人員的開源框架。在這個系列里我解釋了
Cairngorm幕后的主要思想和
Adobe給出的設計挑戰。
Cairngorm是一個合適的開發架構。
這個系列使用
Cairngorm Store示例程序來解釋當基于
Cairngorm開發時Adobe Consulting關于scoping、estimating和delivering
富Internet應用(RIA)的思考。我也解釋了
Cairngorm的多種概念并深入
Cairngorm Store的實現。
最后,我通過以
Cairngorm開發人員的角度添加一個新特性到
Cairngorm Store程序來示范基于
Cairngorm微架構發布RIA的主要好處。通過這一步,你可以自己看到
Cairngorm的好處。
Cairngorm當然不是構建Rich Internet Application的唯一方式。但是,Adobe Consulting在已有的Flex程序開發經驗的基礎上曾
使用本系列文章里的信息來幫助大量客戶和合伙人成功發布大規模Flex RIA。
這個系列從理解
Cairngorm的動機和概念到基于
Cairngorm架構你自己的程序完整的介紹了
Cairngorm。
第一部分提供了理解
Cairngorm架構的上下文和背景,而不是從一開始就一頭扎進代碼里。我討論了框架,并澄清了程序框架和架構
框架之間的區別。然后我介紹了設計模式和微架構概念。最后,我給出
Cairngorm出現的背景:它的歷史和roadmap。
在第二至六部分,你將在客戶端和一個J2EE服務器端使用Flex和
Cairngorm開發一個零售商業程序。
澄清框架的定義
在軟件開發里,框架這個術語是承受最多和最濫用的術語。當開發人員寫了大量代碼并認為足夠重要來在其他項目中使用,他們趨向
于給代碼賦予這個術語。這樣就有了許多類型的框架:持久框架、事務框架、日志框架、面向方面框架、動畫框架、單元測試框架等等
在深入討論
Cairngorm框架之前,解釋Adobe Consulting團隊與客戶和合伙人分享的關于框架認識的區別很重要 -- 特別是程序框架和架構框架間的區別。
程序框架
Flex是程序框架的一個典型的例子。即將發布的Flex 2.0事實上在架構上區別于程序框架 -- 通常在Adobe里稱為"app model"。Flex框架2.0提供豐富的類庫來提供高粒度功能性供開發人員創建自定義的代碼。例如,Flex 2.0集合API提供開發人員用來創建受管的數據集合的底層功能性。開發人員組合這些集合為他們的特殊程序的高級對象。而且,程序框架如Flex也暴露了程序級的服務,如history管理、layout管理、cursor管理、exception handling、i18n、logging等等。
當框架提供高粒度類庫來給開發人員提供高級別靈活性,或者當框架提供對多開發人員的項目有用的程序級服務時,我們仍可以稱其為"程序框架"。
另一個程序框架的例子是Adobe Consulting使用的非常成功的
FAST框架。FAST框架提供了程序服務如logging、tracing和繼承了Flex1.x框架自己的RPC data services的value-add類庫,這在John Bennett的文章里也有所解釋:
Faster Development with the Flex Application Starter Toolkit(FAST)
架構框架
架構框架是完全不同的野獸。架構框架除了提供給程序可以懸掛的基礎組織 -- 提供骨架和內部結構來負載肌肉外不提供任何額外的服務給開發人員
換句話說,架構框架提供你的程序的技術架構通常的入口點。
使用設計模式
不關注軟件工程里重大的改進 -- 設計模式的話,很難談論技術架構。
"there is nothing new under the sun"這句話在軟件工程原則里是再正確不過了。開發人員發現他們在程序開發中經常遇到不變的工程問題。而他們的解決方案也和所遇到的問題一樣重復不變。不管這些重復出現在哪里,你可以將這些解決方案視為"模式"。
設計模式的誘惑
現在有一個警告:當軟件工程師第一次遇到設計模式時,對工程問題解決方案的分類的意識可能非常強大。通常開發人員發現問題的子集并希望尋找其他可以利用的設計模式。盡管如此,"when all you have is a hammer, everything looks like a nail"這句老諺語在這里是適用的。你經常會在程序里發現"模式過度",開發人員拋棄了類以及協作的責任,而是把任何東西都扔到Factory、Flyweight、Observer或Decorator里。
但是,合理的使用設計模式會成為開發人員的工具箱里一個強大的工具。設計模式不僅僅提供問題常見的解決方案,而且開發人員在程序中使用設計模式的方式也指示了實現的目的。例如,不管何時你在代碼中使用Singleton時,你理解這是一個應該只有一個實例的類。類似的,無論何時你遇到一個Factory時,你會意識到工廠類可以產生一些不同的對象。
微架構作為設計模式的組合
...
Cairngorm的歷史
iteration::two是我和Alistair McLeod創立的軟件咨詢公司,我們意識到要面對的許多在J2EE程序開發里成功解決的設計挑戰在RIA世界里仍然存在。我們回到Flash、Flash Remoting和J2EE的RIA開發歷史。
瀏覽Sun Microsystems提倡的設計模式
Core J2EE Pattern Catalog,我們首先在Reality J2EE: Architecting for
Macromedia Flash MX(Pearson Education, 2003)這本書里展示了Flash中這些模式的應用。隨著Flash MX 2004的發布,我們在
Macromedia Flash MX 2004 ActionScript2.0 Dictionary(Macromedia Press, 2003)一書的"ActionScript 2.0 Design Patterns
for RIA Development"一章中也展示了這些模式。
由于RIA技術平臺從Flash作為設計中心到Flex編程越來越成熟,使用這些模式的動機也出現了。但是,Flex編程模型給我們更優雅的方式來實現這些模式。而且,一些我們認為對Flash RIA開發人員非常有用的模式(例如|ViewHelper模式)在Flex RIA世界變得不再有用,我們也創建了一些自己的新的Flex特有的模式,例如ModelLocator模式。
在
MAX 2004中我們宣布了我們發布基于Flex的開源
Cairngorm框架的決定,這在社區中得到廣泛影響。
Cairngorm教會你什么
Cairngorm是一個宣布了3個重要領域的微架構:
1, 在客戶端處理用戶動作
2, 封裝業務邏輯和服務端交互
3, 在客戶端管理狀態并展示該狀態到用戶界面
Cairngorm提供一個微架構(一些設計模式的集合),目標是解決上述重復出現的3個設計挑戰。
當你閱讀本系列文章時,你將學習如下內容:
1, Front Controller和Command模式怎樣實現"Service to Worker"微架構來監聽和響應用戶請求
2, Business Delegate和Service Locator模式怎樣工作來讓你重用業務邏輯并封裝它來在客戶端和服務端開發團隊之間建立
一個清晰的契約并且與服務端實現無關,如Web Services,EJB,ColdFusion組件甚至HTTP上使用XML的RESTful 架構。
3, J2EE里的Value Object模式怎樣與ModelLocator模式協作來作為一個優雅的策略使用豐富用戶體驗維護有狀態客戶端
Cairngorm的當前狀態