[Visual Studio 2010] 使用 Modeling UML 類別圖進行 正/反 向工程
這個功能選單是VS2010新增的一個功能
若想要用這個新功能進行 UML 類別圖正向工程,必須要安裝以下功能套件,http://msdn.microsoft.com/zh-tw/vstudio/ff655021.aspx
Microsoft Visual Studio 2010 Visualization and Modeling 功能套件
下載:http://visualstudiogallery.msdn.microsoft.com/93ba7cc9-e145-453f-a269-d98e0576b961/
Microsoft Visual Studio 2010 Feature Pack 2
只限MSDN訂閱
UMLClassDiagram 正向工程:
安裝完畢後,開啟一個新的 ModelingProject 方案
接著就能設計我們的 UML Class,對著類別圖的最外層按右鍵就能設定類別的相依以及成員
UML Class畫好之後,在空白之處按下右鍵"產生程式碼",當然也可以只針對某一類別圖產生程式碼
按下Generate Code後會看到這個畫面,左邊的Member是樣板名稱,右邊是專案輸出位置,如果要改輸出位置要4個樣版都改,不然它會程式碼產生的時候會有不同路徑的問題;或是直接按下OK,它預設會幫你產生專案
若想再次叫出輸出畫面,可以按照以下步驟
順利的生出類別的框架了
點其中一個來看,自動產生出的程式碼長的是圓是扁,ㄟ…怎沒有命名空間。
再檢查一下類別圖,把Package加進來命名為Servconn.RFID,然後原本的類別圖,拖到Package裡面,再產生一次
這次就對了啦
UMLClassDiagram 反向工程:
接下來,來看看如何用程式碼反向畫出UML Class類別圖,先新增一個空的UML Class類別圖
然後把架構視窗開起來。
依照下列步驟,將所需的類別拖拉進去
一直都來不及咖到的產生中…
自動產生出來的UML Class長這樣
經過手動排版之後長這樣,因為程式碼我沒有動到,所以圖相依關係還是跟正向工程一樣。
在這裡我們可以發現,正向工程做出來的UML Class只能產生程式碼,但是反向工程就能檢視程式碼
也就是,直接點選類別圖的成員,就會直接跳到那一段程式碼。
到目前為止正反向工程的介紹到此為止,有人會講這跟舊有的View Class Diagram有什麼不一樣?參考 這裡 有完整的用法
我們來看看舊版的類別圖
舊功能沒有辦法直接畫出各類別之間的相依關係,這是很大的缺憾,不過它可以直接在類別圖上新增成員並同步到程式碼裡。
新版的 Modeling 擁有更多的反向工程功能,可以畫面更多的相依關係圖
Layer Diagram:
接下來看看Layer Diagram,這是用來驗証相依關係用的,當架構師將工作指派給底下成員實作,架構的相依關係可能會被破不小心壞掉了,一個驗証機制便可以讓架構師快速的找出問題所在。
建立一個Layer Diagram後,就拖拉工具箱的Layer進來畫布裡
把相對應的類別拖到Layer裡,或者直接拖拉類別到畫布裡也可以(它會自動生成Layer),有兩種做法,看你喜歡哪一種。
並且畫出期望中的相依關係
在Interface Layer裡右上角出現了2,因為我擺了兩個介面在裡面
也可以按右鍵產生相依關係,不過這樣就失去期望值的來源了,應該是要手動建立期望關係,然後驗証實際相依關係。
期望相依建立完成後,在空白處按下驗証,這當然不會有錯誤,我們必須要模擬一些錯誤
我在RFIDFactory動了些手腳,別忘了編譯(Shift+Ctrl+B)
public class RFIDFactory
{
public virtual ReaderType ReaderType
{
get;
set;
}
//public virtual AbsRFIDBase AbsRfidBase
//{
// get;
// set;
//}
public virtual IReader IReader
{
get;
set;
}
}
編譯後再來跑一次驗証,這次出現錯誤訊息了。
Error 1 AV0001 : Invalid Dependency : Servconn.RFID.RFIDFactory.IReader(Property) --> Servconn.RFID.IReader(Type)
Layers: RFIDFactory.cs, Layer1 | Dependencies: References Parameter, References $(Desktop)\Servconn.RFID.ModelingProject\Servconn.RFID.ModelingProject\驗證.layerdiagram 0 0 Servconn.RFID.ModelingProject
點選錯誤訊息,就會直接跳到有問題的那一段。
PS.我在編譯後按下驗証,會跳出例外錯誤視窗,第二次按就不會有錯,重新編譯又跳出來,不知如何解決。
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET