到底啥是Zend Framework MVC設計模式?
MVC (Model-View-Controller)模式,即模型-試圖-控制器模式,其核心思想是將整個程序代碼分成相對獨立而又能協同工作的3個組成部分,具體的功能如下:
通俗的講:
再通俗的講:
這個MVC設計模式,有點像現實中我們去飯店吃飯的過程。當你到一個飯店吃飯,過程是這樣的,首先你得點菜啊,不用喊,一個光溜水滑,埋了八汰的小服務員就會整個小本來你面前,"先生,你來點啥?",你看看菜譜,"給我整個小盤魚香肉絲,再加一碗米飯。""好的,先生稍等。"說著服務員一溜小跑朝後廚方向,"那啥。。。告訴廚師別放姜啊!~~"。。。帶會兒,服務員就把你要的飯菜給你端上來了,"先生請慢用~~有啥需要幫忙的,盡管喊我。"你吃的狼吞虎咽的,根本不知道裡面放的青椒媽的都沒洗~~~
就這麼一個簡單的你要飯的過程就可以用MVC將其描述一下,你呢就相當於View,服務員呢就相當於Controller,而那個不洗青椒的該死廚師就是Model。你一開始跟服務員點菜,就相當於我們的浏覽器向服務器發出請求,服務員將你要吃的菜交給後廚的師傅,就相當於控制層將浏覽器發過來的請求交給業務邏輯層來處理,而它根本不管廚師到底咋做這個菜,反正你能給我鼓搗出一盤魚香肉絲就成,青椒洗不洗那是他的事,這也就是我們常從老鳥口中聽到的"封裝",封裝好啊,封的你連青椒沒洗的魚香肉絲都能吃的噴香,嘻嘻~~當服務員把一盤冒著熱氣的魚香肉絲端到你面前的過程,就相當於業務邏輯層處理完後把相應傳回給浏覽器,然後通過浏覽器顯示給用戶。這樣就實現了一個簡單的MVC協調交互,也不知道你明白點沒有。。。
就拿一個簡單的登陸模塊說,需求是你輸入一個用戶名、密碼,如果輸入的跟預先定義好的一樣,那麼就進入到正確頁面,如果不一樣,就提示個錯誤信息"你Y別在這兒蒙我,輸入的不對!"。
這個小小的模塊中,起始的輸入用戶名密碼的頁面跟經過校驗後顯示的頁面就相當於View,而這裡還需要一個Controller頁面,就是用於接收輸入進來的用戶名密碼,還有經過校驗後返回的一個Flg(此Flg就是用於判斷你輸入的是否正確,而跳轉到相應的頁面的),最後還缺一個Model,那麼就是你那個用於校驗的類了,他就是處理你輸入的是否跟預先訂好的一樣不一樣的,之後返回一個Flg。這樣就完全實現了邏輯跟頁面的分離,我頁面不管你咋整,反正我就一個顯示,而Controller呢也不管你Model咋判斷對不對,反正我給你了用戶名跟密碼,你就得給我整回來一個Flg來,就跟服務員根本不管廚師青椒洗不洗一樣,而Medol呢,則是反正你敢給我個用戶名跟密碼,我就給你整過去個Flg~~如果看到這你有點茅塞頓開了,待會就試驗著寫寫吧!!
現在在開發WEB應用的時候,比較流行的一種做法就是使用"MVC"結構,使用如此方式去開發WEB應用程序,邏輯性強、簡浩明了,使程序設計起來更加方便,快捷。何為"MVC"呢?簡單的來說,它就是"模型(Model)"、"視圖(View)"及"控制器(Controller)"的結合體,也就是所有的"三層"抽象結構,當然這裡所說的"MVC"是針對WEB上應用而言的,"使代碼和頁面設計分開"便是其主導思想,這一思想在使用JavaServlet/JavaServerPages技術的"Struts"中表現的淋漓盡致,有興趣的可以去Http://Jakarta.Apache.Org/Struts看看,這種設計模式使的程序設計人員可以專注於代碼的設計、編寫及調試,網頁設計人員可以有更多的時間去投入設計而不用理會具體的功能實現,這種分工方式完全適應大型項目或企業級的分布式應用開發。
從PHP5的推出可以看到,其中的面向對象功能越來越完善,使用PHP來開發大型的商業網站或者分布式企業應用已經成為可能,如果再結合Zend Optimizer,已經實現了代碼的封裝性。
如何在PHP中使用"MVC" 設計模式去開發WEB應用呢?記住一點(代碼和頁面設計分開),用一個簡單的例子演示一下,比如要從數據庫中查詢出會員的資料以顯示在網頁上,這裡就需要考慮到兩點:1.連接數據庫並取出會員資料,2.把會員資料顯示在網頁上,連接數據庫我們使用一個數據庫的類,把它叫做"DB"類吧,這個類此時就扮演了 "模型(Model)"的角色,接著我們需要編寫一個操作"DB"類的程序以取出數據,這個程序所扮演的角色就是"控制器(Controller)",它接受客戶端"POST"或"PUT"的數據,然後再調用"DB"類以取出數據,把這些數據都存放在"控制器(Controller)"中,最後把數據傳遞給"視圖(View)"並按照一定的排版格式顯示出來,從上面的分析可以看出,模板在這裡就是扮演了"視圖(View)"的角色,當然僅僅一個模板類是不能說成是MVC的,真正的MVC不是這麼簡單的,具體可以參考一下"JSF"。