pureMVC介绍及学习
生活随笔
收集整理的這篇文章主要介紹了
pureMVC介绍及学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 ? 簡介
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架構視圖部分的關鍵構造。引入它是為了減少應用和視圖之間的依賴,從而降低整個系統的耦合程度。[1] 2初始化
首先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之間的映射關系。 3運行時
最后是一個startup方法來作為整個程序的開始,發出一個表示開始的notification,這個notification則觸發了StartupCommand,這是一個多條Command的執行序列。分別是Model和View的準備command,它們完成了LoginProxy的注冊,LoginMediator的注冊并且把LoginPanel顯式在舞臺上等待用戶輸入 我發帖的經驗不多,只是按照自己的思路寫了些東西,如果大家有不明白的地方我再細細解答。最近大概還準備結合這個例子,對其中用到的幾個設計模式進行論述,歡迎高手來討論。 4優缺點
優點
1,支持多語言| Language | Targets |
| ActionScript 2 | Flex 1.5, Flash 8, FlashLite |
| ActionScript 3 | Flex 2, 3, Flash 9/CS3, AIR. |
| C# | .NET 1.0/2.0 Silverlight, Windows Mobile and Pocket PC. |
| ColdFusion | ColdFusion 8 |
| haXe | JavaScript, Flash 8, Flash 9 and the Neko VM. |
| Java | Java Mobile, Standard and Enterprise Editions (ME, SE, EE), JavaFX, Servlets, Applets, and GWT |
| JavaScript | Browser neutral |
| Objective C | Apple iPhone and Mac |
| PHP | PHP 5 |
| Python | Python 2.5 for wxPython, Google App Engine, Pyjamas [13] |
| Ruby | ? |
| C++ | MSVC 8.0/9.0/10.0, MinGW 3.4.5, GNU G++, Embarcadero C++ 6.21 |
缺點
1,靈活度過高,要清晰控制一個事務過程不容易。 這個是由通知無向性決定的,很難確定誰來監聽某一個通知,通知不利于調試。 2,代碼冗余比較大,Mediator、Proxy等繼承類的冗余代碼,但是ActionScript不支持Generics以及Reflection能力弱,使得難以消減代碼。5特點
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層。 代碼下載地址:https://github.com/PureMVC/puremvc-as3-standard-framework 相關學習資料:http://wiki.9ria.com/PureMVC
轉載于:https://www.cnblogs.com/fuland/p/3632852.html
總結
以上是生活随笔為你收集整理的pureMVC介绍及学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【HeadFirst设计模式】8.模板方
- 下一篇: aapt: error while lo