pureMVC生手回
看到最近發熱的pureMVC,最近才勉強覺得可以了解一下。
先說明!以下的介紹,純個人的觀點想法,如有誤導的情況的話,歡迎高手指正。
在說明pureMVC之前,先說明他是一種設計模式,也就是讓程式設計師
開發程式時,有互相溝通的"遊戲規則"。
訂下了所謂的遊戲規則後,就比較不會有你寫你的,我做我的,最後你做啥我看不懂,
你寫啥,我接不下來的問題。
要讀別人的程式碼,是很多人的痛吧..!
那pureMVC是就建立在MVC模式下的改良型,說改良型也不太對,應該是適合某些合適的開發語言上的型式。
有高手指正過,MVC不算是個設計模式,它是設計模式的"組合"。
先不論這些規則,就單純用pureMVC的想法來說,小弟只想單純的在開發語言時,
可以讓某些人先做"一部份"的程式,比如在接資料端由一個程式來實作,而呈現視覺資料又由另一個程式人員來開發,而不用將工作都"積"在一個工作人員身上。
這也就是為什麼流程化程式在初期開發時雖然很順手,因為相對有時候小型的專案,流程化的程式反而code少,開發速度也快。但遠程來看,這種流程化程式,幾乎都只能一次應用,很難擴展。也很不適合在大型專案上,而不用提多人合作開發的可能了。
所以設計模式的原則中,有一個概念就是OCP(The Open-Close Principle)原則,簡的說就是對於程式的擴充是開放的,對更改是封閉的。簡單的程式也許用簡單的流程就做的到,但當客戶祭出一字"改"時,那還不如我們早早就準備了它的彈性存在。
不可免俗的,要來放這張圖:
PureMVC 結構說明
望詞生意,當然就是在MVC的模式下來運做整個程式的。
M=Model就是處理資料的部份
V=View負責呈現視覺的部份
C=Controller控制、邏輯運作
架構在這三者的基礎下,再由其它Proxy(Model相關) 、Mediator(View相關)、Command(Controller相關) 來工作。
在最開始的時候,我們必需建立一個獨體模式的類-Facade,由Facade來控制核心的溝通唯一接口。也就是由Facade來串起Proxy ,Mediator, Command的溝通。
ApplicationFacade.as:
先說明!以下的介紹,純個人的觀點想法,如有誤導的情況的話,歡迎高手指正。
在說明pureMVC之前,先說明他是一種設計模式,也就是讓程式設計師
開發程式時,有互相溝通的"遊戲規則"。
訂下了所謂的遊戲規則後,就比較不會有你寫你的,我做我的,最後你做啥我看不懂,
你寫啥,我接不下來的問題。
要讀別人的程式碼,是很多人的痛吧..!
那pureMVC是就建立在MVC模式下的改良型,說改良型也不太對,應該是適合某些合適的開發語言上的型式。
有高手指正過,MVC不算是個設計模式,它是設計模式的"組合"。
先不論這些規則,就單純用pureMVC的想法來說,小弟只想單純的在開發語言時,
可以讓某些人先做"一部份"的程式,比如在接資料端由一個程式來實作,而呈現視覺資料又由另一個程式人員來開發,而不用將工作都"積"在一個工作人員身上。
這也就是為什麼流程化程式在初期開發時雖然很順手,因為相對有時候小型的專案,流程化的程式反而code少,開發速度也快。但遠程來看,這種流程化程式,幾乎都只能一次應用,很難擴展。也很不適合在大型專案上,而不用提多人合作開發的可能了。
所以設計模式的原則中,有一個概念就是OCP(The Open-Close Principle)原則,簡的說就是對於程式的擴充是開放的,對更改是封閉的。簡單的程式也許用簡單的流程就做的到,但當客戶祭出一字"改"時,那還不如我們早早就準備了它的彈性存在。
不可免俗的,要來放這張圖:
PureMVC 結構說明
望詞生意,當然就是在MVC的模式下來運做整個程式的。
M=Model就是處理資料的部份
V=View負責呈現視覺的部份
C=Controller控制、邏輯運作
架構在這三者的基礎下,再由其它Proxy(Model相關) 、Mediator(View相關)、Command(Controller相關) 來工作。
在最開始的時候,我們必需建立一個獨體模式的類-Facade,由Facade來控制核心的溝通唯一接口。也就是由Facade來串起Proxy ,Mediator, Command的溝通。
ApplicationFacade.as:
package com.me.myapp { import org.puremvc.as3.interfaces.*; import org.puremvc.as3..patterns.facade.*; import com.me.myapp.view.*; import com.me.myapp.model.*; import com.me.myapp.controller.*; public class ApplicationFacade extends Façade implements IFacade { public static const STARTUP:String = "startup"; public static const LOGIN:String = "login"; public static function getInstance() : ApplicationFacade { if ( instance == null ) instance = new ApplicationFacade( ); return instance as ApplicationFacade; } override protected function initializeController( ) : void { super.initializeController(); registerCommand( STARTUP, StartupCommand ); registerCommand( LOGIN, LoginCommand ); registerCommand( LoginProxy.LOGIN_SUCCESS, GetPrefsCommand ); } public function startup( app:MyApp ) : void { sendNotification( STARTUP, app ); } } }
留言