一種DOTNET平臺組件配置工具的應用
出處:楊 揚 發(fā)布于:2011-09-03 15:13:43
反轉控制(IOC)和面向切面編程(AOP)技術作為當前比較流行的技術,其優(yōu)勢已受到廣泛關注,但是這兩項新技術在實際項目上的應用研究卻很落后,而且在。NET平臺下實現(xiàn)這兩項技術沒有形成可以廣泛套用的框架,使得開發(fā)人員在。NET平臺下應用IOC和AOP技術的難度和成本大幅度提高。Castle提供了。NET平臺下開發(fā)IOC和AOP技術的框架,一定程度上解決了開發(fā)人員的難題,但是如何高效地實現(xiàn)IOC和AOP技術的開發(fā),至今無人提出較好的建議。
DOTNET就是。NET, 嚴格說是:.Net Framework框架 .但為什么叫DOTNET(。NET)呢?在計算機行業(yè)DOT是Distributed Object Technology的簡稱,意為分布式對象技術。DOT恰好與"點"的英語單詞相同,DOT的音標[d?t]NET是一個微軟開發(fā)的編程環(huán)境,里面可以使用C#,VB等多種編程語言。借助于 .NET 平臺,可以創(chuàng)建和使用基于 XML 的應用程序、進程和 Web 站點以及服務,它們之間可以按設計、在任何平臺或智能設備上共享和組合信息與功能,以向單位和個人提供定制好的解決方案。
本文主要研究Castle框架中的IOC和AOP機制,目標是設計出一個可視化工具,實現(xiàn)IOC和AOP機制中配置文件的可視化配置。該工具經過修改和完善也適用于其他框架中的IOC和AOP配置文件的生成。
1 Castle框架和相關技術介紹
1.1 Castle框架介紹
Castle是針對。NET平臺下的一個非常的開源項目,從數(shù)據訪問框架 ORM到依賴注入容器,再到WEB層的MVC框架、AOP,基本包括了整個開發(fā)過程中的所有東西,為我們快速的構建企業(yè)級的應用程序提供了很好的服務。
1.2 IOC技術介紹
IOC的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務。容器負責將這些聯(lián)系在一起。IoC設計模式重點關注組件的依賴性、配置以及生命周期。當然IoC也適用于簡單類,而不只是組件。除了具有"Dependency Injection"(依賴注入)的昵稱外,IoC還有另一個稱呼,即Hollywood原則("Don't call me,I'll call you,請不要調用我,我將調用你),Ioc設計模式實現(xiàn)了"面向接口編程,而不是實現(xiàn)"的原則。
1.3 AOP技術介紹
AOP為Aspect Oriented Programming的縮寫,意為:面向方法編程,可以通過預編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種技術。AOP實際是GoF設計模式的延續(xù),設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目標的一種實現(xiàn)。在Spring中提供了面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯與系統(tǒng)級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發(fā)。應用對象只實現(xiàn)它們應該做的--完成業(yè)務邏輯--僅此而已。它們并不負責(甚至是意識)其它的系統(tǒng)級關注點,例如日志或事務支持。
2 可視化IOC和AOP配置工具設計思路
可視化IOC和AOP配置工具是一個在。NET平臺下開發(fā)的WinForm程序,這個工具的主要作用就是在IOC組件或者AOP組件都開發(fā)好的條件下,利用這個工具生成IOC或者AOP的配置文件,方法是讀取現(xiàn)存的IOC組件或者AOP組件。在工具中進行相應的配置,直接生成開發(fā)人員所需的配置文件。
該工具的主要功能是通過讀入現(xiàn)存的IOC組件或AOP組件,提取并暫存組件中與配置有關的重要信息,以可視化的方式顯示在工具界面中,然后由開發(fā)人員操作該工具完成組件對應的配置文件的生成。這個過程可以劃分為5個階段(如圖1):讀取類文件>分析類文件>顯示配置信息>開發(fā)人員對參數(shù)進行配置>生成配置文件。其中前三層是該工具主要實現(xiàn)的功能。因此,該可視化工具的代碼部分分為3個層次來編寫。分別是:讀類文件、分析提取信息、顯示信息。

層主要是完成類文件的讀取,在。NET平臺下使用到了System.IO命名空間中文件操作相關的File類和StreamReader類,終將整個讀取的文件內容以string類型返回,以供第二層分析文件使用。
第二層的功能是在層的讀取文件內容的基礎上分析并提取關鍵字,即取出配置文件需要的重要信息,例如IOC反轉控制模式主要有設值注入和構造方法注入,設值注入就是對類中的屬性進行注入,而構造方法注入是對構造函數(shù)中的參數(shù)值進行注入。因此類中的屬性和構造函數(shù)的參數(shù)就屬于IOC配置文件的重要信息,第二層主要完成對類似的重要信息的識別和分類。在第二層中,完成的識別功能主要有:
(1) 識別類文件的命名空間、類名、接口名
命名空間、類名、接口名都是組成IOC和AOP配置文件的必備元素。
在IOC配置文件中,命名空間、類名、接口名常出現(xiàn)在component標簽的service和type屬性值中,而在AOP的配置文件中命名空間出現(xiàn)在Imports關鍵字之后。所以對命名空間、類名、接口名的提取是生成配置文件的必要條件。
?。?) 識別類文件中的屬性
IOC反轉控制模式中的設值注入就是對類中的屬性進行注入,如采用該注入模式設計系統(tǒng),在IOC配置文件中,需要把類中的屬性作為配置文件的標簽。
?。?) 識別類的構造方法中的參數(shù)名
IOC反轉控制模式中的構造注入是對構造函數(shù)中的參數(shù)值進行注入,如果采用該模式設計系統(tǒng),在IOC的配置文件中,需要把構造方法的參數(shù)名作為配置文件中的標簽。
以上介紹的是第二層所識別的關鍵字的類別。在程序中關鍵字的獲取主要是通過編寫獲取方法來實現(xiàn)。獲取命名空間使用GetNamespace方法;獲取類名使用GetClass方法;獲取接口名使用GetInterface方法;獲取屬性名使用GetProperty方法。實現(xiàn)的思路是在遵循一定規(guī)約的前提下通過屬性在類中的位置特征將其提取出來并且依次保存到一個ArrayList對象中。
為了保證該可視化工具識別關鍵字的準確性,程序員在編寫IOC組件時要遵循以下規(guī)約:
?。?) 要求IOC組件類的修飾符為"Public"
(2) 要求類中的全局變量都聲明為"Private"
?。?) 要求屬性的修飾符為"Public"
(4) 要求構造方法的修飾符為"Public"
第三層是頁面層。主要負責頁面可視化設計。頁面層用到了TreeView、Datagrid、TabControl、ContextMenuStrip等控件。TreeView控件以樹形結構展示了當前讀入的組件;Datagrid控件用來展示選中組件的構造方法參數(shù)或屬性,并可以設置其參數(shù)值或屬性值;ContextMenuStrip控件用于控制添加和刪除組件操作;TabControl控件則是其他控件的容器。
以下,對該層使用到的主要控件及其觸發(fā)事件按照其重要程度依次做介紹:
?。?) TreeView控件
該控件的內容占第三層代碼的三分之一,主要涉及到的觸發(fā)事件有NodeMouseClick(單擊)、NodeMouseDoubleClick(雙擊)、AfterCheck(復選框被選中)。設計的功能主要有:單擊TreeView控件結點可查看該結點所代表組件的命名空間和類名;雙擊組件可以顯示出該組件的構造方法參數(shù)或屬性信息;選中復選框后可以將該組件標簽添加到IOC配置文件中。
(2) TabControl控件
該控件主要用于分欄。在該系統(tǒng)中一共用到了2個TabControl控件,個用于左欄即控制欄,該欄一共包含了2個TabPage.這兩個TabPage分別作為IOC組件的控制欄和AOP組件的控制欄。第二個TabControl控件作為顯示欄,共包含了3個TabPage:個用來顯示IOC的配置信息;第二個用來顯示AOP的配置信息;第三個用來實時地顯示當前正在配置的XML文件。
?。?) Datagrid控件
Datagrid主要用于分行顯示讀入的構造方法的參數(shù)名或者類的屬性名。
?。?) ContextMenuStrip控件
該控件作為快捷菜單出現(xiàn)在單擊TreeView控件某個結點后,它通常包含2個選項:"添加組件"和"刪除所有組件".主要使用到的觸發(fā)事件就是該控件的單擊事件。
(5) OpenFileDialog控件
打開文件對話框控件,在本系統(tǒng)中,用于讀入要配置的組件文件。
(6) SaveFileDialog控件
保存文件對話框控件,在本系統(tǒng)中,用于保存配置好的XML文件到指定的位置。
?。?) WebBrowser控件
Web瀏覽器控件,在本系統(tǒng)中,主要用來實時的顯示當前正在配置的XML文件。
除了上述設計內容外,還添加了兩個類文件作為頁面層的輔助類。主要負責一些常用的初始化代碼及其輔助性方法代碼,比如配置文件的初始化方法、DataTable的初始化方法、還有DataTable與Arraylist轉換函數(shù)等。
以上主要介紹了可視化配置工具代碼的三層結構。這三層結構是緊密聯(lián)系的,層與層之間的代碼是調用與被調用的關系。它們共同完成了可視化工具所需的功能。完成的主要功能有:
?。?) 支持IOC中的構造方法注入和設值注入兩種注入方式。
?。?) 可以對IOC的構造方法參數(shù)值或者屬性值進行設置或者修改;支持數(shù)組類型的構造參數(shù)。
?。?) 可以設置或修改組件ID.
(4) 可以保存上次關閉時的組件及其狀態(tài)信息。
(5) 支持AOP組件配置:可以在參數(shù)設置欄設置攔截器鍵值、自動識別切面的類型等。
?。?) 可以同時配置AOP和IOC組件。
3 可視化配置工具的實現(xiàn)和應用
通過三層結構,可視化工具就實現(xiàn)了預計的功能:在IOC和AOP組件存在的前提下,使用該工具可以幫助開發(fā)人員完成配置文件的生成。
3.1 IOC可視化配置工具的實現(xiàn)
可視化工具的IOC部分的操作方法和操作步驟如下:
?。?)在左欄Component節(jié)點上單擊鼠標右鍵,選擇添加組件,如圖2,即可把組件信息載入進來;如果選擇"刪除所有組件",就可以把樹型結構中的所有加載的組件刪除,并把IOC配置文件中的該組件標簽的全部信息相應刪除。

