首先我們來看看MVC架構(gòu)的示意圖:
和訪問者交互的是控制層(Controller層),控制器(controller)是同類交互的集合,每一個交互的操作,都對應(yīng)了一個動作(action)。在Thinkphp框架中,全部的控制器類都必須繼承于Action。
對數(shù)據(jù)庫進(jìn)行存取的是模型層(Model層),在Thinkphp框架中,全部的模型器類都必須繼承于Model。
顯示頁面模板的是視圖層(View層)。
上面簡單描述了MVC架構(gòu)的理解。
MVC理念是將網(wǎng)絡(luò)系統(tǒng)劃分為三個關(guān)注點(diǎn):交互、數(shù)據(jù)、頁面模板;也就是我們設(shè)計或分析一個網(wǎng)絡(luò)系統(tǒng),就可以從這三個角度去進(jìn)行:
交互:
表現(xiàn)在系統(tǒng)提供了哪些功能,這些功能可以劃分為哪些大類,每一個大類的功能分別都有些什么操作等等。
比如PHP論壇系統(tǒng),我們可以粗略劃分成板塊、帖子、用戶、站內(nèi)信息、后臺管理等幾大類的功能,然后用戶的功能里面又包括了注冊、登錄、修改用戶信息等等的多個操作。
對應(yīng)Thinkphp框架的控制層(controller層)而言,一個功能大類可以說是一個控制器類(當(dāng)然,如果該類型概況的范圍比較大,那么還需要繼續(xù)拆分成多個控制器類),單個類型內(nèi)的每一個功能就是一個動作(action,控制器類的方法函數(shù))。
數(shù)據(jù):
表現(xiàn)在系統(tǒng)對數(shù)據(jù)庫進(jìn)行了那些操作。網(wǎng)絡(luò)系統(tǒng)幾乎都需要和數(shù)據(jù)庫打交道。那么,在進(jìn)行對交互的分析和對系統(tǒng)本身的分析后,我們也大致上可以歸納系統(tǒng)需要哪些數(shù)據(jù)了。然后我們將這些數(shù)據(jù)整理歸類,最終可以得出系統(tǒng)需要的數(shù)據(jù)表是哪些。
就剛才的PHP論壇,按照“板塊、帖子、用戶、站內(nèi)信息、后臺管理”這五個分類功能,我們可以基本歸納出它們需要:板塊記錄表、帖子記錄表、用戶表、站內(nèi)信息表、后臺設(shè)置表等等。
對模型層(Model層)而言,一個表可以說就是對應(yīng)了一個模型類。而模型父類(Model)為這些模型類提供大部分與數(shù)據(jù)庫存取的功能。
頁面模板:
每一個網(wǎng)絡(luò)系統(tǒng)的開發(fā)中,我們都將需要制作相當(dāng)數(shù)量的頁面。簡單來說,控制器的每一個動作(action)都有可能產(chǎn)生一個頁面,所以在理清所有交互,完成控制器的設(shè)計后(未寫代碼前),我們就可以得到需要的頁面模板的清單了。然后在模板引擎的幫助下,頁面模板的制作可以與控制器的開發(fā)同時進(jìn)行,以提高開發(fā)效率。
按照上面的PHP論壇交互的設(shè)計,那么我們可以得到的頁面模板有許多,比如板塊方面,有首頁模板、分區(qū)模板、板塊模板等;帖子方面有帖子內(nèi)容模板、發(fā)帖模板、回帖模板等。
根據(jù)“交互、數(shù)據(jù)、頁面模板”這三個關(guān)注點(diǎn),那么我們就可以比較全面地去分析和設(shè)計一個網(wǎng)絡(luò)系統(tǒng)了。請注意這三個關(guān)注點(diǎn)并非孤立的,而“交互”正是“數(shù)據(jù)”與“頁面模板”的基礎(chǔ),所以對“交互”的分析務(wù)必要做到正確并且完善。