## 快速入門三、理解MVC
本章將講述在網絡系統(WEB系統)開發中,MVC(模型-視圖-控制器)架構的理念、設計以及在sp框架中的實際應用方式等。
首先我們來看看MVC架構的示意圖:

從上圖我們可以將MVC簡單地理解成:
和訪問者交互的是控制層(Controller層),控制器(controller)是同類交互的集合,每一個交互的操作,都對應了一個動作(action)。在sp框架中,全部的控制器類都必須繼承于Controller。
> 由于需要比較方便的進行全局控制操作,所以sp加入BaseController的級別,從繼承關系來看是普通的Controller繼承于BaseController,而BaseController繼承于Controller。以下是層級關系圖。

> 加入BaseController后,很多公共的全局操作可以放到BaseController里面來進行,如權限控制,全局提示信息封裝等。
對數據庫進行存取的是模型層(Model層),在sp框架中,全部的模型器類都必須繼承于Model。
顯示頁面模板的是視圖層(View層),在sp框架中,視圖層被集成到了控制器內,所以在實際開發中,視圖層所要制作的只有頁面模板。
上面簡單描述了MVC架構的理解。下面講述一下關于sp框架中的MVC理念,可能比較抽象而不好理解,但是還請耐心去閱讀,畢竟在實際開發中,對MVC理念的理解是非常必要和重要的。
sp框架中的MVC理念,是將網絡系統劃分為三個關注點:交互、數據、頁面模板;也就是我們設計或分析一個網絡系統,就可以從這三個角度去進行:
**交互**:
表現在系統提供了哪些功能,這些功能可以劃分為哪些大類,每一個大類的功能分別都有些什么操作等等。
比如PHP論壇系統,我們可以粗略劃分成板塊、帖子、用戶、站內信息、后臺管理等幾大類的功能,然后用戶的功能里面又包括了注冊、登錄、修改用戶信息等等的多個操作。
> 對應sp框架的控制層(controller層)而言,一個功能大類可以說是一個控制器類(當然,如果該類型概況的范圍比較大,那么還需要繼續拆分成多個控制器類),單個類型內的每一個功能就是一個動作(action,控制器類的方法函數)。然后根據訪問者對系統的每一次操作,sp框架都會自動選擇對應控制器類中的對應動作進行處理。
> 新加入的BaseController,可以理解成在各種功能之上的一個通用的功能集合。
**數據**:
表現在系統對數據庫進行了那些操作。網絡系統幾乎都需要和數據庫打交道。那么,在進行對交互的分析和對系統本身的分析后,我們也大致上可以歸納系統需要哪些數據了。然后我們將這些數據整理歸類,最終可以得出系統需要的數據表是哪些。
就剛才的PHP論壇,按照“板塊、帖子、用戶、站內信息、后臺管理”這五個分類功能,我們可以基本歸納出它們需要:板塊記錄表、帖子記錄表、用戶表、站內信息表、后臺設置表等等。
> 對應sp框架的模型層(Model層)而言,一個表可以說就是對應了一個模型類。而sp框架中的模型父類(spModel)為這些模型類提供大部分與數據庫存取的功能。
**頁面模板**:
每一個網絡系統的開發中,我們都將需要制作相當數量的頁面。簡單來說,控制器的每一個動作(action)都有可能產生一個頁面,所以在理清所有交互,完成控制器的設計后(未寫代碼前),我們就可以得到需要的頁面模板的清單了。然后在模板引擎的幫助下,頁面模板的制作可以與控制器的開發同時進行,以提高開發效率。
按照上面的PHP論壇交互的設計,那么我們可以得到的頁面模板有許多,比如板塊方面,有首頁模板、分區模板、板塊模板等;帖子方面有帖子內容模板、發帖模板、回帖模板等。
>sp框架將視圖層(View層)集成到了控制器內,所以在開發中,控制器將會把需要的數據發送到模板上面。而視圖層所需要的開發,就僅是按照模板的語法進行頁面模板的制作即可。
根據“交互、數據、頁面模板”這三個關注點,那么我們就可以比較全面地去分析和設計一個網絡系統了。請注意這三個關注點并非孤立的,而“交互”正是“數據”與“頁面模板”的基礎,所以對“交互”的分析務必要做到正確并且完善。如果您希望了解更多關于系統分析與設計方面的知識,請到sp網站上面閱讀相關文章。
當我們理解了MVC后,下一步我們可以開始進入實戰,來制作一個簡單的留言本程序了。
- 自述
- 一、入門教程
- 1. 開始使用SpeedPHP
- 2. Hello World
- 3. 理解MVC
- 4. 制作留言本
- 5. 數據操作及Ajax
- 二、框架概述
- 1. 特色
- 2. 版權及開源協議
- 3. 開發環境
- 4. 編碼版本
- 5. SAE平臺使用
- 三、開發指南
- 1. 開發流程
- 2. 架構及擴展
- 3. 程序目錄結構
- 4. 命名建議
- 5. 安全建議
- 6. 用戶自定義
- 7. 模塊modules
- 四、訪問交互
- 1. 表單提交及數據獲取
- 2. session/cookie的使用
- 3. 偽靜態及URL跳轉
- 4. 使用frameset
- 5. 模板引擎特性和使用方法
- 五、數據操作
- 1. 建立數據模型類
- 2. 數據操作教程
- 3. 分頁
- 4. SQL支持及關聯實現
- 5. 多數據庫、主從庫配置