?。?)添加完組件后單擊該組件可以查看該組件的命名空間和類名;雙擊組件可以在IOC配置欄中顯示出該組件的構造方法參數(shù)或屬性信息。該工具支持兩種IOC配置模式,即設值注入(屬性注入)和構造方法注入。在遵循一定規(guī)則的前提下可以自動區(qū)分屬性注入或構造方法注入。圖3、圖4展示的是一個設值注入(屬性注入)的實例。

3.2 AOP可視化配置工具的實現(xiàn)
與IOC不同,AOP的配置也需要讀入相應的類文件,根據AOP的配置特點,要分別讀入攔截器 (Interceptor)、混淆器(Mixin)和切面(Aspect對象),其中Mixin是可選項。
AOP配置界面中"參數(shù)配置"欄可以對Interceptor、Mixin設置別名,這就如同HashTable中鍵和值的一一對應關系,在使用到某個Interceptor或Mixin時可以用它的別名代替。
"Aspect配置"欄顯示了當前讀入的攔截器 (Interceptor)、混淆器(Mixin)和切面信息。根據Castle中AOP的配置原則進行相應配置后點擊"添加該方面"按鈕就可以生成對應的AOP配置文件,同樣可以查看配置結果。
圖5、圖6展示了AOP配置的過程。

