中国a级毛片免费观看,啦啦啦资源视频在线完整免费高清,真人性囗交69视频,日本毛X片免费视频观看视频

rexian

咨詢電話:023-6276-4481

熱門文章

聯(lián)系方式

電 話:023-6276-4481

郵箱:broiling@qq.com

地址:重慶市南岸區(qū)亞太商谷6幢25-2

當(dāng)前位置:網(wǎng)站首頁 > 技術(shù)文章 > 淺談MVC架構(gòu)

淺談MVC架構(gòu)

編輯:pansiqin 發(fā)表時間:2017-12-12 10:58:55
pansiqin

一、什么是MVC

     1、概念

        MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。

        小編點睛:MVC就是類似三層的一種架構(gòu),主要還是采用封裝(分層)的思想,來降低耦合度,從而使我們的系統(tǒng)更加的靈活,擴展性更好。

    2、內(nèi)容

      Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。
      View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。
      Controller(控制器)是應(yīng)用程序中處理用戶交互的部分。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)

        小編點睛:


          

    3、優(yōu)點

       (1)首先,最重要的一點是多個視圖能共享一個模型。同一個模型可以被不同的視圖重用,大大提高了代碼的可重用性
       (2)由于MVC的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據(jù)這種設(shè)計思想能構(gòu)造良好的松耦合的構(gòu)件。
       (3)此外,控制器提高了應(yīng)用程序的靈活性和可配置性。控制器可以用來聯(lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強有力的手段。


   4、缺點

       (1)增加了系統(tǒng)結(jié)構(gòu)和實現(xiàn)的復(fù)雜性。

          對于簡單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分離,會增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過多的更新操作,降低運行效率。
 ?。?)視圖與控制器間的過于緊密的連接。

           視圖與控制器是相互分離,但確實聯(lián)系緊密的部件,視圖沒有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
 ?。?)視圖對模型數(shù)據(jù)的低效率訪問

             依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。
  (4) 目前,一般高級的界面工具或構(gòu)造器不支持MVC架構(gòu)。

              改造這些工具以適應(yīng)MVC需要和建立分離的部件的代價是很高的,從而造成使用MVC的困難

        小編點睛:根據(jù)MVC的優(yōu)缺點,我們知道,每個東西都有自己適用的范圍。

       對于開發(fā)存在大量用戶界面,并且業(yè)務(wù)邏輯復(fù)雜的大型應(yīng)用程序,MVC將會使你的軟件在健壯性、代碼重用和結(jié)構(gòu)方面上一個新的臺階。盡管在最初構(gòu)建MVC框架時會花費一定的工作量,但從長遠(yuǎn)角度看,它會大大提高后期軟件開發(fā)的效率。

        所以我們在具體適用時,要綜合考慮其適用范圍,

二、工作原理

    1、web工作原理圖



        小編點睛:這張圖描述的是webform的處理方式,它通過url請求服務(wù)器,訪問index_aspx類的Page_Load()方法,然后根據(jù)其邏輯結(jié)構(gòu)返回結(jié)果


 

       小編點睛:這張圖描述的是MVC的處理方式,兩者明顯不同,首先要訪問的url地址就不一樣,它表示news對象的index方法,所以首先根據(jù)路由配置訪問該方法,然后根據(jù)業(yè)務(wù)邏輯得出結(jié)果,最后調(diào)用index.cshtml視圖來顯示結(jié)果

   2、內(nèi)部工作原理圖

                                       

        小編點睛:上邊這張圖是MVC的處理過程:首先控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個模型來進行處理。然后模型根據(jù)用戶請求進行相應(yīng)的業(yè)務(wù)邏輯處理,并返回數(shù)據(jù)。最后控制器調(diào)用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過視圖呈現(xiàn)給用戶。

    3、小例子

       (1)先在model層寫一個Dog實體類


[csharp] view plain copy

  1. public class Dog  

  2. {  

  3.     public int ID { getset; }  

  4.     public string Name { getset; }  

  5.   

  6.     public override string ToString()  

  7.     {  

  8.         return "ID=" + this.ID +",Name=" + this.Name ;  

  9.     }  

  10. }  


       (2)先在controller層寫相應(yīng)的代碼


