面向?qū)ο髆vc

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫(xiě),一種軟件設(shè)計(jì)典范肛跌,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面 顯示分離的方法組織代碼衍慎,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面转唉,在改進(jìn)和個(gè)性化定制界面及用戶(hù)交互的同時(shí),不需要重新編寫(xiě)業(yè)務(wù)邏輯稳捆。
如何設(shè)計(jì)一個(gè)程序的結(jié)構(gòu)赠法,這是一門(mén)專(zhuān)門(mén)的學(xué)問(wèn),叫做"架構(gòu)模式(architectural pattern)乔夯,屬于編程的方法論砖织。MVC模式就是架構(gòu)模式的一種。
問(wèn)題:假如你的項(xiàng)目需要保存用戶(hù)的數(shù)據(jù)到后臺(tái)服務(wù)器末荐。
(1)你數(shù)據(jù)來(lái)源從數(shù)據(jù)庫(kù)中來(lái)侧纯。也就是說(shuō),你需要根據(jù)具體的數(shù)據(jù)來(lái)生成一個(gè)顯示數(shù)據(jù)的頁(yè)面甲脏。
(2)在用戶(hù)添加一個(gè)特辦事項(xiàng)后眶熬,你需要把數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。然后块请,從數(shù)據(jù)庫(kù)中取出當(dāng)前最新的數(shù)據(jù)娜氏,顯示給用戶(hù)。
使用mvc框架實(shí)現(xiàn)-分析
Model:提供數(shù)據(jù)及操作數(shù)據(jù)的各類(lèi)方法墩新。
View:提供視圖贸弥。
Controller:接收用戶(hù)的動(dòng)作,修改數(shù)據(jù)海渊,更新視圖茂腥。
數(shù)據(jù)保存在json中

"data":[{
                "id":1,
                "todo":"學(xué)習(xí)js",
                "time":"2016-08-01"
            },
            {
                "id":2,
                "todo":"吃飯"
            },
            {
                "id":31,
                "todo":"散步",
                "time":"2016-08-01"
            },
            {
                "id":4,
                "todo":"休息"
            }]
添加數(shù)據(jù)

第一步:獲取用戶(hù)的數(shù)據(jù)。
第二步:controller.addData(something).先關(guān)鍵字過(guò)濾切省,完成后,再調(diào)用Model.addData();
第三步:controller.showData()
從Model中獲取數(shù)據(jù)帕胆。
從模板(view視圖)中獲取結(jié)構(gòu)信息朝捆。
把結(jié)構(gòu)信息中占位符(如$todo$)換成數(shù)據(jù)。
顯示數(shù)據(jù)(container.innerHTML)

理解mvc的運(yùn)轉(zhuǎn)

添加數(shù)據(jù):從controller -----> model
獲取數(shù)據(jù):model --->controller
顯示數(shù)據(jù):controller( model + view) --- > 數(shù)據(jù)顯示頁(yè)面懒豹。

var model = {
        "data":[{
                "id":1,
                "todo":"學(xué)習(xí)js",
                "time":"2016-08-01"
            },
            {
                "id":2,
                "todo":"吃飯"
            },
            {
                "id":31,
                "todo":"散步",
                "time":"2016-08-01"
            },
            {
                "id":4,
                "todo":"休息"
            }]
        ,
        "getMaxId":function(){
            var maxId = this.data[0].id;
            for(var i = 0; i<this.data.length;i++){
                if(this.data[i].id > maxId)
                    maxId = this.data[i].id;
            }
            return maxId; 
        },
        "addData":function(todo){
            var id = this.getMaxId() + 1;
            var o = {"id":id,"todo":todo};
            this.data.push(o);
            console.info(this.data);
        },
        "getTotalNum":function(){ //當(dāng)前的數(shù)據(jù)的條數(shù)
            return this.data.length;
        }
    }
    
    //控制器
    var controller = {
        showData:function(){
            //第一步:取出模板的內(nèi)容
            var string = document.getElementById("template").innerHTML;
            
            //第二步:通過(guò)正則來(lái)進(jìn)行數(shù)據(jù)的替換
            var str = "";
            var p1 = /\$\w+\$/g;
            for(var i = 0; i<model.data.length;i++){
                var _str = string.replace(p1,function(m){
                    var t = m.replace(/\$/g,"");//去掉m前后$芙盘,相當(dāng)于把$id$ -- >id
                    return model.data[i][t];
                });
                str +=_str; //把每次替換的結(jié)果都保存下來(lái)。
            }
            
            //第三步:顯示最終的頁(yè)面
            document.getElementById("container").innerHTML = str;
            
            //第四步:更新總數(shù)據(jù)的條數(shù)
            this.updateTotalNumber();
        },
        addData:function(something){
            //檢測(cè)合法性脸秽,有效性....
            // 檢測(cè)通過(guò)儒老,則調(diào)用model的相關(guān)方法去實(shí)現(xiàn)具體的工作
            if(something == "戰(zhàn)爭(zhēng)"){
                return false;
            }
            else{
                model.addData(something);
            }
        },
        updateTotalNumber:function(){
            document.getElementById("totalNumber").innerHTML = model.getTotalNum() +"條";
        }
    }

    //點(diǎn)擊按鈕后
    document.getElementById("btn").onclick =function(){
        var something = document.getElementById("todo").value;

       // var newToDo = {"id":100,"todo":something};
        
       // model.addData(something); 
        controller.addData(something);
        //數(shù)據(jù)添加完成
        controller.showData();
        
        console.info(model.data);
    }
    
    controller.showData();
    
    
為什么要使用mvc

1.有利于分工
例如專(zhuān)人負(fù)責(zé)model
2.有利于細(xì)化問(wèn)題,分步解決
例如:你希望多加一些關(guān)鍵字的處理记餐,則可以在controller去更新驮樊,而不會(huì)影響其它的開(kāi)發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子囚衔,更是在濱河造成了極大的恐慌挖腰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件练湿,死亡現(xiàn)場(chǎng)離奇詭異猴仑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肥哎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)辽俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人篡诽,你說(shuō)我怎么就攤上這事崖飘。” “怎么了霞捡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵坐漏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我碧信,道長(zhǎng)赊琳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任砰碴,我火速辦了婚禮躏筏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呈枉。我一直安慰自己趁尼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布猖辫。 她就那樣靜靜地躺著酥泞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啃憎。 梳的紋絲不亂的頭發(fā)上芝囤,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音辛萍,去河邊找鬼悯姊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贩毕,可吹牛的內(nèi)容都是我干的悯许。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辉阶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼先壕!你這毒婦竟也來(lái)了瘩扼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤启上,失蹤者是張志新(化名)和其女友劉穎邢隧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體冈在,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倒慧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了包券。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纫谅。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溅固,靈堂內(nèi)的尸體忽然破棺而出付秕,到底是詐尸還是另有隱情,我是刑警寧澤侍郭,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布询吴,位于F島的核電站,受9級(jí)特大地震影響亮元,放射性物質(zhì)發(fā)生泄漏猛计。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一爆捞、第九天 我趴在偏房一處隱蔽的房頂上張望奉瘤。 院中可真熱鬧,春花似錦煮甥、人聲如沸盗温。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卖局。三九已至,卻和暖如春双霍,著一層夾襖步出監(jiān)牢的瞬間砚偶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工店煞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人风钻。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓顷蟀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骡技。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸣个,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容