4 可視化工具的插件版本
可視化配置工具的插件版本是把先前在。NET平臺下做好的Winform程序做成Sharpdevelop的插件。這是為了滿足更多開發(fā)者的需要,Sharpdevelop的靈活和輕巧博得了很多開發(fā)人員的喜愛。
可視化工具插件版本主要由兩個文件構成,一個是Dll文件,負責整個插件的功能邏輯,這部分代碼與。NET下編寫好的代碼基本一致;另一個是Addin文件,負責該插件在Sharpdevelop開發(fā)工具中出現(xiàn)的位置和名稱等。該插件位置設置為工具菜單下的一個選項。名為"組件裝配".
圖7展示了在SharpDevelop平臺下打開"組件裝配"插件后的效果。

版權與免責聲明
凡本網注明“出處:維庫電子市場網”的所有作品,版權均屬于維庫電子市場網,轉載請必須注明維庫電子市場網,http://www.hbjingang.com,違反者本網將追究相關法律責任。
本網轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品出處,并自負版權等法律責任。
如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網聯(lián)系,否則視為放棄相關權利。
- ARM技術架構與應用開發(fā)實踐指南2026/1/6 10:40:19
- 嵌入式實時操作系統(tǒng)(RTOS)選型與移植技術指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術選型與抗干擾設計實踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎知識2025/7/14 16:59:04









