天天看點

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

 ​

因為在平時工作中一直用Rational Rose或者EA等UML模組化工具來實作UML圖的設計繪制,當然它們也支援正向及逆向工程。但一直感覺使用起來不能和Visual Studio很好的結合起來。直到今天我在微軟官網發現了一個拓展即:Visual Studio 2010的可視化和模組化工具包。

自己小試了一下發現這是個非常強大,使用也很便捷的拓展,下面具體說明一下本人是怎麼使用該拓展的。

首先,需要安裝VS2010 Ultimate(下載下傳)。

然後,下載下傳 Visual Studio 2010的可視化和模組化工具包:​​ 

Visual Studio 2010的可視化和模組化工具包下載下傳完成後是2個.vsix拓展檔案,一個是模組化工具包,一個是運作時,如下圖:

​​

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
輕按兩下直接安裝即可,安裝後開啟VS2010,在建立項目對話框中會多了一項“模組化項目”如下圖:
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

其中包括:

Layer Designer Command Extension——即向層關系圖添加指令和特定動作,具體請參見:向層關系圖添加指令和特點動作

Layer Designer Gesture Extension——即在圖層圖表中加入指令和軌迹,具體請參見:​​在圖層圖表中加入指令和軌迹​​

Layer Designer Validation Extension——即向層關系圖添加自定義體系結構驗證,具體請參見:​​向層關系圖添加自定義體系結構驗證​​

模組化項目——今天我們主要讨論該模闆。

選中“模組化項目”模闆,設定名稱為“TestModelingProject”及設定存儲路徑,點選【确定】按鈕。

這樣我們就建立了一個模組化項目,在VS2010中的解決方案資料總管中會看到如下圖:

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
選中TestModelingProject模組化項目,然後點選IDE菜單欄中的【體系結構】菜單項然後選擇【建立關系圖】
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

彈出關系圖選擇頁面

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

目前共有如下幾種關系圖類别,我們以UML類圖為例,來建立我們自己的程式UML。

設定名稱及添加到模組化項目後點選【确定】按鈕。會自動在IDE中生成類關系圖。

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
點選IDE左側的“工具箱”DockPanel,在工具箱中會出現類圖中常用的圖形,如
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
我們先建立一個Demo,即向畫布中拖拽一個接口及兩個類,分别命名為:IDemo,Demo1,Demo2,在接口中有一個方法約定即:int GetMaxValue(List<Int> list),兩個類分别實作該接口,如
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
這裡介紹一下接口或類型圖中該如何添加“特性”及“操作”,如添加一個操作即一個方法,首先選中“操作”行右鍵點選【添加】-》【操作】
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
然後再屬性DockPanel中設定相關參數及傳回值類型等
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
設定參數點選“Parameters”屬性中右邊的浏覽按鈕“​​
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
​​”,彈出操作參數集合編輯器視窗,對參數進行設定
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

這樣我們的方法就建立成功了,“特性”的建立和方法類圖,這裡就不再一一介紹,這樣我們接口和類就建立成功了。

下面我們來将建好的UML類圖導出來,如何操作呢?如下:

Ctrl+A選中接口和類圖,右鍵點選【GenerateCode】

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
這時會提示選擇類模闆對話框
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
點選【确定】按鈕,開始建立工程
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

最終我們的UML類圖被正向工程導出為如下圖的類庫

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

最終會輸出一些日志資訊提供檢視

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

這樣我們的一個正向工程就完成了,在下章中我們會讨論逆向工程的相關細節。

由于本人也是剛剛接觸對于具體進階應用還不是很了解,是以希望大家一起來讨論,對其中有那些不足還望及時提出

昨天我介紹了使用VS2010模組化拓展的正向工程示例代碼,介紹了如何模組化及如何導出工程檔案,今天我們将來讨論如何從已有代碼中逆向工程出UML設計類圖。

首先,我們先來建立我們将要逆向工程的項目檔案,項目很簡單為了示範全面,我們分别建立了3個工程項目(類庫),如圖:

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

該項目主要實作資料的加減乘除4種簡單計算操作,主要為了示範怎樣逆向工程及如何導出依賴項。

下面分别介紹一下這3個類庫的功能:

ZY.TestModeling.InterfaceDefine——該類庫主要功能為接口聲明。

ZY.TestModeling.Implement——該類庫主要負責功能實作(這裡使用了政策模式對算法進行封裝)。

ZY.TestModeling.UI——顧名思義該類庫為使用者接口UI界面主要負責UI程式與使用者互動。

這樣我們項目結構清晰了,下面來看如何使用VS2010拓展進行逆向工程。

首先、我們應該建立我們所需用的類圖檔案,如何操作呢?即我們右鍵點選解決方案,然後選擇【添加】-》【建立項目】

然後再建立項目對話框中選擇【模組化項目】設定項目名稱及存儲位置後點選【确定】

這樣在解決方案下将自動生成模組化項目

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
然後選中該項目點選Visual Studio 2010中的菜單欄【體系結構】-》【建立關系圖】
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
然後彈出建立關系圖對話框,選擇“UML類圖”設定名稱及添加到的模組化項目後點選【确定】
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
将在模組化項目下生成一個.classdiagram檔案,該檔案即類圖項目檔案,輕按兩下打開生成的類圖檔案。
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
然後、在Visual studio 2010的菜單欄中選擇【體系結構】-》【視窗】-》【體系結構管理器】,如圖:
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
這樣會出現”體系結構資料總管視窗”
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

這裡主要有兩種視圖方式,分别為“解決方案視圖”及“類視圖”

解決方案視圖即按解決方案中的層次項目目錄進行體系結構展示

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
類視圖即按類的層次項目目錄進行體系結構展示
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
這裡我們使用“解決方案視圖”方式進行體系結構展示,在子項目視窗中選中将要逆向工程的項目,這樣在右邊将出現“檔案”浮動視窗,在該視窗中将展示出被選中的3個項目的所有檔案,選中所有檔案後将出現”類型”浮動視窗
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
按住滑鼠左鍵将選中類型拖動到類圖檔案中松開滑鼠左鍵,這樣我們的逆向工程類圖就生成了。怎麼樣簡單吧!
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
最終結果為
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
這裡還有一個不得不提的地方就是,在生成的類圖中可以選中某個類右鍵點選【View Code】,這樣就可以直接調轉到類圖的具體實作檔案了,開可以輕按兩下類圖中的某個“特性”或者“操作“都可以直接定位到實作代碼,這種操作确實很實用也很便利!
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

同時還可以生成依賴項關系圖,我覺得這個功能也很強大,它可以将項目中所依賴的DLL全部以圖形化方式展示出來,并将依賴關系展現出來,甚至可以定位到具體的依賴函數。

如何使用呢?

點選Visual Studio 2010菜單欄中的【體系結構】-》【生成依賴項關系圖】

具體用5個子項可供選擇,

按程式集,

按命名空間,

按類,

By Include File,

自定義

自己可以根據自己需要進行依賴項關系圖的生成

[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
這裡我們選用”按程式集“生成
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
生成後
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
點選【​​
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展
​​】按鈕,即可以将内部細節展現出來,支援子項繼續展開,不能不說微軟确實很強大
[轉]聊聊.net程式設計——淺談使用VS2010模組化拓展

同樣輕按兩下圖中的方法可以直接定位到具體的代碼實作。

這樣我們的逆向工程就完成了。

希望大家熱烈 讨論,共同研究。以後有時間我還會寫一些進階的應用,希望與大家一同探讨!