《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 利用反射技術(shù)實(shí)現(xiàn)一種新型軟件系統(tǒng)維護(hù)模型
利用反射技術(shù)實(shí)現(xiàn)一種新型軟件系統(tǒng)維護(hù)模型
來源:微型機(jī)與應(yīng)用2012年第1期
詹澤東1,謝 爽2,藏文亞1,陸 華1,李正民1
(1.成都理工大學(xué),四川 成都 610059; 2.中國石油化工集團(tuán) 西北分公司,新疆 阿克蘇 84
摘要: 在深入研究.NET反射技術(shù)基礎(chǔ)上,結(jié)合.NET框架結(jié)構(gòu)的特性,從資源整合的角度,探索性地提出了一種新型的軟件系統(tǒng)維護(hù)模式,保證了復(fù)雜的大型系統(tǒng)維護(hù)的高效性和經(jīng)濟(jì)性,具有很大的實(shí)際意義。
Abstract:
Key words :

摘  要: 在深入研究.NET反射技術(shù)基礎(chǔ)上,結(jié)合.NET框架結(jié)構(gòu)的特性,從資源整合的角度,探索性地提出了一種新型的軟件系統(tǒng)維護(hù)模式,保證了復(fù)雜的大型系統(tǒng)維護(hù)的高效性和經(jīng)濟(jì)性,具有很大的實(shí)際意義。
關(guān)鍵詞: .NET框架;反射技術(shù);資源整合;系統(tǒng)維護(hù)

 隨著計(jì)算機(jī)技術(shù)不斷更新和發(fā)展,大型復(fù)雜系統(tǒng)的開發(fā)層出不窮,但系統(tǒng)的復(fù)雜性為后期系統(tǒng)的維護(hù)帶來了極大不便。軟件工程的提出和軟件測(cè)試的規(guī)范化為后期維護(hù)提供了大量的文檔資料,從宏觀上解決了后期系統(tǒng)維護(hù)工作任務(wù)。但是軟件系統(tǒng)開發(fā)作為一項(xiàng)復(fù)雜的腦力活動(dòng),不可避免地會(huì)出現(xiàn)一些問題,尤其是復(fù)雜的大型系統(tǒng)。于是運(yùn)行時(shí)出錯(cuò)的定位成為了一大難題,往往需要消耗大量的人力、物力和財(cái)力,甚至影響到企業(yè)的正常運(yùn)作,造成巨大損失。本文對(duì)于大型系統(tǒng)運(yùn)行時(shí)出錯(cuò)的定位問題,針對(duì).NET框架平臺(tái)(目前系統(tǒng)開發(fā)的最大平臺(tái)之一,也是大型系統(tǒng)的構(gòu)架平臺(tái))提供的特性技術(shù)和反射技術(shù),從系統(tǒng)的安全性和經(jīng)濟(jì)可行性出發(fā),從資源整合的角度出發(fā),研究并實(shí)現(xiàn)了一種新型的軟件維護(hù)模型,從而彌補(bǔ)了軟件工程思想對(duì)于系統(tǒng)維護(hù)在微觀上的定位的不足。
1 相關(guān)技術(shù)簡(jiǎn)介
 新型軟件系統(tǒng)的維護(hù)模型的技術(shù)實(shí)現(xiàn)主要涉及    .NET Framework提供的特性技術(shù)、反射技術(shù)以及資源整合思想中郵件服務(wù)。
1.1 特性技術(shù)
 公共語言運(yùn)行時(shí)允許添加類似關(guān)鍵字的描述聲明,叫做特性[1](Attributes), 它對(duì)程序中的元素進(jìn)行標(biāo)注,如類型、字段、方法和屬性等。Attributes 和Microsoft .NET Framework 文件的元數(shù)據(jù)保存在一起,可以用來向運(yùn)行時(shí)描述代碼,或者在程序運(yùn)行的時(shí)候影響應(yīng)用程序的行為;特性分為定制特性(.NET平臺(tái)已經(jīng)封裝實(shí)現(xiàn))和自定義特性,新型軟件系統(tǒng)維護(hù)模型使用自定義特性,用于系統(tǒng)運(yùn)行時(shí)異常定位。
1.2 反射技術(shù)
 在.NET平臺(tái)中,軟件是以程序集的方式存在的,它包含模塊,而模塊包含類,類又包含成員。
.NET中的程序集是自描述的,反射則提供了封裝程序集、模塊和類的對(duì)象。使用反射隱藏一些不想公開的方法,并在軟件設(shè)計(jì)中進(jìn)行了類設(shè)計(jì)及部分的核心編碼[2],動(dòng)態(tài)地創(chuàng)建類的實(shí)例,將類綁定到現(xiàn)有對(duì)象,或從現(xiàn)有對(duì)象中獲取類,然后調(diào)用類的方法或訪問其字段和屬性。反射通常具有以下用途[3]:
 (1)使用Assembly定義和加載程序集,加載在程序集清單中列出的模塊,并從此程序集中找類型并創(chuàng)建該類型的實(shí)例。
?。?)使用Module了解模塊的程序集以及模塊中的類等信息。
?。?)使用ConstructorInfo了解構(gòu)造函數(shù)的名稱、參數(shù)、訪問修飾符(如public或private)和實(shí)現(xiàn)(如abstrcat或virtual)等信息。
?。?)使用MethodInfo了解方法的名稱、返回類型、參數(shù)、訪問修飾符(如public或private)和實(shí)現(xiàn)(如abstrcat或virtual)等信息。
?。?)一個(gè)FieldInfo可了解字段的名稱、訪問修飾符(如public或private)和實(shí)現(xiàn)(如static)等信息,并獲取或設(shè)置字段值。
?。?)使用EventInfo了解事件的名稱、事件處理程序數(shù)據(jù)類型、自定義屬性、生命類型和反射類型等信息,并獲取或設(shè)置屬性值。
?。?)使用PropertyInfo了解屬性的名稱、數(shù)據(jù)類型、聲明類型、反射類型和只讀或可寫狀態(tài)等信息,并獲取或設(shè)置屬性值。
 (8)使用ParameterInfo了解參數(shù)的名稱、數(shù)據(jù)類型、是輸入?yún)?shù)還是輸出參數(shù)。以及參數(shù)在方法簽名中的位置等信息。