[csharp] view plain copy

  1. //控制器類(繼承了Controller)  

  2.    public class HomeController : Controller  

  3.    {  

  4.        #region 0.1初始化數(shù)據(jù)集合 void IntData()  

  5.        /// <summary>  

  6.        /// 初始化數(shù)據(jù)集合  

  7.        /// </summary>  

  8.        public List<Models.Dog> IntData()  

  9.        {  

  10.            List<Models.Dog> list =new List<Models.Dog >()  {  

  11.                new Dog(){ ID=1,Name ="小樣~~" },  

  12.                new Dog(){ ID=2,Name ="小樣2~~" },  

  13.                new Dog(){ ID=3,Name ="小樣3~~" },  

  14.                new Dog(){ ID=4,Name ="小樣4~~" },  

  15.            };  

  16.            return list;  

  17.        }  

  18.  

  19.        #endregion  

  20.   

  21.        // GET: /Home/  

  22.        /// <summary>  

  23.        /// Action方法(可堪稱MVC設(shè)計模式的Model  

  24.        /// </summary>  

  25.        /// <returns></returns>  

  26.        public ActionResult Index()  

  27.        {  

  28.            System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000);  

  29.            //2.1處理當(dāng)前業(yè)務(wù)(比如讀取數(shù)據(jù)庫。判斷等)  

  30.            //2.1.1創(chuàng)建一個數(shù)據(jù)集合(偽數(shù)據(jù),并獲得數(shù)據(jù)  

  31.            List<Models.Dog> list = IntData();  

  32.            //2.1.2遍歷集合,生成HTNL代碼,存入builder  

  33.            list.ForEach (d => {  

  34.                sbHtml.Append("<div>" + d.ToString() + "</div>");  

  35.                  

  36.            });  

  37.            //2.2使用viewBag傳輸數(shù)據(jù)給同名Index.cshtml 視圖  

  38.            //viewBag是一個dynamic類型集合,可以動態(tài)添加任意類型的任意名稱的屬性和值  

  39.            ViewBag.HtmlStr = sbHtml.ToString();  

  40.   

  41.            return View();  

  42.        }  

  43.    }  


       (3)最后在view層顯示數(shù)據(jù)


[csharp] view plain copy

  1. @{  

  2.     Layout = null;  

  3. }  

  4.   

  5. <!DOCTYPE html>  

  6.   

  7. <html>  

  8. <head>  

  9.     <meta name="viewport" content ="width=device-width" />  

  10.     <title>Index</title>  

  11. </head>  

  12. <body>  

  13.     <!-- 相當(dāng)于把Action中的內(nèi)容,存放在此處 輸出!-->  

  14.     @Html.Raw(ViewBag.HtmlStr)  

  15. </body>  

  16. </html>  


       (4)運行效果圖


                                

三、框架VS設(shè)計模式

    1、框架通常是代碼重用,而設(shè)計模式是設(shè)計重用,架構(gòu)則介于兩者之間,部分代碼重用,部分設(shè)計重用,有時分析也可重用。

      在軟件生產(chǎn)中有三種級別的重用:內(nèi)部重用,即在同一應(yīng)用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應(yīng)用和領(lǐng)域都能使用;應(yīng)用框架的重用,即為專用領(lǐng)域提供通用的或現(xiàn)成的基礎(chǔ)結(jié)構(gòu),以獲得最高級別的重用性。

    2、設(shè)計模式是對在某種環(huán)境中反復(fù)出現(xiàn)的問題以及解決該問題的方案的描述,它比框架更抽象??蚣芸梢杂么a表示,也能直接執(zhí)行或復(fù)用,而對模式而言只有實例才能用代碼表示。

     設(shè)計模式是比框架更小的元素。一個框架中往往含有一個或多個設(shè)計模式,框架總是針對某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用。

      可以說,框架是軟件,而設(shè)計模式是軟件的知識。

    3、簡而言之:框架是大智慧,用來對軟件設(shè)計進行分工;設(shè)計模式是小技巧,對具體問題提出解決方案,以提高代碼復(fù)用率,降低耦合度。


        小編總結(jié):通過MVC的學(xué)習(xí),我們要知道它是用來分割頁面和數(shù)據(jù)庫訪問的框架,降低了兩者的耦合度,同時通過Controller的控制,也使系統(tǒng)更加的靈活,使我們的代碼更健壯,復(fù)用性更強,但是凡事都有他適用的范圍,我們不能覺得它好,就不敢三七二十一的瞎用,有時可能會適得其反,因此MVC的學(xué)習(xí)還需要我們以后慢慢探討。