小弟儘量以最簡單的方式來講解何謂 MVC 架構,希望看的懂的網友能給予回應。謝謝

MVC 是什麼? 這就是大家第一個看到專有名詞的疑問
Model View Controller 簡稱 MVC
也許你還是無法了解,畢竟他是一串不實際的英文,查字典也不知他是幹麻用的
所以小弟在此把這些東西做更祥細的解釋

Model:從字典裡查到的意思是指「模型」,但你並不需要把他翻譯成中文,只需要把他看成一個專有名詞,就像你學到新的詞語一樣。
模型?
你可以把他想像成一個儲存資料的地方,像是姓名、電話、生日之類的東西。
比如今天你的資料庫裡有一個資料表,該資料表上面有公司名稱、統編.... 等等的資料,這些資料都可以把他存到 Model 裡面去,一個資料的匯集所。這意謂著,你從資料庫讀出來的每筆資料,都可以丟到Model裡面去做儲存。

View:的中文意思是 視力、視野的意思。但是,我們要把他看做一個像是會做事的「人」,這個「人」專門負責幫我們處理外觀上的東西,比如處理HTML上能顯示的所有東西。View 的工作就是這樣。

Controller:中文的解釋是主管、管理人。事實上 Controller 的工作就是在做判斷,然後處理判斷之後要做什麼事。什麼意思呢? 我打個比方
if(name.equals("A"))
        System.out.println("I am A");
} else if(name.equals("B")) {
        System.out.println("I am B");
}
小弟的簡單的解釋這個程式的意思
當我們檢查 name 裡面所存的字串如果是"A"的話(這時是在做判斷)
我們就把"I am A"印出來(後續動作)
當我們檢查 name 裡面所存的字串如果是"B"的話(這時是在做判斷)
我們就把"I am B"印出來(後續動作)

檢查name存的值是什麼,這就是在做判斷
當我們判斷出來之後
決定要印出什麼字,這就是後續動作
這就是 Controller 的工作

這三個角色有什麼關系? 為什麼要合在一起,然後給他個名詞叫MVC?

也許你寫過VB,或者你寫過C,OR其它的程式語言
不管那一種,當你在寫視窗應用程式時,你時常會發現
當你的程式一大起來,幾千行搞在一起來時,不管是在除錯、新增功能、修改上都顯的十分的困難

為什麼?
因為你沒有分類
你的程式碼沒有責任的區
你可以想像是一個亂哄哄的工作群
可能A叫B把資料給我
B又找C,搞的大家責任不分,結果弄到後面,誰也不知誰是幹麻的。

假設今天站出了一個主管
他告訴他的工作組
你們從今天以後,各自做自己的事情,不淮要求你的事同幫你做位何事,有任何需求找我。
這時,每個工作人員
有需求就會找主管報備
然而主管就會幫你找適合的人去完成你的需求
主控權全部在主管,同事間的工作各不相關,大家獨立運作,每個人都只有他的責任。
當問題發生的,該責任區就會很容易被發現(這個工作觀念來自Design Pattern 中的 Mediator Pattern 有興趣的人可以翻閱 Design Pattern 的書籍)。
M V C
就是幫你把
負責
「外觀」
「存儲資料」
「邏輯判斷」
的三樣工作獨立出來,讓你的工作不會你我不分。

這跟 Java 有什麼關系?

時常看網友們把他們的邏輯判斷寫在 JSP 網頁上,這讓小弟我感觸良深
JSP 就是在負責外觀的工作,你為何要把邏輯判斷寫在上面?
到時候你的JSP網頁上不是充斥著一堆if else, Connection Database之類的東西嗎,這樣不顯的很亂嗎? 
三步五時出現個
<%
if(a == b)
out.println("XXX");
%>
這種東西你自己在自己的JSP網頁上,看了不吐血嗎?

在外觀處理上,View 只能跟 Model 拿資料,它並不會做任何邏輯判斷和處理工作,這才是比較合理的觀念。

假想一個用戶,他在某個網頁上把他的資料填寫在表單上
然後按下送出
這時 Server 端接受到資料並將該資料填入一個 Model 物件裡面,再呼叫 Controller 去把 Model  的資料讀取出來。

你發現到什麼事了嗎,Model 只是儲存資料,而Controller 和 View 都是到 Model 去把資料取出來
Model 做了什麼事? 
他只是一個資料的存放區。
照成的結果是如此不可思議。
若想像一下今天沒有 Model ,會照成什麼樣的情況?
小弟來告訴你吧

在Controller 把資料處理完之後,就把資料丟到String,然後中間的過程就像這樣
StringBuffer strHTML = new StringBuffer()
if(a == b) {
strHTML.append("Data1");
} else
....
...
strHTML.append("Data2");
...
strHTML.append("Data3");

然後,經過你一長串的努力,終於把你的資料跟HTML混在一起了,然後就丟給View去顯示出來。
當你的程式一大,你的一個類別就會充斥著這些字串加加減減的東西。
然而多了個 Model 又怎麼樣?
就像這樣

model.setName("I am Nets");
model.setSex("Boy");

整個感覺是否不同了呢?
你是否還在使用你那「非理性」的JSP網頁嗎?
請試著將你的 Model View Controller分開,這樣會使你的程式碼更漂亮。

真正要實作MVC,Apache Struts 已經幫你把底層的架構設計好了 你只要用,就可以輕輕鬆鬆的把你的責任分的漂亮又好看。當然,若你不爽用Struts,你也可以自己寫自己的MVC架構。 


文章聲明:
覺得這篇文章說明MVC 還蠻淺顯易懂的,為了怕文章遺失,故轉貼回自己的BLOG 在此說明,本文章仍屬原作者所有 
出處:http://www.blueshop.com.tw/board/show.asp?subcde=BRD200308130419218SP&fumcde=FUM20041006152546UBK&rplcnt=1
創作者介紹
創作者 Kelvin 的頭像
Kelvin

kelvin的生活誌

Kelvin 發表在 痞客邦 留言(8) 人氣()


留言列表 (8)

發表留言
  • Steven
  • 淺顯易懂的好文章
  • 訪客
  • 讚!終於懂了,感謝您!
  • 讚!
  • 初學者看著 稍微明白了,感謝您
  • 訪客
  • 謝謝你的解析
    我真的有比較懂了:)
  • yy
  • 寫得非常淺顯易懂!!!謝謝你!
  • 初學者
  • 謝謝你 !!!! 課本都寫太抽象嘞 你的好容易理解!!!
  • 訪客
  • 非常的謝謝. 終於懂了!!
  • kuanlinchen199
  • 我有個疑問,判斷屬於Controller的責任,那「計算資料」應該寫在Controller還是Model呢?例如:Model存放「學生」和「分數」,透過Controller傳送「取平均數」的要求,應該將資料從Model取出然後在Controller計算,還是在Model裡計算完再取出來?

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