pureMVC

pureMVC

MVC模式建立的輕量級的應用框架
Pure MVC是在基于模型、視圖和控制器MVC模式建立的一個輕量級的應用框架,這種開源框架是免費的,它最初是執行的ActionScript 3語言使用的Adobe Flex、Flash和AIR,現在已經移植到幾乎所有主要的發展平台,目前支持兩個版本框架:标準和多核,總之,标準版提供了一種簡單的編碼分離的方法,按照MVC設計概念。
    中文名:pureMVC 外文名: 适用領域: 所屬學科:IT

簡介

Pure MVC是在基于模型、視圖和控制器MVC模式建立的一個輕量級的應用框架,這種開源框架是免費的,它最初是執行的ActionScript 3語言使用的Adobe Flex、Flash和AIR,現在已經移植到幾乎所有主要的發展平台,目前支持兩個版本框架:标準和多核,總之,标準版提供了一種簡單的編碼分離的方法,按照MVC設計概念。除此之外,多核版本允許多個PureMVC應用運行在同一個虛拟機;模塊化編程

在PureMVC實現的經典MVC元設計模式中,這三部分由三個單例模式類管理,分别是Model、View和Controller。三者合稱為核心層或核心角色。

PureMVC,就如同它的名字是,它是一個純粹的小巧的MVC框架,支持多語言。

PureMVC有一個名為Mediator的構造,顧名思義,它就是Mediator模式的實現,充當視圖API和程序其餘部分的API之間的中介。這是PureMVC實現MVC架構視圖部分的關鍵構造。引入它是為了減少應用和視圖之間的依賴,從而降低整個系統的耦合程度。

初始化

首先Facade是一個單例。在它的構造函數裡除了單例應有的部分外,還有一句initializeFacade()具體的實現是

protected function initializeFacade( ):void {

initializeModel();

initializeController();

initializeView();

}

很明顯,這裡揭示了Facade主要幹3件事情,初始化Model,Controller,View,而這三個都是單例

Model用于保存所有的Proxy,View用于保存所有的Mediator還可以注冊一些對notification的監聽,而Controller主要是保持一些Command。這些類提供了注冊的方法也提供了查詢的方法。那麼Facade這個類本身也提供了對于Proxy,Mediator,Controller的訪問接口。這正符合Facade的本意:将衆多的對外接口統一起來,但是也不屏蔽底層的接口。

然後例子中的程序複寫了其中一個initializeContrller()的方法

override protected function initializeController():void

{

super.initializeController();

registerCommand( ApplicationConstants.NOTE_STARTUP,StartupCommand);

registerCommand( ApplicationConstants.NOTE_LOGIN, LoginCommand);

}

建立了兩對notification和Command之間的映射關系。

運行時候

最後是一個startup方法來作為整個程序的開始,發出一個表示開始的notification,這個notification則觸發了StartupCommand,這是一個多條Command的執行序列。分别是Model和View的準備command,它們完成了LoginProxy的注冊,LoginMediator的注冊并且把LoginPanel顯式在舞台上等待用戶輸入

我發帖的經驗不多,隻是按照自己的思路寫了些東西,如果大家有不明白的地方我再細細解答。最近大概還準備結合這個例子,對其中用到的幾個設計模式進行論述,歡迎高手來讨論。

優缺點

優點

1,支持多語言

2,支持标準和多核,标準版提供代碼分離的方法,多核版支持模塊化

缺點

1,靈活度過高,要清晰控制一個事務過程不容易。這個是由通知無向性決定的,很難确定誰來監聽某一個通知,通知不利于調試。

2,代碼冗餘比較大,Mediator、Proxy等繼承類的冗餘代碼,但是ActionScript不支持Generics以及Reflection能力弱,使得難以消減代碼。

特點

PureMVC中還有另外一個單例模式類——Facade,Facade提供了與核心層通信的唯一接口,以簡化開發複雜度。

Model與Proxy

Model保存對Proxy對象的引用,Proxy負責操作數據模型,與遠程服務通信存取數據。

這樣保證了Model層的可移植性。

View與Mediator

View保存對Mediator對象的引用。由Mediator對象來操作具體的視圖組件(View Component,例如Flex的DataGrid組件),包括:添加事件監聽器,發送或接收Notification,直接改變視圖組件的狀态。

這樣做實現了把視圖和控制它的邏輯分離開來。

Controller與Command

Controller保存所有Command的映射。Command類是無狀态的,隻在需要時才被創建。

Command可以獲取Proxy對象并與之交互,發送Notification,執行其他的Command。經常用于複雜的或系統範圍的操作,如應用程序的“啟動”和“關閉”。應用程序的業務邏輯應該在這裡實現。

Facade與Core

Facade類應用單例模式,它負責初始化核心層(Model,View和Controller),并能訪問它們的Public方法。

這樣,在實際的應用中,你隻需繼承Facade類創建一個具體的Facade類就可以實現整個MVC模式,并不需要在代碼中導入編寫Model,View和Controller類。

Proxy、Mediator和Command就可以通過創建的Facade類來相互訪問通信。

Observer與Notification

PureMVC的通信并不采用Flash的EventDispatcher/Event,因為PureMVC可能運行在沒有Flash Event和EventDispatcher類的環境中,它的通信是使用觀察者模式以一種松耦合的方式來實現的。

你可以不用關心PureMVC的Observer/Notification機制是怎麼實現的,它已經在架内部實現了。你隻需要使用一個非常簡單的方法從Proxy, Mediator, Command和Facade發送Notification,甚至不需要創建一個Notification實例。

Notification可以被用來觸發Command的執行

Facade保存了Command與Notification之間的映射。當Notification(通知)被

發出時,對應的Command(命令)就會自動地由Controller執行。Command實現複雜的交互,降低View和Model之間的耦合性。

Mediator發送、聲明、接收Notification

當用View注冊Mediator時,Mediator的listNotifications方法會被調用,以數組形式返回該Mediator對象所關心的所有Notification。

之後,當系統其它角色發出同名的Notification(通知)時,關心這個通知的Mediator都會調用handleNotification方法并将Notification以參數傳遞到方法。

Proxy發送,但不接收Notification

在很多場合下Proxy需要發送Notification(通知),比如:Proxy從遠程服務接收到數據時,發送Notification告訴系統;或當Proxy的數據被更新時,發送Notification告訴系統。

如果讓Proxy也偵聽Notification(通知)會導緻它和View(視圖)層、Controller(控制)層的耦合度太高。

View和Controller必須監聽Proxy發送的Notification,因為它們的職責是通過可視化的界面使用戶能與Proxy持有的數據交互。

不過對View層和Controller層的改變不應該影響到Model層。

相關詞條

相關搜索

其它詞條