用MVC模型引導(dǎo)你的WEB設(shè)計思路
作者的blog:http://blog.csdn.net/oyiboy
習(xí)慣于過程式的開發(fā),一直向往著面向?qū)ο?。無奈半路出家人,沒有一點(diǎn)內(nèi)力基礎(chǔ),看了一大堆面向?qū)ο蟮臅仓皇强吹靡活^霧水。對于MVC的概念也是偶然了解到的,感覺能和WEB開發(fā)結(jié)合起來讓項目面向?qū)ο蠡?。以下是我一點(diǎn)點(diǎn)心得。
先介紹一下MVC的概念:
MVC(Model-View-Controller),即把一個應(yīng)用的輸入、輸出、處理流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個應(yīng)用被分成三個層——模型層、視圖層、控制層。
模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。即是MVC的主要核心。
視圖(View):代表用戶交互界面,也就是Web的HTML界面。
控制(Controller):可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求。
以下以一個簡單的留言板作為分析例子。
1)從上面的概念來看,留言板可以切成三部份。
模型(M):包含 數(shù)據(jù)庫鏈接、生成數(shù)據(jù)集、數(shù)據(jù)庫更新操作。
視圖(V):包含 獲取模型的數(shù)據(jù)集,將數(shù)據(jù)集內(nèi)填充到各種顯示界面內(nèi),如(留言板列表,管理控制頁面,添加修改刪除界面等一切用戶看得到的頁面。)
控制(C):包含 數(shù)據(jù)庫更新的數(shù)據(jù)校驗(yàn),將更新完畢后的結(jié)果轉(zhuǎn)交給視圖進(jìn)行呈現(xiàn)。
2)三部份已經(jīng)出來,下面是更進(jìn)一步的細(xì)化。
模型(M)
數(shù)據(jù)鏈接:數(shù)據(jù)鏈接參數(shù)、鏈接失敗處理。
數(shù)據(jù)操作:生成固定格式的數(shù)據(jù)集、運(yùn)行單行SQL、解析固定格式的數(shù)據(jù)集更新數(shù)據(jù)庫(內(nèi)容包括有:留言記錄,管理員帳號,系統(tǒng)設(shè)定)。
文件操作:將文件內(nèi)部格式封成數(shù)據(jù)集,并附帶讀取寫入文件操作。(內(nèi)容包括有:留言板樣式設(shè)定、版權(quán)設(shè)定、搜索引擎關(guān)鍵字設(shè)定、留言板標(biāo)題設(shè)定)
視圖(V)
數(shù)據(jù)顯示:根據(jù)要求授權(quán)給控制器[C]向模型[M]請求數(shù)據(jù)集,然后根據(jù)數(shù)據(jù)集顯示出界面。
操作結(jié)果顯示:根據(jù)控制返回的數(shù)據(jù)資料決定顯示的提示資料
具體資料包括有:
留言添加頁:判斷留言者是否管理員、判斷本次留言是回復(fù)還是新建留言。
留言管理頁:批量刪除留言、查詢留言、管理員帳號管理、系統(tǒng)設(shè)定等。
留言顯示頁:判斷留言是否為管理員專用、判斷本留言是否為管理員發(fā)布、是否允許回復(fù)、是否顯示留言者的敏感資料、留言是否需要審核后再顯示。
控制(C)
數(shù)據(jù)/文件操作:接收操作資料,校驗(yàn)數(shù)據(jù)是否符合條件,引用模型的生成數(shù)據(jù)集類生成指定數(shù)據(jù)集,然后交給相應(yīng)的模型操作方法操作,并獲取操作結(jié)果以預(yù)定好的格式轉(zhuǎn)交給視圖處理
3)系統(tǒng)基本上細(xì)化完畢,下一步就是將以上分析出來的東西封裝成Class
模型(M):
數(shù)據(jù)庫鏈接和數(shù)據(jù)操作可以封成一個Class。
數(shù)據(jù)庫數(shù)據(jù)集的結(jié)構(gòu),可以引用Dictionary控件與數(shù)組完成。其間操作也可以封成一個Class具體可以仿造ASP.net中Dataset對象的部份機(jī)構(gòu)。
文件操作部份封裝成一個Class
文件結(jié)構(gòu)定義可以封成一個Class以方便控制直接引用,然后轉(zhuǎn)交給文件操作Class進(jìn)行相應(yīng)的操作。
視圖(V):
視圖部可均是以文件模式出現(xiàn),也可以將部份代碼封裝后引用。也可以引用現(xiàn)有的模板類實(shí)現(xiàn)代碼分離等。
控制(C):
數(shù)據(jù)校驗(yàn):SQL注入防御處理、日文字符替換處理、特定常用校驗(yàn)正則式,這個是控制器常用的函數(shù),可以封成Class也可以以函數(shù)型式存在獨(dú)立文件,使用時直接引用。
數(shù)據(jù)/文件更新操作:由于直接操作,可以避免使用Class,而是以文件模式出現(xiàn),每個文件處理模型(M)中的某個類。并完成控制(C)的工作。
視圖[V]模型[C]鏈接器:接收視圖[V]要求數(shù)據(jù)集的請求,將請求轉(zhuǎn)換成模型[M]合適的SQL句,然后交給模型[M]數(shù)據(jù)集成生器生成數(shù)據(jù)集,然后返回給視圖[V],這個處理比較麻煩,如果沒必要作得太嚴(yán)謹(jǐn)?shù)脑捒梢灾苯邮褂米侄蚊?,并在視圖[V]以SQL標(biāo)準(zhǔn)的條件句進(jìn)向模型[M]請求數(shù)據(jù)。
疑:
視圖[V]模型[C]鏈接器,對這個的設(shè)定我還是有點(diǎn)遲疑的。因?yàn)樵贛VC中,V對M的請求中是不需要C的摻和的,但是,這個鏈接器的操作確實(shí)很符合C的概念,所以這里我把它放在了控制器[C]里?;蛟S他可以放至在視圖[V]內(nèi)。畢竟這個是視圖[V]的事。這個就看每個人對MVC的理解了。
以上基本完成了留言板的結(jié)構(gòu)分析與類的抽象,有不少的地方比較繁瑣,甚至是啰嗦,一個留言板其實(shí)是沒必要這樣,不過,這個例子里作出來的不少Class可以直接使用在其它更大的項目中去,比如控制器[C]中的數(shù)據(jù)集請求轉(zhuǎn)換器,校驗(yàn)部份、模型[M]中的數(shù)據(jù)庫鏈接等,之所以遵循MVC模型進(jìn)行編程不但是為了讓程序設(shè)計更靈活,最重要一點(diǎn)是可以很快將項目拆開成一小塊一小塊,然后又將這些小塊再折成更小的塊,一直折到單個類的某個方法某個屬性,等你完成這些小塊代碼后,那系統(tǒng)也就完成了。
相關(guān)文章
求職應(yīng)聘面試技巧 不妨看看美國大學(xué)生的求職面試
求職應(yīng)聘面試技巧 不妨看看美國大學(xué)生的求職面試...2007-10-10自學(xué)成才的秘密:115個 web Develop 資源
自學(xué)成才的秘密:115個 web Develop 資源...2007-02-02大學(xué)生最應(yīng)該旅游的十個城市圖文詳細(xì)介紹
大學(xué)生最應(yīng)該旅游的十個城市圖文詳細(xì)介紹...2007-10-10ASP.NET、ASP、PHP、JSP之間有什么區(qū)別?
ASP.NET、ASP、PHP、JSP之間有什么區(qū)別?...2006-10-10