• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于MVC框架的系統(tǒng)重構(gòu)方法研究與實(shí)踐

    2015-11-14 12:11:12李景炤等
    電腦知識與技術(shù) 2015年22期
    關(guān)鍵詞:計(jì)算機(jī)軟件

    李景炤等

    摘要:ASP.NET的WebForm開發(fā)模式控件豐富,能夠迅速搭建Web應(yīng)用,但是存在可重用性差、安全性低、運(yùn)行速度慢等缺點(diǎn),不適合中大型系統(tǒng)的開發(fā)。為了提高論文管理系統(tǒng)的安全性、可維性和運(yùn)行性能,采用ASP.NET MVC框架模式進(jìn)行系統(tǒng)結(jié)構(gòu)的重構(gòu),利用對象關(guān)系映射和Active Record技術(shù)進(jìn)行數(shù)據(jù)層的重構(gòu)。對比測試結(jié)果顯示,重構(gòu)后的系統(tǒng)可維護(hù)指數(shù)提高,圈復(fù)雜度、代碼克隆數(shù)和CPU使用率降低。

    關(guān)鍵詞:計(jì)算機(jī)軟件;系統(tǒng)重構(gòu);MVC框架;ASP.NET

    中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)22-0063-04

    Abstract: The WebForm ASP.NET development mode control is rich, can quickly build Web applications, but there is a low reusability, low safety, running speed, etc., is not suitable for the development of large systems. In order to improve the security, maintainability and performance of the paper management system, MVC ASP.NET framework is adopted to reconstruct the system structure, and the data layer is reconstructed by using object relational mapping and Record Active technology. Compared with the test results, the system can be improved, the loop complexity, the number of code clones and the usage rate of CPU can be reduced.

    Key words: computer software; system reconstruction; MVC framework; ASP.NET

    1 問題背景

    ASP.NET中的WebForm是一種可視化開發(fā)模式,用戶通過拖拽控件進(jìn)行網(wǎng)頁界面的設(shè)計(jì),Visual Studio編輯器自動在網(wǎng)頁文件生成相應(yīng)的代碼,然后雙擊控件或者在事件視圖中雙擊相應(yīng)事件,將在另外一個對應(yīng)的.CS文件中進(jìn)行編碼,實(shí)現(xiàn)對網(wǎng)頁控件的交互操作[1]。由于開發(fā)方便、上手容易,WebForm模式在小型項(xiàng)目開發(fā)中廣泛應(yīng)用。但是對于中大型項(xiàng)目,采用WebForm模式進(jìn)行開發(fā)的話會出現(xiàn)不少問題:項(xiàng)目中充斥著大量的網(wǎng)頁文件和后臺代碼文件,文件數(shù)量過多難以管理;項(xiàng)目網(wǎng)頁文件與邏輯代碼文件緊密耦合,代碼重用性不高;網(wǎng)頁代碼中暴露過多的系統(tǒng)實(shí)現(xiàn)細(xì)節(jié),容易遭受網(wǎng)絡(luò)攻擊導(dǎo)致信息安全問題;數(shù)據(jù)庫操作的代碼實(shí)現(xiàn)比較繁瑣,每次涉及到數(shù)據(jù)庫交互操作都要重新寫SQL語句;功能擴(kuò)展麻煩,當(dāng)需要擴(kuò)展新的功能頁面時需要重新設(shè)計(jì)網(wǎng)頁界面和進(jìn)行編碼。

    我們在開發(fā)論文管理系統(tǒng)的過程中,初期為了快速實(shí)現(xiàn)系統(tǒng)的主要功能,使用了 ASP.NET WebForm模式來進(jìn)行項(xiàng)目的開發(fā)工作。但隨著項(xiàng)目的進(jìn)行,由于系統(tǒng)功能的不斷擴(kuò)展,同時用戶需求有了一些更改,WebForm模式帶來的問題逐步顯露出來。針對開發(fā)工作中出現(xiàn)的問題,項(xiàng)目組決定使用ASP.NET MVC框架重構(gòu)系統(tǒng),希望開發(fā)工作向著代碼的結(jié)構(gòu)規(guī)范、冗余度低、重用性好,系統(tǒng)擴(kuò)展方便、安全性更高的方向發(fā)展,使系統(tǒng)具有更高的穩(wěn)定性和可維護(hù)性。

    2 MVC框架分析

    MVC框架是現(xiàn)代大型項(xiàng)目開發(fā)中廣泛使用的開發(fā)模型,其基于面向?qū)ο蟮脑O(shè)計(jì)模式極大提高了程序的開發(fā)速度,降低了功能擴(kuò)展維護(hù)帶來的不便,使功能像組件一樣自由變換[1]。

    2.1 MVC核心部件

    MVC框架模式將系統(tǒng)按功能模塊化地分成三個主要的部件:模型(Model)、視圖(View)、控制器(Controller)。它們各自處理自己的任務(wù),相互之間通過接口進(jìn)行交互[2],其功能劃分及相互關(guān)系如圖1所示。

    跟傳統(tǒng)的WebForm模式相比,ASP.NET MVC框架放棄了很多有缺陷的特性,如Code-behind頁面、服務(wù)器控件、數(shù)據(jù)綁定、URL Rewrite等,取而代之的是Controller、HtmlHelper、Routing等類庫和組件[3]。與WebForm相比,ASP.NET MVC在Web開發(fā)領(lǐng)域顯得更加專業(yè)化,對Web開發(fā)的效率提升非常明顯,特別是在規(guī)模較大、功能點(diǎn)多、頁面數(shù)量多邏輯結(jié)構(gòu)復(fù)雜的大型應(yīng)用程序開發(fā)中,MVC模式在健壯性、代碼重用和結(jié)構(gòu)方面有了很大的提升 [4]。使用MVC架構(gòu)開發(fā)出軟件代碼有較強(qiáng)的可理解性、重用性、系統(tǒng)穩(wěn)定性、可維護(hù)性,能夠減少軟件的修改、再次開發(fā)等方面的工作量,減少了在系統(tǒng)方面所投入的成本[5]。

    2.2 ASP.NET MVC框架運(yùn)行流程

    在ASP.NET MVC4中,所有請求都是通過項(xiàng)目根目錄中的一個Global.asax文件作為唯一的入口,客戶端向服務(wù)器提交的請求首先由這個文件接收,由該文件執(zhí)行Application_start()方法實(shí)例化啟動進(jìn)程,并調(diào)用路由匹配注冊表確定指派到某一個控制器處理??刂破鹘拥秸埱蠛?,可以調(diào)用某一個對象模型來處理;模型根據(jù)相應(yīng)的業(yè)務(wù)邏輯進(jìn)行邏輯處理,并且與數(shù)據(jù)庫進(jìn)行交互,返回所需的數(shù)據(jù);最終控制器加載并渲染指定的視圖來將處理好的數(shù)據(jù)呈現(xiàn)給用戶。系統(tǒng)采用ASP.NET MVC 后的運(yùn)行流程如圖2所示。

    3 系統(tǒng)結(jié)構(gòu)的重構(gòu)

    在ASP.NET的WebForm模式中,系統(tǒng)的代碼模塊是按頁面來分的,也就是說有多少個頁面就有多少個邏輯處理文件,每個代碼文件僅僅處理自身頁面的代碼邏輯,這種劃分代碼模塊的缺點(diǎn)是,一旦頁面過多,就會變得很雜亂,代碼文件查找困難,維護(hù)難度高,而且不利于日后功能迭代或者功能修改。而在ASP.NET MVC中,項(xiàng)目代碼文件按部件來劃分,而每個部件又通過系統(tǒng)功能的模塊化對應(yīng)來實(shí)現(xiàn)二級劃分,整個項(xiàng)目就變得有層次和條理,維護(hù)起來也變得方便。

    3.1 系統(tǒng)功能分析

    畢業(yè)設(shè)計(jì)管理系統(tǒng)是一個教師、學(xué)生和系統(tǒng)管理員使用的教務(wù)管理平臺。按使用角色可以對系統(tǒng)的功能作以下分類:教師有發(fā)布課題、修改個人信息、查看課題列表、查詢學(xué)生信息等功能;學(xué)生有選擇課題、修改個人信息、查詢課題列表、查詢教師信息、提交上傳文檔等功能;系統(tǒng)管理員有審核課題、課題信息管理、網(wǎng)站功能設(shè)置、用戶信息管理、角色分配、論題管理等功能。

    3.2 按功能劃分模塊

    在MVC框架中,控制器實(shí)際上就是以相近功能組成的模塊。對系統(tǒng)的功能進(jìn)行分析后,我們進(jìn)行模塊的劃分,將功能相近的代碼邏輯放到同一個控制器里面,而每一個功能都通過控制器里的方法來實(shí)現(xiàn),方便調(diào)用。根據(jù)對系統(tǒng)的功能進(jìn)行分析,本系統(tǒng)的控制器可分為:教師控制器、學(xué)生控制器、角色控制器、用戶控制器、論題控制器、系統(tǒng)設(shè)置控制器等。

    在每個都模塊抽象為MVC框架中的控制器后,根據(jù)每個模塊中需要的頁面在視圖部分進(jìn)行添加。這樣,我們就把整個系統(tǒng)的功能進(jìn)行了模塊化的劃分。模塊之間既相互獨(dú)立,又可以通過接口進(jìn)行相互調(diào)用和聯(lián)系。

    3.3 代碼文件結(jié)構(gòu)

    圖3(a) 是WebForm模式中的文件結(jié)構(gòu),大量的文件都堆放在同一個目錄,顯得雜亂無章;圖3(b)是使用了MVC模式重構(gòu)后的代碼文件結(jié)構(gòu),為每個核心部件都分配了不一樣的目錄,這樣的做法分層合理,文件結(jié)構(gòu)顯得規(guī)范有條理;圖3(c)是控制器部件目錄的展開圖,控制器目錄中的每個文件都對應(yīng)每一個模塊,有些模塊因需要分開兩個控制器文件來實(shí)現(xiàn),對應(yīng)的視圖文件在Views目錄下。

    4 數(shù)據(jù)層的重構(gòu)

    系統(tǒng)結(jié)構(gòu)的重構(gòu)完成之后,我們還利用對象關(guān)系映射(Object Relational Mapping,ORM)和Active Record技術(shù)來進(jìn)行數(shù)據(jù)層的重構(gòu)。

    4.1 ORM和Active Record技術(shù)

    ORM是隨著面向?qū)ο笏枷氲某墒於a(chǎn)生的一種軟件開發(fā)技術(shù)。目前主流的框架產(chǎn)品,如ASP.NET MVC、Hibernate等,已經(jīng)將ORM集成在內(nèi)。Microsoft Entity Framework 是一個對象關(guān)系映射(ORM)工具,它能將關(guān)系型數(shù)據(jù)轉(zhuǎn)換成.NET數(shù)據(jù)對象,也可以將.NET數(shù)據(jù)對象轉(zhuǎn)換成關(guān)系型數(shù)據(jù) [6]。

    Active Record是一種領(lǐng)域模型模式,最早由Rails提出,它在ORM的基礎(chǔ)上,把負(fù)責(zé)持久化的代碼也集成到數(shù)據(jù)對象中[7]。傳統(tǒng)的ORM只是把數(shù)據(jù)對象與負(fù)責(zé)持久化的代碼分隔開來,數(shù)據(jù)對象只是單純的包含了自身的數(shù)據(jù)結(jié)構(gòu)體。而在Active Record中,他們不僅是數(shù)據(jù)實(shí)體,而且包含了業(yè)務(wù)邏輯,集成了把自己持久化的操作。在ASP.NET MVC中,Active Record已經(jīng)定義好了集成持久化操作方法的模型父類,數(shù)據(jù)對象類只需要繼承這個父類,就可以繼承這些持久化操作的方法,通過簡單的方法調(diào)用,就可以實(shí)現(xiàn)持久化操作。

    4.2 重構(gòu)系統(tǒng)的數(shù)據(jù)層

    利用ORM和Active Record技術(shù),我們在處理有關(guān)操作數(shù)據(jù)庫的業(yè)務(wù)邏輯時,不需要接觸到SQL語句。對數(shù)據(jù)的操作簡化成了對象的操作,為一張表聲明一個類,并使類中的成員對應(yīng)關(guān)系型數(shù)據(jù)庫中的字段,就可以跟這個類的實(shí)例進(jìn)行交互了。至于這個對象中的數(shù)據(jù)怎么跟數(shù)據(jù)庫交互,我們完全不用關(guān)心。ORM會根據(jù)實(shí)際需要生成相應(yīng)的SQL語句執(zhí)行,返回的結(jié)果又會自動處理成對象或者開發(fā)者想要的形式。

    重構(gòu)系統(tǒng)數(shù)據(jù)層的具體操作分以下兩個步驟:

    1)為系統(tǒng)的數(shù)據(jù)對象建立模型,將數(shù)據(jù)對象轉(zhuǎn)化為關(guān)系型數(shù)據(jù)庫中的表和列。

    2)修改業(yè)務(wù)邏輯中需要與數(shù)據(jù)庫交互的代碼,將SQL語句替代為由Active Record操作數(shù)據(jù)對象。

    重構(gòu)系統(tǒng)數(shù)據(jù)層后,我們能夠輕易地通過實(shí)例化數(shù)據(jù)對象來從模型中獲取需要的數(shù)據(jù),以系統(tǒng)的用戶模塊為例,用語句“List userList = db.users.ToList();”即可獲取所有用戶模型的集合。與直接使用SQL語句相比,Active Record技術(shù)更為簡潔,不易出錯,能夠進(jìn)行參數(shù)過濾和綁定,還能夠屏蔽數(shù)據(jù)庫之間的差異。Active Record技術(shù)簡化了開發(fā)者的工作,使得系統(tǒng)的功能擴(kuò)展或者修改都比較容易。

    5 系統(tǒng)重構(gòu)效果測量

    為了比較重構(gòu)后系統(tǒng)源代碼的重用性、可維護(hù)性、冗雜度和性能上的差異,我們使用Visual Studio 2013分別對代碼度量值、代碼克隆分析和CUP使用率這三個指標(biāo)進(jìn)行了測量。

    5.1 代碼度量值

    代碼度量是一組對軟件質(zhì)量進(jìn)行度量的數(shù)值,開發(fā)者依靠這組數(shù)值可以更好地分析他們開發(fā)中的代碼。通過代碼度量,開發(fā)者可以清楚看到哪些類型和/或方法應(yīng)該重寫或者進(jìn)行更加徹底的代碼測試。 開發(fā)團(tuán)隊(duì)也可以通過這組數(shù)值識別代碼中哪些有可能出現(xiàn)的風(fēng)險、對項(xiàng)目的狀態(tài)進(jìn)行了解,并對軟件開發(fā)的進(jìn)度進(jìn)行跟蹤[8]。代碼度量會檢測出項(xiàng)目代碼中所有定義的命名空間,再在其中統(tǒng)計(jì)可維護(hù)指數(shù)、圈復(fù)雜度、繼承深度等檢測值。圖4與圖5為重構(gòu)前后代碼度量值的結(jié)果。

    我們的目標(biāo)是對可維護(hù)指數(shù)和圈復(fù)雜度進(jìn)行分析??删S護(hù)指數(shù)的范圍在0 至 100 之間,表示了代碼維護(hù)的相對容易程度,數(shù)值越高意味著可維護(hù)性越好;而圈復(fù)雜度則是描述了代碼在結(jié)構(gòu)上的復(fù)雜度,它是通過計(jì)算程序流中的不同代碼的路徑數(shù)量來創(chuàng)建的 [8]。

    對本次重構(gòu)前后的系統(tǒng)代碼檢測結(jié)果顯示,代碼重構(gòu)后可維護(hù)指數(shù)提升了14%,圈復(fù)雜度減少了原來的約40%。同時從層次結(jié)構(gòu)看出,使用了MVC框架模式,代碼的根命名空間比原來的少了很多,代碼層次分明,可見代碼的可維護(hù)性有了一定程度的提高。加上使用Active Record技術(shù)進(jìn)行數(shù)據(jù)層對象封裝,對數(shù)據(jù)對象的操作不再需要局部定義對象的結(jié)構(gòu),只需要調(diào)用Active Record的數(shù)據(jù)層對象就能勝任,這樣相同功能的代碼就相對集中在同一個目錄,圈復(fù)雜度相應(yīng)地降低。

    5.2 代碼克隆分析

    代碼克隆分析就是檢測系統(tǒng)項(xiàng)目源代碼中重復(fù)的部分,使開發(fā)人員能夠整理重復(fù)的代碼,提高代碼質(zhì)量。我們在研究中發(fā)現(xiàn),Visual Studio的代碼克隆分析不是僅僅匹配字面上的代碼,而且能通過代碼分析檢測邏輯相同的代碼,它不僅能搜索代碼相同的模塊,而且還能搜索語義上類似的結(jié)構(gòu)。圖6與圖7為重構(gòu)前后的代碼克隆分析結(jié)果。

    通過對比重構(gòu)前后的代碼克隆分析結(jié)果,可以看出使用MVC框架重構(gòu)后的代碼克隆數(shù)遠(yuǎn)小于重構(gòu)前。而這意味著重構(gòu)前有大量的重復(fù)代碼存在,這樣的壞處是,通過復(fù)制粘貼的源代碼一旦需要修改部分代碼,就需要查找所有涉及相同功能的地方一并修改;也有可能需要修改某些特定的地方,其他地方保持不變,這時候即使IDE編輯器有批量修改代碼的功能也無濟(jì)于事了?;贛VC框架重構(gòu)后的代碼高度抽象和封裝,模塊與模塊之間已經(jīng)有了明確的分工,很多相同的邏輯將合并起來;而ORM將通過寫SQL語句來獲取數(shù)據(jù)操作的源代碼轉(zhuǎn)化成了通過調(diào)用ORM封裝的方法來生成數(shù)據(jù)對象的源代碼,重復(fù)的SQL語句將不再出現(xiàn),這也是克隆代碼降低的其中一個原因。在軟件開發(fā)的過程中,使用重復(fù)代碼的頻率越少,日后源代碼的維護(hù)就會越容易??梢?,重構(gòu)后的源代碼可維護(hù)性有了很大的提高。

    5.3 CPU使用率

    使用MVC框架重構(gòu)后的項(xiàng)目抽象封裝程度高,有人覺得會對性能造成影響,因?yàn)槊看芜\(yùn)行都要初始化封裝好的對象,有可能會加載一些不需要的組件來增加服務(wù)器的開銷。我們根據(jù)重構(gòu)前后的代碼,使用Visual Studio運(yùn)行代碼分析,訪問論文管理系統(tǒng)的同一個頁面,監(jiān)聽CPU使用率隨時間變化的過程,測試時間大約是1分半鐘。期間頁面每隔一段時間(約10秒)被刷新,不斷向服務(wù)器發(fā)送請求。圖8與圖9為重構(gòu)前后的CPU使用率曲線圖。

    從圖8和圖9的對比可以看出,重構(gòu)后的系統(tǒng)CPU使用率總體上都是比重構(gòu)前要低的。前10秒左右是Visual Studio工具編譯部署項(xiàng)目的時間,可以看出使用MVC框架后編譯部署過程CPU使用率是使用前的約4倍。這是因?yàn)槭褂肳ebForm在很大程度上要依賴比較多還沒有編譯好的部件,很多如圖片上傳、文件生成、視圖渲染的功能都要開發(fā)者自行通過源代碼實(shí)現(xiàn),編譯起來就要耗費(fèi)相對較多的資源;而MVC框架將絕大部分的部件封裝成為二進(jìn)制文件,只需要編譯主要的代碼就可以了,CPU使用率自然就低了。

    約過了10秒后,是頁面接受請求進(jìn)行邏輯處理的過程??梢钥闯鲋貥?gòu)后的系統(tǒng)除了第一次處理請求CPU使用率相對較高,為23%左右,接下來處理請求的CPU使用率都是不到10%。而重構(gòu)前的系統(tǒng)CPU使用率一直都在波動,居高不下,平均在20%。產(chǎn)生這些差異的原因是,.NET MVC框架在頁面第一次被請求的時候就生成了頁面的緩存,往后的請求處理就不再需要進(jìn)行處理頁面渲染的步驟;同時,因?yàn)榉?wù)器已經(jīng)裝上了.NET MVC框架的組件,運(yùn)行的時候就不再需要額外的CPU資源,所以如果沒有在處理請求的情況下CPU使用率都接近0。而傳統(tǒng)的WebForm模式?jīng)]有緩存機(jī)制,每次加載都需要重新進(jìn)行頁面渲染工作,CPU使用率偏高,而且在解釋非系統(tǒng)自帶組件也需要占用一定的CPU資源。

    6 總結(jié)

    本文使用了ASP.NET MVC框架進(jìn)行了論文管理系統(tǒng)的重構(gòu),按系統(tǒng)的功能進(jìn)行抽象分類,各個部分的功能分成了各個模塊,使耦合性盡量低,并通過接口進(jìn)行交互。對于系統(tǒng)的數(shù)據(jù)層,運(yùn)用ORM與Active Record技術(shù)進(jìn)行重構(gòu),為數(shù)據(jù)處理提供了更加直觀便捷、便于維護(hù)的方式。

    對重構(gòu)前后的代碼度量值、代碼克隆分析和CUP使用率的對比結(jié)果表明,使用MVC框架對于解決代碼冗余、增強(qiáng)系統(tǒng)可維護(hù)性和運(yùn)行性能都有比較大的幫助。

    致謝:本文作者向指導(dǎo)老師孫宇鋒教授、李林同學(xué)以及有關(guān)老師表示真誠的謝意!

    參考文獻(xiàn):

    [1] 吳昌錢.net框架下軟件開發(fā)模式研究[J].哈爾濱師范大學(xué)自然科學(xué)學(xué)報,2014,30(3):99-102.

    [2] 林永良,胡建平,吳樹林.基于.NET MVC架構(gòu)下的科研項(xiàng)目管理系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014(12):217-220.

    [3] 吳勝,劉建波,劉士彬. ASP.NET MVC框架下內(nèi)容管理系統(tǒng)的探索與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010(36):30-32.

    [4] 周泉.淺談從 WebForm 開發(fā)模式到 ASP.NET MVC 開發(fā)模式的發(fā)展[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012(15):248-270.

    [5] 苑慶濤,張新柱,馬博,等. 基于ASP.NET MVC的數(shù)字化管理平臺[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2013(12):164-167.

    [6] 龔蘭蘭.基于.Net MVC4 的Code First 模式數(shù)據(jù)庫開發(fā)和遷移[J].信息通信,2014(12):99-99.

    [7] 許日丹,楊俊.基于Rails框架的ActiveRecord模塊研究與應(yīng)用[J].軟件導(dǎo)刊,2007,57(13):127-129.

    [8] Microsoft. 代碼度量值[EB/OL]. https://msdn.microsoft.com/zh-cn/library/bb385914.aspx, 2015-01-01/2015-04-30.

    猜你喜歡
    計(jì)算機(jī)軟件
    基于C語言的計(jì)算機(jī)軟件編程
    電子制作(2018年16期)2018-09-26 03:27:08
    淺談不同編程語言對計(jì)算機(jī)軟件開發(fā)的影響
    電子制作(2018年1期)2018-04-04 01:48:36
    淺談基于C語言的計(jì)算機(jī)軟件程序設(shè)計(jì)
    電子制作(2017年24期)2017-02-02 07:14:40
    基于計(jì)算機(jī)軟件開發(fā)中分層技術(shù)的應(yīng)用
    河南科技(2014年15期)2014-02-27 14:12:23
    新郑市| 江西省| 新营市| 保康县| 昌都县| 万源市| 荣昌县| 延长县| 巩义市| 晋州市| 博湖县| 拜泉县| 新和县| 丹阳市| 灵台县| 房产| 乌苏市| 宁陵县| 榆树市| 沂源县| 绵竹市| 文水县| 武宁县| 辉县市| 江安县| 凌云县| 大厂| 康平县| 北流市| 五台县| 扶沟县| 梁平县| 新田县| 陆良县| 紫金县| 长垣县| 龙山县| 天峨县| 乳源| 南江县| 台湾省|