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架構的原理大概就是這樣子,寫得不足的地方還請各位大蝦多多指點。