mvc是乙個可以讓你把「三個部分(即mvc的全稱,model、view、controller)」諧調地組成乙個複雜應用程式的概念。一輛汽車 就是乙個在現實生活中非常好的mvc例子。我們看車都看兩個view(顯示)部分:內部和外部。而這兩個都離不開乙個controller(控制者):司 機。剎車系統、方向盤和其他操控系統代表了model(r4 模型):他們從司機(controller)那裡取得控制方法然後應用到內部和外觀(view)。
【網路上的mvc】
mvc框架所涵蓋的概念相當簡單並且極度靈活。基本的概念就是,你有乙個單獨的控制器(如index.php)用來控制所有建立在引數請求基礎 上的框架內應用程式。這個控制器通常包含了(最小程度上)乙個定義模型的引數、乙個事件和乙個get引數。這樣控制器就能確認所有的請求然後執行相應的事 件。打個比方來說,乙個像這樣m3 /index.php?module=foo&event=bar的請求很有可能就是用來載入乙個名叫foo的類, 然後執行foo::bar()[就是其中的bar()函式]。這樣做的好處有:
乙個對應所有應用程式的介面
同時維護乙個應用程式內無數的**非常麻煩,因為每一段**都有自己的相對路徑、資料庫鏈結、驗證等等。而這樣做就免除你在這方面的煩惱,允許你合併並重複使用**
【為什麼要建立作者自己的mvc框架?】
迄今為止,我沒有見到過太多用php寫的mvc框架。事實上我僅僅知道乙個-solar,是完全用php5寫的。另外乙個是cake,乙個試圖 成為php的ror(ruby on rails-乙個ruby語言開源網路框架)。我自己對這兩個框架都有一些不滿意的地方:它們都沒有利用到pear,smarty等所包含的現有**;現 在的cake還比較紊亂;最後,solar是乙個絕大部分由乙個人寫的作品(我無意說其作者paul不是乙個好人或者好程式設計師)。這些問題可能並不會讓你 否認它們,而且很有可能你根本不關心這些問題。但是正因為如此,我請各位盡可能地審視它們。
【老方式】
如果回到2001看自己寫的**,作者有可能找到乙個叫template.txt的檔案,它看起來像這樣:
<?php
require_once('config.php'); // other requires, db info, etc.
// put your logic here
// output the template
如果這個應用程式需要imap或ldap驗證,我該怎麼辦?
我該如何處理各種不同的**(包括編輯、公升級和刪除)?
我該如何處理多級驗證(管理員 vs. 非管理員)?
我該如何啟用輸出快取?
【新方式】
將所有東西都扔進這個mvc框架,你會發現生活是如此簡單。請對比以下**:
public function __default()
public function delete()
public function __destruct()
} 注意這段**顯然不是用來鏈結到乙個資料庫、判斷乙個使用者是否已經登陸、或者輸出任何其他資訊。控制器掌握了所有的一切。
如果我想驗證ldap,我可以建立fr_auth_ldap。控制器可以識別某些輸出方法(比如$_get['output'])並可以隨時轉 換成pdf或者soap。事件處理delete,只負責刪除,其他的它都不管。因為這個模組擁有乙個fr_user類的例項,它可以簡單地判斷乙個使用者是 否已經登陸等等。smarty,作為模板引擎控制快取是理所當然的,但是控制器同樣可以控制一部分快取。
從前面講的老方式到mvc方式對於很多人來講可能是乙個全新、陌生的概念,但是一旦你轉換到了這樣乙個概念,那麼要轉回去將是件相當困難的事情。
【建立底層】
我是乙個pear尤其是pear_error類的愛好者。php5引入了乙個新的內建類「exception」取代了pear_error。 但是pear_error擁有一些比exception還要實用的特性。所以,在此系列文章中的mvc框架例項將用到它來做錯誤處理。無論如何,我還是要 用到exception獲得從構造器中的錯誤,因為它們本身不能傳回錯誤。
設計這些基礎類的目的有如下幾點:
利用pear快速新增功能到基礎類
建立小巧、可反覆實用的抽象類以便讓使用者在此框架中快速開發出應用程式
用phpdocumentor給所有的基礎類生成文件
類的層次看起來會像這樣:
-fr_object將會提供基礎的功能以供其他所有物件使用(包括logging,一般的setfrom(),toarray())
-fr_object_db是乙個小層面,給子類提供資料庫鏈結等功能
-fr_module是所有應用(又稱模組、模型等等)的底層類
-fr_auth是所有驗證機制的底層類
·fr_auth_user是乙個驗證類,用來驗證所有需要驗證使用者是否登陸的模組
·fr_auth_no是所有不需要驗證的模組的「假驗證類」
-fr_presenter是所有用來處理載入和顯示應用的底層類
-fr_presenter_smarty是包含了載入不同驅動器能力的顯示層。smarty是乙個非常好的模板類,它擁有內建的快取機制以及乙個活躍的開發團體(譯者注:這分明就是打廣告嘛~)
·fr_presenter_debug是除錯部分的顯示層。依靠它,開發者能夠除錯應用程式並給他們除錯
·fr_presenter_rest是乙個可以讓開發者能夠以xml方式輸出應用程式的rest顯示層
【**標準】
在你正式編寫**之前,應該坐下來跟你的合夥人(或者你自己)好好討論(或思考)一下**標準。mvc程式設計的整體思想圍繞著兩點:**的可再利用性(減少偶合)和**的標準化。我推薦至少應該考慮到如下幾點:
首先要考慮的是變數命名和縮寫標準。不要因為這個跟你的合作夥伴大吵一通,但是一旦定下來的標準,就要自始至終地遵從,尤其是寫底層**(基礎類)的時候。
定製乙個標準字首,用在所有的函式、類和全域性變數上。不走運的是,php不支援「namespace(命名空間)」。所以要想避免混淆變數名和發生的衝突,用乙個字首是個明智的做法。我在整篇文章中將使用「fr_」作為這樣的字首。
網路上的愛情
又想起另乙個故事 男子和女孩相約見面,他們是網路上認識的好友,但是男子卻在 中靜靜的看著焦急等 待的女孩,然後抽身離去。女孩一如想象中青春漂亮,而他卻已是人到中年,有責任有家 庭,雖然他從來沒有隱瞞,但他依然感到了時間留下的巨大的鴻溝,所以他選擇離開,然 後在晚上笑對她在 上的種種抱怨,如同撒嬌。後...
網路上的「 Of」與「 On」
jeremy keith嘗試使用angular和 企業 軟體的概念作為催化劑來進行區分。網路 建立網路的基本原理。通用訪問。在網路上 網路作為一種傳遞機制。業主規定使用。傑里公尺 jeremy 從那以後就一直在敲打漸進式增強鼓,可以預見,他是乙個 網路上的人 他只對以下事實表示質疑 由於他們的軟體選...
關於網路上的愛
關於寫網路上的愛看了很多,也不免有許多感慨,今天在這裡總想寫點什麼,作為內心許久的一種解釋,網路上的 愛究竟是什麼。其次網路又是真實的,很多人都說網路是虛幻的,但是我想說它比現實更真實,虛幻的只是乙個空間,乙個暢 遊的地方,但是人比現實更真實,因為在現實中不論在學業上還是在事業上,我們為了理想,為了...