Cairngorm是Iteration::two的開源項目, 是使用macromedia Flex的RIA開發的最佳實踐(best-practice)框架.
在Cairngorm基礎上開發RIA, 將會在Iteration::two的專家體系和現有的靈活可維護企業解決方案中達到平衡.
Cairngorm本身并不是一個完整的企業應用, 它只是提供了一個開發的骨架, Iteration::two稱之為體系.
在這個體系中包括以下幾個部分:
1. Business(業務邏輯部分)
2. Command(命令部分)
3. Control(控制部分)
4. Model(數據模型)
5. View(界面視圖)
6. VO(ValueObject)
我們從Control說起:
在Control中, 定義了3個基類: Event, EventBroadcaster, FrontController.
Event用于在應用不同的層之間傳遞事件, 并攜帶事件的數據. 包含type和data兩個成員.
type存放一個區別不同事件的名稱,將會在FrontController中進行注冊.
而在命令(Command)類中, 會對事件進行響應.
EventBroadcaster是一個單例類(singleton), 用于廣播用戶動作對應的事件. 使用方法: EventBroadcaster.getInstance().broadcastEvent( ... )
FrontController稍微復雜一點點. 用于將特定的用戶動作分發到指定的命令類.
FrontConroller是請求處理的核心類. 整個體系中遍布的EventBroadcaster.getInstance().broadcastEvent( ... )這樣的調用,
都是用來通知監聽控制器: 用戶發出了請求. 在實際應用中, 開發者應該生成一個FrontContoller的子類,
并在構造函數中調用addCommand()注冊預期事件的處理命令. FrontController的具體實現類應該創建一次而且只能創建一次.
通常的做法是這樣的: 在主應用中, 將FrontController的子類作為一個Tag進行申明,
* <p>
* <code>
* <mx:Application xmlns:control="com.domain.project.control.LoginController" ... >
*
* <control:LoginController id="controller" />
*
* ...
*
* </code>
* </p>
FrontController的處理實質上是這樣的, 在調用addCommamd時, 將處理命令保存在數組中, 將與之對應的事件處理對象注冊為FrontController本身,
在事件觸發, 調用FrontController的handleEvent時, 調用executeCommand, 在executeCommand中, 先在數組查找出事件對應的命令,
調用命令的execute方法. 這就要求所有的命令都實現Command接口
(內容較多, 未完待續)