第一層主要是完成類文件的讀取,在.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關鍵字之后。所以對命名空間、類名、接口名的提取是生成配置文件的必要條件。
(2) 識別類文件中的屬性
IOC反轉控制模式中的設值注入就是對類中的屬性進行注入,如采用該注入模式設計系統(tǒng),在IOC配置文件中,需要把類中的屬性作為配置文件的標簽。
(3) 識別類的構造方法中的參數(shù)名
IOC反轉控制模式中的構造注入是對構造函數(shù)中的參數(shù)值進行注入,如果采用該模式設計系統(tǒng),在IOC的配置文件中,需要把構造方法的參數(shù)名作為配置文件中的標簽。
以上介紹的是第二層所識別的關鍵字的類別。在程序中關鍵字的獲取主要是通過編寫獲取方法來實現(xiàn)。獲取命名空間使用GetNamespace方法;獲取類名使用GetClass方法;獲取接口名使用GetInterface方法;獲取屬性名使用GetProperty方法。實現(xiàn)的思路是在遵循一定規(guī)約的前提下通過屬性在類中的位置特征將其提取出來并且依次保存到一個ArrayList對象中。[!--empirenews.page--]
為了保證該可視化工具識別關鍵字的準確性,程序員在編寫IOC組件時要遵循以下規(guī)約:
(1) 要求IOC組件類的修飾符為“Public”
(2) 要求類中的全局變量都聲明為“Private”
(3) 要求屬性的修飾符為“Public”
(4) 要求構造方法的修飾符為“Public”
第三層是頁面層。主要負責頁面可視化設計。頁面層用到了TreeView、Datagrid、TabControl、ContextMenuStrip等控件。TreeView控件以樹形結構展示了當前讀入的組件;Datagrid控件用來展示選中組件的構造方法參數(shù)或屬性,并可以設置其參數(shù)值或屬性值;ContextMenuStrip控件用于控制添加和刪除組件操作;TabControl控件則是其他控件的容器。
以下,對該層使用到的主要控件及其觸發(fā)事件按照其重要程度依次做介紹:
(1) 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文件。
(3) Datagrid控件
Datagrid主要用于分行顯示讀入的構造方法的參數(shù)名或者類的屬性名。
(4) ContextMenuStrip控件
該控件作為快捷菜單出現(xiàn)在單擊TreeView控件某個結點后,它通常包含2個選項:“添加組件”和“刪除所有組件”。主要使用到的觸發(fā)事件就是該控件的單擊事件。
(5) OpenFileDialog控件
打開文件對話框控件,在本系統(tǒng)中,用于讀入要配置的組件文件。
(6) SaveFileDialog控件
保存文件對話框控件,在本系統(tǒng)中,用于保存配置好的XML文件到指定的位置。
(7) WebBrowser控件
Web瀏覽器控件,在本系統(tǒng)中,主要用來實時的顯示當前正在配置的XML文件。
除了上述設計內容外,還添加了兩個類文件作為頁面層的輔助類。主要負責一些常用的初始化代碼及其輔助性方法代碼,比如配置文件的初始化方法、DataTable的初始化方法、還有DataTable與Arraylist轉換函數(shù)等。
以上主要介紹了可視化配置工具代碼的三層結構。這三層結構是緊密聯(lián)系的,層與層之間的代碼是調用與被調用的關系。它們共同完成了可視化工具所需的功能。完成的主要功能有:
(1) 支持IOC中的構造方法注入和設值注入兩種注入方式。
(2) 可以對IOC的構造方法參數(shù)值或者屬性值進行設置或者修改;支持數(shù)組類型的構造參數(shù)。
(3) 可以設置或修改組件ID。
(4) 可以保存上次關閉時的組件及其狀態(tài)信息。
(5) 支持AOP組件配置:可以在參數(shù)設置欄設置攔截器鍵值、自動識別切面的類型等。
(6) 可以同時配置AOP和IOC組件。
3 可視化配置工具的實現(xiàn)和應用
通過三層結構,可視化工具就實現(xiàn)了預計的功能:在IOC和AOP組件存在的前提下,使用該工具可以幫助開發(fā)人員完成配置文件的生成。
3.1 IOC可視化配置工具的實現(xiàn)
可視化工具的IOC部分的操作方法和操作步驟如下:
(1)在左欄Component節(jié)點上單擊鼠標右鍵,選擇添加組件,如圖2,即可把組件信息載入進來;如果選擇“刪除所有組件”,就可以把樹型結構中的所有加載的組件刪除,并把IOC配置文件中的該組件標簽的全部信息相應刪除。
(2)添加完組件后單擊該組件可以查看該組件的命名空間和類名;雙擊組件可以在IOC配置欄中顯示出該組件的構造方法參數(shù)或屬性信息。該工具支持兩種IOC配置模式,即設值注入(屬性注入)和構造方法注入。在遵循一定規(guī)則的前提下可以自動區(qū)分屬性注入或構造方法注入。圖3、圖4展示的是一個設值注入(屬性注入)的實例。
[!--empirenews.page--]3.2 AOP可視化配置工具的實現(xiàn)
與IOC不同,AOP的配置也需要讀入相應的類文件,根據(jù)AOP的配置特點,要分別讀入攔截器 (Interceptor)、混淆器(Mixin)和切面(Aspect對象),其中Mixin是可選項。
AOP配置界面中“參數(shù)配置”欄可以對Interceptor、Mixin設置別名,這就如同HashTable中鍵和值的一一對應關系,在使用到某個Interceptor或Mixin時可以用它的別名代替。
“Aspect配置”欄顯示了當前讀入的攔截器 (Interceptor)、混淆器(Mixin)和切面信息。根據(jù)Castle中AOP的配置原則進行相應配置后點擊“添加該方面”按鈕就可以生成對應的AOP配置文件,同樣可以查看配置結果。
圖5、圖6展示了AOP配置的過程。
4 可視化工具的插件版本
可視化配置工具的插件版本是把先前在.NET平臺下做好的Winform程序做成Sharpdevelop的插件。這是為了滿足更多開發(fā)者的需要,Sharpdevelop的靈活和輕巧博得了很多開發(fā)人員的喜愛。
可視化工具插件版本主要由兩個文件構成,一個是Dll文件,負責整個插件的功能邏輯,這部分代碼與.NET下編寫好的代碼基本一致;另一個是Addin文件,負責該插件在Sharpdevelop開發(fā)工具中出現(xiàn)的位置和名稱等。該插件位置設置為工具菜單下的最后一個選項。名為“組件裝配”。
圖7展示了在SharpDevelop平臺下打開“組件裝配”插件后的效果。
參考文獻
[1] 羅時灼.精通Spring[M].北京:電子工業(yè)出版社,2005:14-50.
[2] SHEN Y, CHEN H. Extending SOFL features for AOP modeling. Engineering of Complex Computer Systems, 2005,5(2):14-15.
[3] 李志純. 面向Aspect編程的應用研究[J].計算機技術與 發(fā)展, 2006,16(5):217-219.
[4] 劉曉華. 精通.NET核心技術原理與構架[M]. 北京:電子工業(yè)出版社,2002,6.
[5] 張立編著.C# 2.0寶典[M].北京:電子工業(yè)出版社,2006.
北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心要問機器人公司哪家強,波士頓動力絕對是其中的佼佼者。近來年該公司在機器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開發(fā)的機器人會后空翻,自主爬樓梯等。這不,波士頓動力又發(fā)布了其機器人組團跳男團舞的新視頻,表演的機器人包括...
關鍵字: 機器人 BSP 工業(yè)機器人 現(xiàn)代汽車