1.3 資源整合
 與企業(yè)優(yōu)化資源配置不同,隨著Internet的推廣使用,網(wǎng)絡(luò)服務(wù)資源日益增多,資源共享和合理利用免費(fèi)資源也成為企業(yè)的一個(gè)重要的戰(zhàn)略目標(biāo)。大型系統(tǒng)的維護(hù)借助于免費(fèi)資源的使用可以大大降低成本,而郵件服務(wù)是一個(gè)重要的免費(fèi)資源。本文在研究新型軟件系統(tǒng)維護(hù)模型時(shí),將系統(tǒng)軟件運(yùn)行時(shí)出錯(cuò)(或者異常)信息以郵件的形式將追蹤到的系統(tǒng)運(yùn)行出錯(cuò)定位信息發(fā)送到指定維護(hù)人員的郵箱,維護(hù)人員借助此信息可以及時(shí)、高效地完成維護(hù)工作,提高了維護(hù)的靈活性和及時(shí)性。
2 新型軟件系統(tǒng)維護(hù)模型的提出
 由于大型系統(tǒng)的復(fù)雜性或多或少會(huì)導(dǎo)致系統(tǒng)運(yùn)行時(shí)出錯(cuò)或者發(fā)生異常,利用.NET Framework框架提供的特性與反射技術(shù)相互結(jié)合,可以準(zhǔn)確地定位異常發(fā)生的具體位置,同時(shí)反射出出錯(cuò)信息處的代碼相關(guān)信息,保證了系統(tǒng)的維護(hù)的快捷性和方便性,如圖1所示。

