標籤:mvc 架構
2014.11.8我們完成為時兩月的中級軟考準備,沒有多餘的時間去放鬆、娛樂,緊接著迎來了我進入提高班以來真正的一次項目實踐--高效平台。
我做的是基礎系統,就是一個算是幕後英雄的角色吧!考試系統、評教系統需要我們的資料、同時新生入學系統由我們來維護,所以說任務艱巨而重要,這一節最重要的就是說軟體開發中的第一項內容:知識補充---MVC
何謂MVC(Model View Controller):M是指業務模型,V是指使用者介面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離,從而使同一個程式可以使用不同的表現形式。比如統計學生資料可以分別用柱狀圖、餅形圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。
它的具體操作過程如下所示:
模型(Model) “資料模型”(Model)用於封裝與應用程式的商務邏輯相關的資料以及對資料的處理方法。“模型”有對資料直接存取的權力,例如對資料庫的訪問。“模型”不依賴“視圖”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中資料的變化一般會通過一種重新整理機制被公布。為了實現這種機制,那些用於監視此模型的視圖必須事先在此模型上註冊,從而,視圖可以瞭解在資料模型上發生的改變.
視圖(View) 視圖層能夠實現資料有目的的顯示(理論上,這不是必需的)。在視圖中一般沒有程式上的邏輯。為了實現視圖上的重新整理功能,視圖需要訪問它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。
控制器(Controller) 控制器起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出響應。“事件”包括使用者的行為和資料模型上的改變。
下面用一個例子來對MVC進行解釋:
建立一個項目如所示:
右擊Controller檔案夾,建立一空Controller,命名為HelloWorld,將代碼改為如下:
public class HelloWorldController : Controller{ public string Index() { return "Hello world"; } public string Hello() { return "Hello everyone"; } public string Hello2(string name) { return "Hello to you " + name; }} 右擊添加視圖:
在建立的視圖中添加代碼:(結合了css+div)
@using 自動匯入程式集.Models@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <style type="text/css"> #tblist { border: 1px solid #0094ff; width: 600px; margin: 10px auto; border-collapse: collapse; } #tbList th, td { border: 1px solid #0094ff; padding: 10px; } </style> <script type="text/javascript"> function del(id) { if (confirm("您確定要刪除嗎?親~~")) { window.location = "/home/del" + id; } } </script></head><body> <table> <tr> <th>id</th> <th>標題</th> <th>分類</th> <th>狀態</th> <th>時間</th> <th>操作</th> </tr> <!--遍曆Action方法,設定給ViewData集合資料,產生HTML代碼--> @foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>) { <tr> <td>@a.AId </td> <td>@a.ATitle </td> <td>@a.ACate </td> <td>@a.AStatu </td> <td>@a.AAddtime </td> <td> <a href="javascript:del(@a.AId)">刪除</a> <a href="/home/modify/@a.AId">改</a> </td> </tr> } </table> @foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>) { }</body></html>
接下來來實現一個基本的增刪改的功能。假設我們要對部落格的基本資料進行管理,首先需要定義一個Model類型,建立一個Model,代碼如下:
namespace HelloWorld.Models{ public class BlogArticle { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } } public class MovieDBContext : DbContext { public DbSet<movie> Movies { get; set; } }} 接下來,我們建立一個Movie的Controller,使用ef(EntityFramework)來存取資料,如下配置:
通過EF可以動態為你建立資料庫,果Model檔案發生了變化,例如添加了一個欄位,網頁就會報錯,要解決有兩種方案,一是調用Database.SetInitializer方法來自動重建資料庫,二是手動修改資料庫表。第一種方法雖然簡單但是會導致已有的資料丟失,他會重建整個資料庫。但是在開發初期非常適合使用。在這裡先採用第一種方案。具體方法是,在model中建立一個類繼承自DropCreateDatabaseIfModelChanges類。在其中可以加上可選的初始化資料的代碼,然後在Global.asax中將這個對象註冊下。
對於mvc的理解僅僅局限在實現上,認識還很膚淺,希望和大家交流!
MVC架構概述