<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DOTNET平臺(tái)組件配置工具的設(shè)計(jì)與實(shí)現(xiàn)

          DOTNET平臺(tái)組件配置工具的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2010-07-26 來(lái)源:網(wǎng)絡(luò) 收藏
          反轉(zhuǎn)控制(IOC)和面向切面編程(AOP)技術(shù)作為當(dāng)前比較流行的技術(shù),其優(yōu)勢(shì)已受到廣泛關(guān)注,但是這兩項(xiàng)新技術(shù)在實(shí)際項(xiàng)目上的應(yīng)用研究卻很落后,而且在.NET這兩項(xiàng)技術(shù)沒有形成可以廣泛套用的框架,使得開發(fā)人員在.NET下應(yīng)用IOC和AOP技術(shù)的難度和成本大幅度提高。Castle提供了.NET下開發(fā)IOC和AOP技術(shù)的框架,一定程度上解決了開發(fā)人員的難題,但是如何高效地IOC和AOP技術(shù)的開發(fā),至今無(wú)人提出較好的建議。
          本文主要研究Castle框架中的IOC和AOP機(jī)制,目標(biāo)是出一個(gè)可視化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配置思路
           可視化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)行注入,如采用該注入模式系統(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ì)象中。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();