孫央麗


摘 要:本文簡單介紹了基于 asp.net 環境下使用MVC 架構設計一個網站所涉及的技術。并通過一個簡單例子展示了設計一個網站涉及的數據庫設計、EDM 對象生成、控制器創建、視圖創建等內容,并對關鍵代碼做了展示盒介紹。
關鍵詞:asp.net MVC EDM ORM 網站設計
網絡技術發展日新月異,互聯網發展初期只能簡單共享一些文字圖片信息,現在是網頁圖文、聲音、視頻并茂。HTML5 標簽直接提供了對音頻和視頻的支持。Css3技術使得現在的網站頁面能實現手機端,電腦端自適應展示。現在的網站系統可以通過網絡實現對各種后臺業務系統的接口調用和系統無縫集成,并可以感知用戶地理位置。現在的網頁可以實現直接使用傳遞自定義數據模型(Model)到網頁中,生成html代碼來展示。現在的網站后臺系統可以實現使用新的數據查詢語言對自定義數據模型進行查詢。
我們可能會問:使用20年前asp網站設計也可以將ADO Recordset自定義數據集嵌套在網頁中展示?。烤W上看看確實還有很多這樣的系統。
但查看這些網站系統后臺源代碼,會發現這些網頁往往將業務邏輯有關代碼以“意大利面條式”的方式嵌套在網頁HTML代碼中。無論是從軟件工程“高內聚低耦合”原則角度看,還是從系統升級維護角度看,這種方式都存在很多問題,維護業務邏輯也很復雜,不利業務邏輯的擴展。其實現在已經有更好的設計方式供選擇,那就是基于asp.net MVC 架構開發網站??梢砸悦嫦驅ο蠓绞椒庋b業務邏輯,可以以強類型方式在網頁之間傳遞類型數據(model),可以用razor語法把數據模型循環方式生成HTML 頁面來展示從而實現對HTML 每一個元素操控,也可以使用微軟的EDM對象,實現概念層到數據層的映射。
業務層的代碼直接操控概念層數據模型(EF 實體模型)。可以使用linq 語法查詢數據集,而不是在程序代碼中嵌入sql 語句。業務層操控的不再是數據庫,而是直接操控概念層概念模型。系統會實現自動完整概念層到數據庫的映射和存儲。
最后得到的開發體驗是可以實現“關注點分離”,每一層只關注與自己有關的業務內容,這樣的架構才能適應復雜的業務邏輯,才能不斷應對持續變化的業務需求。
下面從實際應用角度對有關技術作簡單展示,希望對初學者有幫助。
一、asp.net MVC 架構構成
MVC全名是model view controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。mvc被獨特地發展起來用于映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。MVC 架構系統工作流程:當用戶輸入信息(瀏覽器中發送請求),首先獲得用戶輸入數據的是控制器(控制器就是后臺使用面向對象設計方法設計的類),然后控制器操控相應的模型(模型是根據業務概念模型設計的強類型數據類型,比如一個學生,課程,視頻等)。接下來,模型的內容可以傳遞給指定的視圖(使用razor 語法遍歷模型內的數據轉換成HTML 頁面里的數據)返回給用戶,這時用戶在瀏覽器就看到了返回的信息。MVC雖然有很多技術細節,但是主要工作過程就如上所述。
二、使用MVC架構設計一個網站主要步驟和代碼分析
下面以創建一個視頻網站查詢頁面為例來展示使用mvc 架構創建網站方法的主要代碼原理。
1.創建MVC 項目
打開 vs2015 開發集成環境依次選擇新建項目---選擇web----選擇asp.net web 應用程序-----輸入項目名稱---選擇MVC 項目類型---確定。操作到這里開發環境就能看到項目文件夾結構。
各個文件夾功能做好標注。沒有標注的文件夾暫且放一放,可以先理解主要功能有關的文件夾,進一步再研究其他相關文件夾。
2.創建數據庫并創建相應表
為了簡單步驟,筆者在sql server 創建了 videos 數據庫,并創建了如圖1所示video表,填充了6條記錄數據(如圖1)。
3.根據數據庫生成概念層數據實體
接下來一個重要步驟是根據創建的數據庫生成實體數據模型(edm模型,是微軟對ORM 思想的一種實現,創建好實體數據模型以后,應用系統將操作實體數據模型實現業務實體的增刪改查,而不是直接使用SQL 語句操作數據庫)。
操作步驟如下:將鼠標停留在models 文件夾,然后右鍵鼠標,在出現的菜單中依次選擇添加—新建項—ADO.NET 實體數據模型——來自數據庫的EF設計器——連接前面創建好的數據庫—選擇要映射的表—點擊完成。
操作到這里已經完成數據實體的創建。接下來只要操作概念層數據實體就能完成對數據庫的增刪改查。而數據實體則是面向對象設計的,數據庫里面的表字段變成了對象的屬性,在程序業務代碼中,也是操縱控這些實體對象,而不是數據庫里面的表,他們之間的映射,系統會自動完成。這就是微軟根據ORM 思想設計的實體數據模型,簡稱EDM(詳細細節不展開介紹,請大家查找有關資料)。
從圖2可以看到 videos模型有Id,videoName,picture,creater,createDate 5個屬性,分別對應著數據庫表5個字段。
打開代碼窗口可以看到實體數據模型其實就是一個類,和面向對象設計中的實體類沒有本質區別。
操作到這里,筆者已經準備好了數據庫,也準備好了概念層數據實體和數據實體模型對應的數據上下文對象(數據上下文對象可以加載數據到實體數據模型中)。目前還缺一個動作,就是調用該方法,得到數據并將這些數據顯示在頁面中。下面繼續完成這個動作。
4.設計控制器,訪問到數據,將數據模型傳遞給視圖
將鼠標停留在Controller 文件夾依次選擇:添加—控制——包含視圖的MVC5 控制器(使用Entity Framwork)——添加。完成上面操作在Controll 文件夾就多出了一個控制器文件。
5.設計視圖,將數據模型生成HTML 頁面
完成上面操作向導,我們查看Views文件夾,可以看到多了一個videos 子文件夾,里面有一個名為 index.cshtml 文件。通過這一步驟應該注意以下知識點。
(1)razor語法其實就是c#語句前面加@就能將c# 語法和html 混合編寫,既能將模型數據轉換成HTML 頁面數據顯示。
(2)視圖文件的第一行有個IEnumerable
(3)微軟已經為我們設計了一套生成 HTML 標簽的編程接口。
6.運行網站
以上操作已經完成后臺數據庫的創建、概念層EDM 到數據庫的映射數據模型的創建、控制器的創建、視圖的創建并且將網站頁面運行起來了。雖然簡單,希望對初學者有所幫助。