童 鈺
(湖北師范學(xué)院 計算機科學(xué)與技術(shù)學(xué)院,湖北 黃石 435002)
ASP.NET MVC框架中的數(shù)據(jù)庫技術(shù)分析
童鈺
(湖北師范學(xué)院 計算機科學(xué)與技術(shù)學(xué)院,湖北 黃石435002)
摘要:微軟推出的Visual Studio開發(fā)平臺以其完善的開發(fā)機制、龐大的類庫以及在數(shù)據(jù)庫交互方面強大的功能吸引著眾多的開發(fā)人員的使用。而在VS2010之后的平臺版本中由于整合了ASP.NET MVC項目模版,這使得開發(fā)人員可以通過該模板的自動創(chuàng)建功能很方便的完成一個開發(fā)項目的大部分工作。這樣的做法無疑能夠讓開發(fā)人員可以快速地完成一個開發(fā)項目,但是卻并不能深入了解項目的構(gòu)造和運行機制,所以只有進一步分析MVC核心的技術(shù)才能使我們更好地提高項目的質(zhì)量和可維護性。
關(guān)鍵詞:MVC; ORM; 數(shù)據(jù)庫
中圖分類號:TP311.5
文獻標(biāo)識碼:A
文章編號:1009-2714(2015)04- 0025- 04
doi:10.3969/j.issn.1009-2714.2015.04.006
收稿日期:2015—08—12
作者簡介:童鈺(1977—),男,湖北黃石人,講師,碩士.
1MVC概述以及ASP.NET MVC
MVC最早是在1979年由現(xiàn)挪威奧斯陸大學(xué)教授Trygve Reenskaug 提出的,并應(yīng)用于當(dāng)時廣泛使用的程序設(shè)計語言Smalltalk中,其主要目的就在于簡化軟件開發(fā)的復(fù)雜度,以一種概念簡單卻又權(quán)責(zé)分明的架構(gòu)來撰寫更模塊化,可維護性更高的程序代碼。因此,MVC并不是一種程序語言,而是開發(fā)時所使用的一種“框架”(架構(gòu))。MVC框架中使軟件開發(fā)分為三個主要單元:Model(模型)、View(視圖)、Controller(控制器),其定義和之間的關(guān)系如圖1:
圖1 MVC定義及關(guān)系圖
在MVC中有一個非常重要的概念“關(guān)注分離點”(Separation Of Concerns),就是指你在項目開發(fā)時可以只關(guān)注當(dāng)前的對象,不用擔(dān)心受到同項目中其它對象的干擾。微軟長久以來致力于發(fā)展開發(fā)工具,希望能降低開發(fā)上的負(fù)擔(dān),因此基于MVC這種優(yōu)秀的軟件開發(fā)架構(gòu)微軟推出了ASP.NET MVC,并且從第一版以來ASP.NET MVC就以微軟公眾授權(quán)開放源代碼,同時ASP.NET MVC最大的優(yōu)勢就是可以通過Visual Studio這個龐大的開發(fā)平臺來進行項目開發(fā),而且ASP.NET MVC擁有非常清楚的關(guān)注分離點架構(gòu)。所以,ASP.NET MVC既擁有MVC優(yōu)秀的架構(gòu)又可以使用Visual Studio來建立、調(diào)試、維護開發(fā)項目,這使得對Visual Studio比較熟悉的人可以更容易分析和掌握ASP.NET MVC的核心技術(shù)。
2ASP.NET MVC中的數(shù)據(jù)處理
一個開發(fā)應(yīng)用程序的項目中,數(shù)據(jù)的處理是最基礎(chǔ)也是最核心的內(nèi)容,ASP.NET MVC也不例外。
首先我們要明確的一點是在ASP.NET MVC中,Model負(fù)責(zé)所有與數(shù)據(jù)有關(guān)的工作,例如:新增、刪除、更改、查詢等,同時Model的獨立性非常高,所以它可以更好的專注于如何有效地提供數(shù)據(jù)訪問機制、數(shù)據(jù)格式驗證、商業(yè)邏輯驗證等工作。
其次,當(dāng)我們創(chuàng)建好數(shù)據(jù)模型,初次運行應(yīng)用程序項目后ASP.NET MVC將會自動在對應(yīng)的APP_Data目錄下產(chǎn)生一組默認(rèn)的數(shù)據(jù)庫文檔(*.mdf或*.ldf),文檔的命名規(guī)則為aspnet-項目名稱-日期時間.mdf,而整個項目的數(shù)據(jù)處理就是對這些數(shù)據(jù)文檔的處理。
圖2 Model文件夾以及APP_Data文件夾
3如何在ASP.NET MVC下開發(fā)數(shù)據(jù)層
微軟的開發(fā)工具一向功能強大,這可以極大地降低項目開發(fā)上的負(fù)擔(dān),但在開發(fā)過程中卻造成了開發(fā)人員過度依賴開發(fā)工具,反而降低了對數(shù)據(jù)庫原理、網(wǎng)絡(luò)原理、面向?qū)ο蟪绦蛟O(shè)計等基礎(chǔ)知識的學(xué)習(xí)欲望。所以,充分掌握ASP.NET MVC下的數(shù)據(jù)庫構(gòu)成方式和技術(shù)特點并且能夠適當(dāng)調(diào)整ASP.NET MVC自動生成的項目框架才能最終得到符合開發(fā)者需求的軟件。
由于ASP.NET MVC還是基于面向?qū)ο蟮某绦蛟O(shè)計,因此在Model層上最好采用ORM(Object Relational Mapping)信息訪問技術(shù)來開發(fā)。ORM可以將結(jié)構(gòu)化的關(guān)系型數(shù)據(jù)庫映射成面向?qū)ο竽P?,在ASP.NET MVC中的具體體現(xiàn)也就是Entity Framework。在選擇采用了Entity Framework還是其它ORM開發(fā)技術(shù)后,根據(jù)項目的不同情況我們可以使用以下三種不同的數(shù)據(jù)庫開發(fā)模式來進行數(shù)據(jù)庫的開發(fā):
1)數(shù)據(jù)庫優(yōu)先開發(fā)模式
數(shù)據(jù)庫優(yōu)先開發(fā)就是先進行數(shù)據(jù)庫設(shè)計,以數(shù)據(jù)庫里定義的數(shù)據(jù)結(jié)構(gòu)為主體和依據(jù)來進行應(yīng)用程序的開發(fā).
2)模型優(yōu)先開發(fā)模式
模型優(yōu)先開發(fā)模式是指在ORM架構(gòu)中先創(chuàng)建對象模型,應(yīng)用程序的開發(fā)則依據(jù)這些對象模型,當(dāng)要訪問數(shù)據(jù)庫時(在ASP.NET MVC中)通過Entity Framework數(shù)據(jù)提供者的協(xié)助就可以自動生成對應(yīng)的SQL語句并創(chuàng)建完整的數(shù)據(jù)庫。
3)程序代碼優(yōu)先開發(fā)模式(Code first)
這是一種比較新穎的開發(fā)模式,它是讓開發(fā)人員直接根據(jù)項目需求先寫出相關(guān)的類和屬性代碼也就是應(yīng)用程序所需要用到的數(shù)據(jù)模型,然后通過ORM框架的管理再轉(zhuǎn)換為實體模型。這種方法可以避免因為開發(fā)人員對數(shù)據(jù)庫操作不熟悉而導(dǎo)致開發(fā)效率降低。
在當(dāng)前較新版本的Visual Studio開發(fā)環(huán)境中ASP.NET MVC和Entity Framework都已經(jīng)升級到第五版本,它們尤其強化了程序代碼優(yōu)先的開發(fā)模式。
圖3 創(chuàng)建數(shù)據(jù)模型的代碼
如圖3所示,這是一段創(chuàng)建留言板用戶信息數(shù)據(jù)模型的代碼,當(dāng)代碼正確運行后這段程序?qū)跀?shù)據(jù)庫中創(chuàng)建一個名為UserInfo的表格,這就和在數(shù)據(jù)庫開發(fā)平臺下創(chuàng)建數(shù)據(jù)表是一樣的。當(dāng)所有項目當(dāng)中的要用到的數(shù)據(jù)模型都創(chuàng)建完畢,實際也就意味著我們已經(jīng)完成了項目數(shù)據(jù)庫的建立。
4ASP.NET MVC下的Code first數(shù)據(jù)庫開發(fā)后的數(shù)據(jù)遷移問題
在使用Code first生成數(shù)據(jù)庫后當(dāng)數(shù)據(jù)庫發(fā)生更改時,運行程序就會出現(xiàn)數(shù)據(jù)已更改的問題,這時可以刪除數(shù)據(jù)庫重新生成解決但是之前的數(shù)據(jù)就無法保留,為了保留之前的數(shù)據(jù)庫數(shù)據(jù),我們需要使用到Code first數(shù)據(jù)遷移。
首先,如果需要更改數(shù)據(jù)結(jié)構(gòu),必須是先更改Model類,然后使用Code firs數(shù)據(jù)遷移,如果直接先更改了數(shù)據(jù)庫則使用數(shù)據(jù)遷移會報錯。
其次,如果在項目中我們只是引用的EF5.0(Entity Framework5)就不能達到直接安裝EF5的效果同樣無法完成數(shù)據(jù)遷移,這時我們就需要先安裝EF5.0執(zhí)行此命令“Install-Package EntityFramework-Version 5.0.0”安裝EF5.0,安裝后Model類下會出現(xiàn)packages.config(如圖4)?,F(xiàn)在我們就可以正常地開始操作數(shù)據(jù)遷移了。首先執(zhí)行命令:Enable-MigrationsContextTypeName MovieDBContext 開啟Code First遷移。
圖4 安裝EF5.0生成packages.config文件
5結(jié)語
雖然通過使用ASP.NET MVC可以自動完成項目的大部分工作,極大地降低開發(fā)人員的工作負(fù)擔(dān),但對于整個ASP.NET MVC中最關(guān)鍵的一個部分Model來說,如果我們沒有清晰的認(rèn)識它是如何在ASP.NET MVC中運作的,不能很好地對它進行規(guī)劃,我們也就沒有辦法做出一個好的ASP.NET MVC項目。
參考文獻:
[1]李園,陳世平.MVC設(shè)計模式在ASP.NET平臺中的應(yīng)用[J].計算機工程與設(shè)計,2009,13:3180~3184.
[2]蔣金楠.ASP.NET MVC4框架揭秘[M].北京: 電子工業(yè)出版社,2013.
[3]甄鐳.NET與設(shè)計模式[M].北京:電子工業(yè)出版被,2005.
[4]黎永良,禚杜武.MVC設(shè)計模式的改進與應(yīng)用[J].計算機工程,2005,31(9):96~98.
[5]趙增敏,吳潔,唐惠康.基于Code First模式的ASP.NET MVC應(yīng)用開發(fā)[J].制造業(yè)自動化,2012, 34(6):154 ~156.
[6]孫高毅. 基于.NET的ASP.NET MVC框架研究[D].長沙:中南大學(xué),2009.
[7]吳亞軍.試析ASP.NET的MVC開發(fā)模式 [J].電腦編程技巧與維護,2011(14):77~78.
[8]陳曉丹,鄭 毅.ASP.NET開發(fā)環(huán)境下的WebForm與MVC設(shè)計模式[J].武漢工程職業(yè)技術(shù)學(xué)院學(xué)報,2009,(06).doi:10.3969/j.issn.1671-3524.2009.02.011.
Analysis of database technology in MVC ASP.NET framework
TONG Yu
(The College of Computer Science and Technology, Hubei Normal University, Huangshi435000)
Abstract:Microsoft launched the Studio Visual development platform to its sound development mechanism, a large class library and in the database to interact with powerful features to attract a large number of developers use. And in the platform version of VS2010 after the integration of the MVC ASP.NET project template, which allows developers to automatically create a function through the template to complete a large part of the development project. Such an approach will undoubtedly allow developers to quickly complete a development project, but it can not be in-depth understanding of the project's structure and operation mechanism, so only the further analysis of MVC core technology to improve the quality and maintainability of the project.
Key words:MVC; ORM; DataBase