DOTNET平臺(tái)組件配置工具的設(shè)計(jì)與實(shí)現(xiàn)
本文主要研究Castle框架中的IOC和AOP機(jī)制,目標(biāo)是設(shè)計(jì)出一個(gè)可視化工具,實(shí)現(xiàn)IOC和AOP機(jī)制中配置文件的可視化配置。該工具經(jīng)過修改和完善也適用于其他框架中的IOC和AOP配置文件的生成。
1 Castle框架和相關(guān)技術(shù)介紹
1.1 Castle框架介紹
Castle是.NET平臺(tái)下的一個(gè)系統(tǒng)級(jí)框架,它是通過將一些成熟開源應(yīng)用進(jìn)行無(wú)縫整合而形成的一套完善的系統(tǒng)級(jí)應(yīng)用框架,這其中包括了ActiveRecord、AspectSharp、MonoRail及MicroKernel/Windsor。其中MicroKernel是IOC框架的核心;AspectSharp是AOP的框架。
1.2 IOC技術(shù)介紹
反轉(zhuǎn)控制IOC(Inversion of Control)[1],又稱依賴注入DI(Dependency Injection),是面向?qū)ο箢I(lǐng)域新興的編程思想。簡(jiǎn)單地說,IOC就是指由容器來(lái)控制程序之間的關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中的由程序代碼直接操控。這也就是所謂“反轉(zhuǎn)控制”的概念所在:控制權(quán)由應(yīng)用代碼轉(zhuǎn)到外部容器,控制權(quán)的轉(zhuǎn)移,也就是所謂的反轉(zhuǎn)。
1.3 AOP技術(shù)介紹
AOP[2](Aspect Oriented Programming)是OOP的延續(xù),意思是面向切面編程??梢酝ㄟ^預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加功能的一種技術(shù)。它可以解決OOP和過程化方法不能夠很好解決的橫切(crosscut)問題,如:事務(wù)、安全、日志等橫切關(guān)注。當(dāng)未來(lái)系統(tǒng)變得越來(lái)越復(fù)雜,橫切關(guān)注點(diǎn)就成為一個(gè)大問題的時(shí)候,AOP就可以很輕松地解決橫切關(guān)注點(diǎn)的問題。
2 可視化IOC和AOP配置工具設(shè)計(jì)思路
可視化IOC和AOP配置工具是一個(gè)在.NET平臺(tái)下開發(fā)的WinForm程序,這個(gè)工具的主要作用就是在IOC組件或者AOP組件都開發(fā)好的條件下,利用這個(gè)工具生成IOC或者AOP的配置文件,方法是讀取現(xiàn)存的IOC組件或者AOP組件。在工具中進(jìn)行相應(yīng)的配置,最后直接生成開發(fā)人員所需的配置文件。
該工具的主要功能是通過讀入現(xiàn)存的IOC組件或AOP組件,提取并暫存組件中與配置有關(guān)的重要信息,以可視化的方式顯示在工具界面中,然后由開發(fā)人員操作該工具完成組件對(duì)應(yīng)的配置文件的生成。這個(gè)過程可以劃分為5個(gè)階段(如圖1):讀取類文件>分析類文件>顯示配置信息>開發(fā)人員對(duì)參數(shù)進(jìn)行配置>生成配置文件。其中前三層是該工具主要實(shí)現(xiàn)的功能。因此,該可視化工具的代碼部分分為3個(gè)層次來(lái)編寫。分別是:讀類文件、分析提取信息、顯示信息。本文引用地址:http://www.ex-cimer.com/article/151717.htm
第一層主要是完成類文件的讀取,在.NET平臺(tái)下使用到了System.IO命名空間中文件操作相關(guān)的File類和StreamReader類,最終將整個(gè)讀取的文件內(nèi)容以string類型返回,以供第二層分析文件使用。
第二層的功能是在第一層的讀取文件內(nèi)容的基礎(chǔ)上分析并提取關(guān)鍵字,即取出配置文件需要的重要信息,例如IOC反轉(zhuǎn)控制模式主要有設(shè)值注入和構(gòu)造方法注入,設(shè)值注入就是對(duì)類中的屬性進(jìn)行注入,而構(gòu)造方法注入是對(duì)構(gòu)造函數(shù)中的參數(shù)值進(jìn)行注入。因此類中的屬性和構(gòu)造函數(shù)的參數(shù)就屬于IOC配置文件的重要信息,第二層主要完成對(duì)類似的重要信息的識(shí)別和分類。在第二層中,完成的識(shí)別功能主要有:
(1) 識(shí)別類文件的命名空間、類名、接口名
命名空間、類名、接口名都是組成IOC和AOP配置文件的必備元素。
在IOC配置文件中,命名空間、類名、接口名常出現(xiàn)在component標(biāo)簽的service和type屬性值中,而在AOP的配置文件中命名空間出現(xiàn)在Imports關(guān)鍵字之后。所以對(duì)命名空間、類名、接口名的提取是生成配置文件的必要條件。
(2) 識(shí)別類文件中的屬性
IOC反轉(zhuǎn)控制模式中的設(shè)值注入就是對(duì)類中的屬性進(jìn)行注入,如采用該注入模式設(shè)計(jì)系統(tǒng),在IOC配置文件中,需要把類中的屬性作為配置文件的標(biāo)簽。
(3) 識(shí)別類的構(gòu)造方法中的參數(shù)名
IOC反轉(zhuǎn)控制模式中的構(gòu)造注入是對(duì)構(gòu)造函數(shù)中的參數(shù)值進(jìn)行注入,如果采用該模式設(shè)計(jì)系統(tǒng),在IOC的配置文件中,需要把構(gòu)造方法的參數(shù)名作為配置文件中的標(biāo)簽。
以上介紹的是第二層所識(shí)別的關(guān)鍵字的類別。在程序中關(guān)鍵字的獲取主要是通過編寫獲取方法來(lái)實(shí)現(xiàn)。獲取命名空間使用GetNamespace方法;獲取類名使用GetClass方法;獲取接口名使用GetInterface方法;獲取屬性名使用GetProperty方法。實(shí)現(xiàn)的思路是在遵循一定規(guī)約的前提下通過屬性在類中的位置特征將其提取出來(lái)并且依次保存到一個(gè)ArrayList對(duì)象中。
評(píng)論