1. 程式人生 > >MVC中V和C的區分識別_控制層與顯示層的剝離

MVC中V和C的區分識別_控制層與顯示層的剝離

至於mvc是什麼就不再多解釋了,在這幾天我寫的一個小程式中我用到了mvc,但是在剛開始的時候我發現,我其實一直用的是m(v),因為我的程式碼v和c在很大程度上都沒有分開,至於m因為只是一個數據模型,所以現對來說比較好區分,只是m的設計可能不是很合理。
但是對於v和c就不是合理不合理的問題了,而是在於怎麼分開,並且在什麼時候分開的問題,所以對於v、c的識別是很重要的,我就是走了很多彎路才稍微明白v、c的區別。以下我就依據一個簡單的示例分析vc的識別(例子是偽碼)。
比如要做一個考題的系統,大概這個樣子
這裡寫圖片描述
,你要做的就是,點選下一題button後介面能夠更新試題與選項,現在資料模型已經有了(是一個存放試題的列表examlist),所以關鍵就是實現一個點選事件,然後將題顯示出來即可。
我第一次的編碼大概就是這樣:


//偽碼,不可執行
//按鈕點選事件
buttonclick_event(){
showNext();//顯示下一題
}
//顯示下一題
showNext(){
num++;//因為在列表中,所以只需要用下標就可以,num代表當前試題列表的下標
試題.text = examlist[num].question;//更新試題
選項.text = examlist[num].abcd;//更新選項。。
 .
 .
}

這樣做其實是沒問題的,並且也能完成預期任務,但是關鍵就在於這樣做的話只是現在看來是沒問題,但是等到開發到後期,你會發現就有些問題,雖然不是致命的,但是也會使你的程式碼冗餘重複,這裡的問題就在於num++ 後的程式碼其實就已經屬於v這個層次了,而對於這個例子其c控制層就一句話num++,c的作用就是控制的作用,其控制的東西就是資料模型

,所以要將二者分開,這樣的好處從當前來看其實就和函式的好處一樣,就是不同的函式做不同的事情,各司其職,在長遠來看,比如到將來你需要顯示問題,但是不需要num++了,或者你有多了一個點選按鈕,直接跳三題的功能,這時候你會發現如果你分開的話,就好做多了,因為二者是兩個獨立的函式,你只需要呼叫相應的函式就行了,所以分開的好處不言而喻。
下面給出程式碼

//按鈕點選事件
//偽碼,不可執行
examitem;//如果能夠在加一個單道題的資料模型更好
buttonclick_event(){
nextctrl();
nextshow();
}

//c層
nextctrl(){
num++;
examitem =examlist[num];
}

//v層
nextshow(){ 試題.text = examitem.question;//更新試題 選項.text = examitem.abcd;//更新選項。。 }

雖然程式碼長了,但是對以後的開發很有好處,避免出現v、c連在一起的尷尬。

總結:

對於簡單的設計來說,c就是控制資料模型的並且將資料模型整合成一個v層能直接使用的資料模型,而v層就是顯示的,其作用就僅僅是將資料模型中的內容取出(僅僅取出,連最簡單的判斷都不需要),並且顯示即可。

套用一些設計模式,雖然不能避免出錯,但能很大程度上減少你的出錯。