- 論壇徽章:
- 0
|
有人問我,什么是MVC 設(shè)計模式, 我通常說你就是M, 即Model模型
喝口茶,且聽我慢慢道來。
MVC設(shè)計模式(Model模型-View視圖-Controller控制器)一種“軟件架構(gòu)模式”。與開發(fā)語言無關(guān),在PHP JAVA .NET,Python,Ruby的開發(fā)中都會用到。不要被“軟件架構(gòu)模式”這樣的詞嚇到,所謂“軟件架構(gòu)”,就是如何把很多代碼組織在一起,而“模式” 就是經(jīng)驗的意思。如果你去做促銷員,培訓(xùn)老師會教你如何如何與顧客溝通,這些以前成功銷售員總結(jié)的經(jīng)驗,起個名字就叫模式。
近年來,MVC設(shè)計模式在網(wǎng)頁開發(fā)中應(yīng)用廣泛,事實上MVC 設(shè)計模式是一種思想,不只應(yīng)用在網(wǎng)頁開發(fā)中,這里我們主要以網(wǎng)頁WEB開發(fā)為主。主流的WEB開發(fā)語言都有很多優(yōu)秀的MVC框架,如PHP系的 Cakephp,Zend FrameWork, JAVA系的Struts,Spring, Ruby系的Ruby on Rails,Python系的Django,本文與PHP為例,通過比喻說明MVC的思想。
第一個比喻:
在一個小型軟件公司里,程序員就是Model模型,項目經(jīng)理就是Controller控制器,銷售員就是View視圖.
我們來看程序員,項目經(jīng)理,銷售員的關(guān)系。項目經(jīng)理通常不作具體的事,負責(zé)工作分配。
項目經(jīng)理的工作就是將不同的任務(wù)合適的分配給不同的程序員,而程序員通常是接到任務(wù)后,埋頭工作,完成后交給項目經(jīng)理。而銷售員的工作則是將產(chǎn)品以不同的形勢包裝后出售。
程序員看來是同一個東西的數(shù)據(jù)庫管理程序,銷售員能稍做修改后,包裝成人力資源系統(tǒng),客戶管理系統(tǒng)等等。簡單的說:程序員做具體的事,項目經(jīng)理管工作調(diào)度,銷售員包裝展示產(chǎn)品。這就是MVC。
MVC 翻譯為模型-視圖-控制器,是字面翻譯。我覺得MVC意譯為:處理-展示-調(diào)度容易理解些。
回到開篇的問題,"有人問我,什么是MVC 設(shè)計模式, 我通常說你就是M, 即Model模型"
為什么這么說呢?應(yīng)為提問的人通常是程序員,程序員就是管做事的,不同的的項目經(jīng)理可讓同一個程序員來做事,就像不同的Controller控制器可以調(diào)用同一個Model模型。
第二個比喻:以一個餐館做比喻。在只有一老板的小店,通常是這樣的:你說老板,來碗蛋炒飯,老板收錢后,去廚房炒飯,飯好后給你端上來。一個人搞定,沒有問題。這樣的小店還不少。
這就像一些老資格的PHP程序員,喜歡用VI裸寫,在一個文件里搞定一切。
再來看一個大一些的餐館,因為顧客很多,就有了分工,廚師只管炒飯,有專門的調(diào)度人員將不同的訂單分配給不同的廚師,有服務(wù)員負責(zé)上菜。這里廚師就是Model模型,調(diào)度人員就是Controller控制器,上菜的服務(wù)員就像View視圖,同樣的蛋炒飯有的顧客要帶走,就要用餐盒打包,有的顧客在餐館茶館吃,就要給放到碗里給顧客。至于蛋炒飯要不要打包,廚師不管,就像Model層負責(zé)返回數(shù)據(jù),至于以PDF或是HTML展示,這是VIEW層的工作。
在MVC 設(shè)計模式中,提倡分工和專注。也就是說,各個角色做好本職工作,而不提倡越俎代庖。第一個軟件公司的比喻來說,項目經(jīng)理管工作分配的就不用做具體事,程序員做具體的事就不要管工作分配。
現(xiàn)在,PHP,JAVA,Ruby,Python等開發(fā)語員都有現(xiàn)成的框架可用。通過使用這些框架可以幫助程序員很好的應(yīng)用MVC設(shè)計模式,
這里要著重說一點:使用了現(xiàn)成的框架不等于應(yīng)用了MVC設(shè)計模式,不使用框架不等于沒有是用MVC模式。
以PHP開發(fā)為例,好的程序員,不用框架MVC也分的清清楚楚。而有的程序員即使用了像Cakephp這樣的框架,MVC也分不清楚,如在 Controller里過多的邏輯處理代碼,還有就是硬輸出HTML標記。正確的辦法是,Controller只負責(zé)對象函數(shù)調(diào)用,冗長的邏輯處理代碼放到Model,Model處理邏輯后返回數(shù)組,變量或是對象,Model和Controller不要直接輸出HTML標記。簡單的說在Model 和 Controller 里盡肯的不要用echo直接數(shù)據(jù)到瀏覽器端。用return 返回數(shù)據(jù)的好處是:返回的數(shù)據(jù)可以于HTML,PDF,XML不同界面展示。
這里給PHP程序員個建議,不管你是否框架,每次想使用echo顯示數(shù)據(jù)時,想一想,數(shù)據(jù)能否先放到數(shù)組里稍后再用?可以的話,就先放到數(shù)組里。除非沒有其他辦法,否則不要用echo,這樣你的view層就能和其他程序分得很清楚。
喝口茶,講點題外話,很多程序員認為,程序員不過是IT民工,辛苦又不掙錢,不能一輩子些程序,先干段時間的開發(fā)工作,等到30歲后,向項目經(jīng)理發(fā)展。這就是從Model 層向Controller 層發(fā)展。而有的項目經(jīng)理又想,成天這個項目,那個項目,都是給人打工,看看大學(xué)的一個做銷售老同學(xué),什么產(chǎn)品也不開發(fā),就把別人的產(chǎn)品拿過來包裝一下,輕松掙錢。項目經(jīng)理想著向銷售發(fā)展,這就像是從Controller 層向View層發(fā)展。
這是一個不是很嚴謹?shù)腥さ谋扔鳌?br />
前面提到老PHPer不喜歡用框架,喜歡用VI 裸寫。這里并非提倡或發(fā)對是否用框架。
就像前面餐館的比喻,有些一個老板的小店能長期經(jīng)營,而分工明確的大店也可能經(jīng)驗不善。
物以致用,沒有最好的,只有最合適的。
原文:
輕松理解PHP JAVA MVC 設(shè)計模式 |
|