MVC
本教程實踐性的,對於MVC的知識只是簡略介紹,如想深入學習,請自行尋找資料。
MVC 簡單說來包括三部分:M – Model (模型) 、V – View (視圖)、C – Controller (控制器) 。看過上篇文章的朋友應該知道我們最後提到的LQP_Rewrite類中的三個屬性中有個叫:$_controllerName,沒錯這裡就是指MVC中C的名稱。MVC設計模式把應用程式的結構清晰的劃分成了三部分,因此我們的架構也用了專門的檔案夾與這三部分進行對應,在介紹前先讓我們把缺少的另外三個檔案夾建立起來:
- 展開application檔案夾,在其下分別建立controllers、models與views檔案夾
好了,現在讓我們看一下對應關係就非常明了了:
白話說下MVC各部分的作用:
- M:一般用於為資料庫中的表建立對應的PHP類(被稱作ORM),並提供操作資料庫的各種方法,方便C的調用,同時也使C不用考濾資料庫,更專註於處理商務邏輯(指各種流程,比如常見的購物車:選產品->下單->付款->發貨),易於代碼維護;
- C:用於處理商務邏輯了,控制器,顧名思義用於控制,所於的使用者請求都由控制器掌控,最一般的應用就是指定視圖V,一般每個控制器可以包含多個動作(Action),每個動作對應一個視圖,控制器就是通過動作來控制視圖的;
- V:就是用來處理顯示的了,使用者能看到的東西應該都在這裡,我們常說的“代碼與視圖分離”中的視圖與這裡的視圖是基本一致的,都是為了只顯示,方便程式員與美工配合工作,也使程式更易於理解與維護。
實現方式
本架構中,我們採用如的結構來組織MVC各部分,並定義如下常量來指定各部分的位置,
LQP_LIB_DIR :定義庫位置
PRJECT_DIR :定義項目位置
APP_CONTROLLER_DIR :定義控制器位置
APP_VIEW_DIR :定義視圖位置
APP_MODEL_DIR :定義模組位置
- 在public下建立config檔案夾,在config下新增文lib_config.php,用於組態架構可能需要的所有配置,目前內容如下:
<?phpdefine('LQP_LIB_DIR', 'E:/code/projects/LoveQiPai/WWW/library');//庫位置set_include_path(LQP_LIB_DIR.";.");//設定php包含路徑?>
修改public/config/config.php中的內容為如下:(註:PROJECT_DIR要修改為你的項目在你磁碟上的位置)
<?phpinclude 'lib_config.php';define('PROJECT_DIR', 'C:\Users\z\Documents\NetBeansProjects\LQP_Framework');//項目位置,TODO:修改為你項目的實際位置define('APP_CONTROLLER_DIR', PROJECT_DIR.'\application\controllers');//控制器位置define('APP_VIEW_DIR', PROJECT_DIR.'\LQP_Framework\application\views');//視圖位置define('APP_MODEL_DIR' , PROJECT_DIR.'\application\models');//models位置?>
只所以定義上面這些常量是為了對項目更多的控制權,比如,你可以把controller放在app中,而不是application中,當然你也可以使用“約定勝於配置”的方式,把APP_CONTROLLER_DIR 、APP_VIEW_DIR 及APP_MODEL_DIR 定義在你的架構代碼中。
另外,PROJECT_DIR的位置一般也可以通過當前檔案的路徑推匯出來,這個我們日後再討論。
下一節我們繼續通過分析URL來實現簡單的Controller功能,讓“代碼與設計分離”。
本節代碼:http://cid-8248e4adbf2b92f3.office.live.com/self.aspx/.Public/Lesson%203.rar