3 新型軟件系統(tǒng)維護(hù)模型的實(shí)現(xiàn)
3.1 特性類的實(shí)現(xiàn)

 


 在系統(tǒng)運(yùn)行時(shí)出錯(cuò)定位,必須使用自定義特性,所有自定義特性都繼承于System.Attribute這個(gè)類[1],為了在系統(tǒng)運(yùn)行發(fā)生異常時(shí)獲取異常信息(這里只獲取系統(tǒng)代碼所在行的定位信息,其他信息可以根據(jù)實(shí)際需要獲?。惓P畔⑼ㄟ^郵件的形式發(fā)送出去,需要為自定義特性定義如下數(shù)據(jù)成員,如表1所示。

 其中在表1中的郵件用戶名和郵件密碼指的是發(fā)送郵件方的用戶名和密碼,自定義特性類的成員函數(shù)主要包括構(gòu)造函數(shù),各個(gè)數(shù)據(jù)成員的屬性方法。具體使用時(shí)在每個(gè)模塊的定義部分使用自定義特性類構(gòu)造對(duì)象,給相關(guān)的模塊代碼添加附加信息進(jìn)行關(guān)聯(lián),本文主要是代碼所在的模塊名。使用BS結(jié)構(gòu)的母版頁作為實(shí)例,具體形式如下:
 [myClassAttribute(string sendEmail, string acceptEmail, string serverAdress, string userName,  string passWord,string modelName)]                         //自定義特性實(shí)例化
 public partial class MasterPage:System.Web.UI.MasterPage       //母板頁類
 其中myClassAttribute為自定義特性的類名,實(shí)際實(shí)例化時(shí)使用實(shí)際參數(shù),這樣就建立起了一個(gè)信息關(guān)聯(lián)。
3.2 反射技術(shù)的實(shí)現(xiàn)
 反射技術(shù)的實(shí)現(xiàn)在本實(shí)例中主要分為三個(gè)步驟(可以根據(jù)實(shí)際情況做相關(guān)的改變):
?。?)使用C#的typeof運(yùn)算符、所有類從System.Object類繼承的GetType方法或者System.Type類的靜態(tài)GetType方法獲取System.Type類的引用。
?。?)創(chuàng)建反射實(shí)例,根據(jù)實(shí)際需要可以選擇ConstructorInfo、EventInfo、FieldInfo、InterfaceInfo、MemberInfo、MethodInfo、PropertyInfo,本文實(shí)例中選擇構(gòu)造MemberInfo實(shí)例。
?。?)使用Attribute類的GetCustomAttribute靜態(tài)方法構(gòu)造自定義特性對(duì)象,其中所包含的本模塊的關(guān)聯(lián)的信息就可以獲取出來。
3.3 捕獲異常
 C#專門提供了處理異常機(jī)制,可以使用.NET提供的預(yù)定義異常類,也可以使用自定義異常類,本文主要是使用try{…….}catch{……}finally{……}結(jié)構(gòu)捕獲異常。
3.4 資源整合的實(shí)現(xiàn)
 為了降低開發(fā)和維護(hù)成本,本文中使用免費(fèi)郵件服務(wù)器接受系統(tǒng)運(yùn)行時(shí)出錯(cuò)或者異常信息,將該信息以郵件[4]的形式轉(zhuǎn)發(fā)給系統(tǒng)開發(fā)者或維護(hù)人員,這一過程可以借助于.NET提供的命名空間web.mail來實(shí)現(xiàn)。它提供了SmtpMail、MailMessage和MailAttachment三個(gè)類,分別用于提供屬性和方法來創(chuàng)建一個(gè)郵件消息對(duì)象、提供屬性和方法來創(chuàng)建一個(gè)郵件附件對(duì)象、提供屬性和方法通過使用windows2000 CDOSYS 的消息組件的聯(lián)合數(shù)據(jù)對(duì)象來發(fā)送郵件消息。同時(shí)使用免費(fèi)發(fā)送郵件服務(wù),在設(shè)置好各個(gè)類的屬性后還需加上這三句(省略號(hào)表示根據(jù)實(shí)際參數(shù)填寫參數(shù)):
 objMailMessage.Fields.Add(……);      //基本權(quán)限
 objMailMessage.Fields.Add(……);          //用戶名
 objMailMessage.Fields.Add(……);   //密碼
4 新型軟件系統(tǒng)維護(hù)模型的測(cè)試
 本文在采用BS結(jié)構(gòu)的模板頁中故意設(shè)置一個(gè)異常點(diǎn),依次按上述3.1~3.4的步驟實(shí)現(xiàn),將系統(tǒng)進(jìn)行運(yùn)行得到運(yùn)行結(jié)果,如圖2所示。

 利用.NET平臺(tái)下的特性技術(shù)和反射技術(shù)相互結(jié)合進(jìn)行異常信息的定位,為系統(tǒng)的維護(hù)探索性提出了新型模型,可以有效地提高維護(hù)高效性、靈活性,同時(shí)融合資源整合的思想,降低了開發(fā)和維護(hù)的成本,為系統(tǒng)的維護(hù)和開發(fā)起了指導(dǎo)的作用。隨著遠(yuǎn)程控制的普及,該模型與遠(yuǎn)程控制相互結(jié)合將取得更好的效果。
參考文獻(xiàn)
[1] NAGEL C, EVJEN B, GLYNN J,等.C#高級(jí)編程(第四版)[M].北京:清華大學(xué)出版社,2006.
[2] 李天平,亮劍.NET:.NET深入體驗(yàn)與實(shí)戰(zhàn)精要[M].北京:電子工業(yè)出版社,2009.
[3] 葉樹華,高志紅.網(wǎng)絡(luò)編程實(shí)用教材[M].北京:人民郵電出版社,2006.
[4] 梅元昭.基于反射的WEB SERVICE的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件導(dǎo)刊,2010,9(1):3-5.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。