2012年11月17日 星期六

談談MVC

        MVC其實是一種軟體系統架構的設計模式,在這種設計模式之下可以讓程式設計師們能夠方便的管理以及快速偵錯,但是其最大的缺點就在於程式碼會比一般亂亂寫還要多出好幾倍!
  
   What-Is-MVC
 
       上圖為大家較為常看到的MVC示意圖,而這張圖所闡述的事情很簡單,就是三個元素之間的互動,對!就只是三個元素之間的互動(是不是和網頁開發的三元素很像!微笑),如果大家還記得我上一篇所論述的三元素,就會發現到其實學習MVC也好學習網頁設計也好,都是在於將這三個元素個別搞懂,接下來就是將自己的創意發揮在這三個元素之間的互動。
 
       其實嚴格來說,在設計系統架構上,MVC只是架構的"一部份",這是因為MVC所著眼的角度非常注重於如何展現,所以架構設計上MVC被直接歸類為前端架構設計的一種設計樣式。
 
接下來,就個別介紹這三個元素,以及這三個元素該如何正確的互動。
檢示(View): 它主要的工作就是如何將使用者想要看到的呈現在他們的眼前。而它其實並不輕薄,因為它承載著許多要呈現在使用者面前的元素,諸如圖片,清單資料…等等。可想見的是,它必定也囊括了一些程式邏輯在裡頭,但是並不是把所有程式邏輯全都丟掉它身上,那這樣就無法區分MVC三個元素了,只需把握一個重點就是:View只有顯示所需要的程式邏輯。
 
模型(Model):它的工作很特別,它們就像是一群無名英雄,莫莫的協助將所需要的資料和資訊提供給View,再讓View去考慮該如何漂亮的呈現Model所給予他們的資料,但是其中最關鍵的一點就是:Model的資料不是直接交遞給View的,需要由老大哥Controller過一手才能交到View手中。
 
Model本身做很多工作,甚至可以說所有核心的重要工作都是由它完成,簡單的工作如資料的儲存,難一點的就像是複雜的計算,但是很多時候Model很容易因為過度臃腫而不得進行一些瘦身行動,而這些瘦身行動就是把一些工作交遞出去給一些叫作商業邏輯物件的傢伙幫忙。
 
控制器(Controller):它是三個元素中較為特別的元素,它的地位很崇高但是做的事情也很多(很像公司中的中高階層管理人員吐舌頭),它除了進行一些從View來的資料進行驗證之外還要妥善的調派合適的Model進行正確的處理,有的時候它管的比較多的時候,它甚至還要對使用者進行帳戶的驗證和授權,更不用說每次Model處理完的結果資料進行適當的處理,MVC中的Controller確實很辛苦,但為了不讓它這麼辛苦,有的時候會把它的工作分派一點給一些Model或是一些不知道該怎麼分類的物件(Misc Object)。
 
MVC一向都是由Controller作為首腦,當使用者想要看一個頁面的時候,會由瀏覽器送出一個Request給網頁伺服器,而網頁伺服器會將這個Request交給適合的Controller來處理,而Controller則會考慮是否需要請求Model的支援,若不需要則直接讓View接手接下來要處理的工作,而View的工作再簡單不過了!它就是很單純的將所需要呈現的東西處理完後送交給使用者端。
 
考慮另一種狀況,若使用者的Request被Controller判定需要Model支援呢?
其實每個Controller手上都有自己的View及Model名單,它會從這些名單中挑出可以勝任這次Request的Model,並且指揮它們,讓它們在正確的順序下井然有序的工作,而最終產出所需要的資料結果,如果Controller發現不敷View使用,它還得好心幫View先行處理,等到萬事俱備之後,Controller再將接力賽的最後一棒交給View,讓View進行最後的衝刺,而使用者終能得到他所期望看到的頁面結果。
 
總結:MVC其實並不難,但是時至今日有許多由MVC衍生出來的新MVC設計樣式,諸如MVP或是MVVM等,但是仔細去看他們就會發現到,其實他們仍不脫MVC這三元素的範疇,只要完全瞭解MVC個別三個元素的角色責任以及它們的互動方式,就能一通百通,很快的就能學會其它MVC的變型版了。

沒有留言:

張貼留言