PureMVC,就如同它的名字是,它是一個純粹的小巧的MVC框架。許多人都錯誤地把PureMVC誤認為它是一個Flash的MVC框架或者是Flex的MVC框架。既然它是一個純框架,那么,它就不僅僅是支持某種特定的語言,它的設計是與語言無關的。去過它的官網的人都看到,它支持了好多種常用的編程語言,下面是它的官網的一個支持的開發語言的截圖:

看到了上面的C#,學ASP.NET的人是不是看到了福音了?平時看到JSP有Struts,Hibernate,Spring等眾多優秀的框架,而.NET的好像還沒有,心里真是一百個的不爽,現在我們終于也有MVC框架了。雖然微軟現在正在出一個ASP.NET MVC框架,但是它現在還是Preview5,也不知道什么時候才能出正式版,期待一下吧,微軟出的東西應該是很容易使用的。不過,據說這個框架只支持.NET3.5的版本,如果真是這樣的話,這是像我這種還在使用.NET2.0的人來說是一大的遺憾。
還有一點的是,這個框架和我上面提到過的JSP框架不同,它是一個真正的MVC框架,它不像Struts它們那樣只支持Web應用的開發,雖然現在這種開發很流行。它只是一個框架,它是讓我們更好的管理我們的程序,使得它易于維護,易于擴展和移植。它只是一個真正的MVC框架,它并不面向于特定的應用。我們可以使用它開發桌面應用,Web應用等等。同時,它還是一個輕量級的框架,而且還是很輕的那種,它的大小最多也就2,30K而已。
關于PureMVC的學習教程真的好少,找了好幾天,結果還是只找到官網上的那個Best Practices。本人比較愚笨,研究了好幾天,把那個文檔看了又看,終于才明白了它大概的原理,現在寫下來,分享一下心得。
PureMVC框架的目標很明確,即把程序分為低耦合的三層:Model、View和Controller。它們合稱為PureMVC框架的核心,由Facade統一管理。關于它的核心層,我們不需要管太多,只需要記得下面幾點就可以了:
一、Model保存對Proxy對象的引用,Proxy負責操作數據模型,與遠程服務通信存取數據。
二、View保存對Mediator對象的引用。由Mediator對象來操作具體的視圖組件(View Component,例如Flex的DataGrid組件),包括:添加事件監聽器,發送或接收Notification ,直接改變視圖組件的狀態。
三、Controller保存所有Command的映射。Command可以獲取Proxy對象并與之交互,通過發送Notification來執行其他的Command。
上面的什么對什么的引用,可以一開始看的時候很難理解,我們暫時不用管它誰對誰的引用的。這些已經由框架為我們管理好了,我們要所要做的是編寫具體的Command,Mediator,Proxy。
一、Proxy是負責操作數據模型的,什么是數據模型?數據模型就是數據庫,XML等等。我們可以直觀地理解為,Proxy是用來對數據模型進行查詢、插入、更新、刪除等操作的類。操作完成后,它就會發送Notification,也就是通知,告訴其它兩個層我已經完成工作了。
二、Mediator負責操作具體的視圖組件,包括:添加事件監聽器,發送或接收Notification ,直接改變視圖組件的狀態。好像抽象了點。具體的說吧,Mediator是負責管理用戶界面,與用戶進行交互操作的。如:給Button添加事件,當用戶點擊按鈕時,發送Notification,告訴Controler我們執行什么樣的操作。比如這是一個登錄的按鈕,那么Mediator就會告訴發送通知給Controler,告訴它要執行登錄操作。此外,Mediator還負責直接改變視圖的狀態。就像,我點擊了登錄按鈕后,Mediator就改變它,讓登錄按鈕不過用,避免重復操作。它還可以在視圖上顯示一條信息,告訴我正在執行登錄操作。總的來說,Mediator是用來管理視圖的。
三、Command可以獲取Proxy對象并與之交互,通過發送Notification來執行其他的Command。再拿上面的登錄例子作解釋,當點擊了登錄按鈕后,Mediator就會告訴Controler要執行相應的Command了,比如LoginComand。既然是登錄,那么還得要知道用戶的信息才行。Command就會發送Notification告知Proxy,我需要某個用戶的信息。那么Proxy就會訪問數據庫(也可以是別的數據模型),查詢對應的用戶信息,然后發送Notification通知Command我已經查詢好了,差把信息返回給Command進行驗證,與些同時,Mediator也可以接收Proxy發送的Notification,通過視圖告訴用戶正在驗證信息。Command驗證了用戶信息后,發送Notification把驗證結果返回給Mediatory,告訴用戶驗證的結果。或者,Command也可以發送Notification執行其它的Command操作,比如驗證通過后,讀取用戶的詳細資料。
上面的Command,Mediator,Proxy的具體實現類都是要自己編寫的,工作量還是比較大的。
PureMVC框架的原理大概就是這樣子,寫得不足的地方還請各位大蝦多多指點。