編程初學(xué)者對MVC模式的理解

關(guān)鍵字:編程 初學(xué) MVC

寫在前面

第一篇文章,稍微交待一下。利用業(yè)余時(shí)間自學(xué)編程一個(gè)月,語法部分都還沒能完全掌握,在一位前輩做的教學(xué)
視頻中第一次了解到mvc編程設(shè)計(jì)模式,然后在學(xué)習(xí)的教材中看到一個(gè)編程游戲?qū)嵗吙催吽伎?,雖然書上沒
有明言使用到mvc模式,但是以這種模式去對照其代碼的設(shè)計(jì)思路,產(chǎn)生一些想法,希望記下來作為學(xué)習(xí)的一種
積累。

一、對概念的理解:

  • 根據(jù)編程的原理,我們要使用一個(gè)東西必先聲明它。所以我們首先要知道m(xù)vc模式中的M/V/C分別代表什么:

M:即model(模型),具體來說指數(shù)據(jù)模型,是程序項(xiàng)目操作的實(shí)際對象;
V:即view(視圖/視窗/界面),具體來說就是我們?nèi)庋壑苯涌吹降目刹僮鹘缑妫?br> C:即control(控制器/操作者),具體來說就是我們程序項(xiàng)目中那只看不見的手,由它來完成對具體對象的操作;

  • 其次我們應(yīng)該知道這被放到一起的三者之間有什么關(guān)系,因?yàn)槭浅鯇W(xué),接觸的廣度和深度有限,所以只談其最表面的部分:
    如果用mvc來描述一個(gè)程序,那么我想應(yīng)該是這樣的:
  1. V是程序的最外層,是我們?nèi)庋壑苯涌梢姷牟糠?,從這一部分我們看到程序的外觀,并且可以通過這一層于程序進(jìn)行交互:輸入內(nèi)容——獲得反饋,最后獲得新的程序外觀V;
  2. 當(dāng)然我們獲得這個(gè)新的程序外觀并不是直接的,并不是我們輸入的內(nèi)容自己轉(zhuǎn)化為結(jié)果,程序外觀也不是自己自動(dòng)產(chǎn)生的變化(雖然肉眼看上去就是這樣);做出這些變化,執(zhí)行,接受我們輸入的內(nèi)容并產(chǎn)出結(jié)果的工作者其實(shí)是C,控制器;
  3. 那么M模型是什么呢?模型可以被看作一個(gè)載體或者一個(gè)容器,它裝載者我們輸入的內(nèi)容,根據(jù)v與c之間約定的形式接受c的改造,最后得出新的結(jié)果,這個(gè)結(jié)果又需要通過v來展示出來。

二、在編程實(shí)例中的應(yīng)用

瞎想:
我猜想mvc模式應(yīng)該是面向?qū)ο缶幊痰囊环N發(fā)展。面向?qū)ο缶幊滔啾葌鹘y(tǒng)的面向過程編程的優(yōu)勢在于將程序要處
理的內(nèi)容模塊化處理——編程過程實(shí)際上是將要處理的問題分解為一個(gè)個(gè)對象(在編程中就是創(chuàng)建類/結(jié)構(gòu)體這
樣模塊化的東西),這樣可以大大降低單純的面向過程編程方法中要遇到的邏輯與流程的復(fù)雜性,編程者可以花
更多的時(shí)間和精力去處理關(guān)鍵的算法和數(shù)據(jù)問題,而不至于過多糾結(jié)邏輯與流程的問題;因?yàn)楸环纸鉃橐粋€(gè)個(gè)獨(dú)
立的對象,需要什么就創(chuàng)建什么,需要誰就調(diào)用誰,程序代碼的可讀性和可維護(hù)性也大大提高;

mvc模式正式將這種模塊化/對象化模式運(yùn)用到整體的程序設(shè)計(jì)上:mvc模式就是將用戶可視界面/數(shù)據(jù)內(nèi)容和程序操作三者分離的模塊化處理。因而我們在設(shè)計(jì)一個(gè)程序項(xiàng)目的時(shí)候就可以分成這三個(gè)方面去設(shè)計(jì),而不去糾結(jié)三者之間的關(guān)系;

以書上的實(shí)例為例看看mvc模式的應(yīng)用:

書中以經(jīng)典消除游戲《2048》為例講解了一個(gè)程序設(shè)計(jì)的整個(gè)過程:(寫到這里發(fā)現(xiàn)簡書不能直接畫流程圖腦圖什么的,好憂傷 T T...)

1. V實(shí)際上是這個(gè)程序設(shè)計(jì)的最簡單部分:
  1. 《2048》這個(gè)游戲包含兩個(gè)界面:1游戲主界面(默認(rèn)首頁)2游戲設(shè)置界面;
  1. 游戲主界面又包含游戲地圖區(qū)域和游戲記分板;
  2. 游戲設(shè)置界面又包含維度設(shè)置和闕值設(shè)置兩個(gè)界面要素;
  3. 只需要通過很簡單的代碼就可以作出上面這些界面,完全不用管它們復(fù)雜的邏輯關(guān)系和數(shù)據(jù)存儲(chǔ)問題;
2.M對我這個(gè)新手來說是最難理解的部分,在這個(gè)實(shí)例中我這樣理解其數(shù)據(jù)模型的創(chuàng)建過程:
  1. 不論什么樣的程序項(xiàng)目我們談到數(shù)據(jù)最先想到的是兩個(gè)基本的問題:1數(shù)據(jù)的存儲(chǔ),2數(shù)據(jù)的變更,至于它怎樣表現(xiàn),怎樣顯示我們先不考慮。
  1. 數(shù)據(jù)的存儲(chǔ)實(shí)際上就是需要一個(gè)數(shù)據(jù)的載體,這個(gè)載體應(yīng)該要包含一些我們需要的屬性和方法;
    數(shù)據(jù)的變更就是對載體中的內(nèi)容進(jìn)行操作,通過其自身屬性與方法去改變它;
  2. 《2048》項(xiàng)目中最核心的數(shù)據(jù)模型就是游戲主地圖上顯示的數(shù)字及其變更,所以我們需要?jiǎng)?chuàng)建一個(gè)這樣的類,來存儲(chǔ)這些數(shù)字/顏色和位置信息,當(dāng)它發(fā)生改變時(shí)反應(yīng)這些變化;這其中還涉及到數(shù)據(jù)模型構(gòu)造形式的選擇,因?yàn)楹芏嘧兞款愋投伎梢詫?shí)現(xiàn)我們需要的效果,選擇合適的類型非常重要,但因?yàn)樗鶎W(xué)有限,對這方面尚沒有說的清楚的理解,所以暫時(shí)不討論;
3.C作為控制器是程序的實(shí)際執(zhí)行者和掌控者,是程序的核心,是幕后的操作者;
  1. 但在實(shí)際編程過程中,我們發(fā)現(xiàn)控制者的很多行為其實(shí)在創(chuàng)建相關(guān)v和m的時(shí)候已經(jīng)自然地寫進(jìn)代碼中去了。
  1. 而難點(diǎn)則在于那些響應(yīng)v的輸入發(fā)生的數(shù)據(jù)變化最后再反應(yīng)到v上的效果。這一部分的內(nèi)容還在學(xué)習(xí)中,暫時(shí)不談,之后再補(bǔ)充。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容