這篇原本有打算要投稿,並錄製教學影片,沒想到中間跑去處理別的事情,就這樣任由它躺在硬碟裡面好幾個月...>_< 有些東西--尤其是資訊技術--時效性是非常重要的。等時效性一過,自己的興頭也大減,就再也沒有動力將它完成了。現在既然發現了這篇筆記,不如稍做整理,讓它重見天日吧(其實 MSDN 上面也有類似的教學文件了)。
圖多,導致篇幅有點長,故分割成兩個部分。這篇是 Part 1,包含基礎觀念和一個練習:建立 UML Profile。Part 2 則會說明如何在模型中套用自己定義的 stereotypes。
學習目標:
簡單的說,UML profile 是一種擴充 UML 的方法。當我們在塑模特定的應用領域時,可能會碰到 UML 基本符號或表示法不夠用、或語意不夠明確的情形。因此,UML 定義了 stereotype(造型)表示法,讓我們能夠針對不同應用領域的需要,自行定義新的語意,以便在塑模時能夠充分表達某些設計意涵。參考底下這張圖,假設我們正在開發 MVC(model-view-controller)架構的應用程式,為了更清楚呈現各類別所擔任的角色,我們可以定義 model、view、controller 這三種 stereotypes 供類別圖使用。
(1) 先安裝 Visual Studio 2010 SDK,下載網址是:http://www.microsoft.com/downloads/details.aspx?FamilyID=47305cf4-2bea-43c0-91cd-1b853602dcc5&displaylang=en
註:雖然沒有安裝 Visual Studio 2010 SDK 也可以建立擴充組件,但使用工具會比較方便。本文的練習步驟都是在 Visual Studio 2010 SDK 已經安裝的前提下進行。
(2) 安裝完成後,在 Visual Studio 2010 的新增專案時,Visual C# 和 Visual Basic 的專案範本分類清單裡面就會多出「Extensibility」,參考下圖:
選擇「VSIX Project」,然後輸入專案名稱「MyUmlExtension」,按 OK。
(3) 專案建立完成後,會自動開啟 source.extension.vsixmanifest 檔案讓你修改:
輸入 ID、Product Name、和 Author 欄位之後,存檔。注意 ID 欄位必須是唯一值,Visual Studio 在建立此專案時會幫你產生一個預設的 ID,你可以直接使用這個預設值。
(4) 接著在 Solution Explorer 視窗中的 MyUmlExtension 專案名稱上點右鍵 > Add > New Item,新增一個 XML 檔案。檔名取為「MyUmlProfile.profile」,檔案內容如下:
稍後會進一步解釋這個 .profile 檔案內容的各個元素,現在只要知道它定義了四個 stereotypes,一個是 "humanTask",其套用的對象是活動圖的節點(包括動作節點、物件節點、決策等);另外三個是 "model"、"view"、"controller",套用對象都是類別圖的類別元素。
(5) 存檔之後,設定 MyUmlProfile.profile 的「Copy to Output Directory」屬性,將屬性值改為「Copy Always」。
(6) 再開啟 source.extension.vsixmanifest 檔案,這次要加入內容項目。
點 Add Content 按鈕之後,會開啟 Add Content 對話窗,內容類型選擇「Custom Extension Type」,類型(Type)欄位輸入「Microsoft.VisualStudio.UmlProfile」,內容的來源請選擇「File in project」,然後挑選我們之前已經在專案中加入的 MyUmlProfile.profile 檔案,參考下圖:
按 OK 之後,儲存檔案,然後建置此專案。按 OK 之後,儲存檔案,然後建置此專案。
(7) 關閉 Visual Studio,用檔案總管瀏覽 MyUmlExtension 專案的輸出目錄(bin\Debug 或 bin\Release),雙擊 MyUmlExtension.vsix 以開始安裝程序。
按「Install」鈕便可完成安裝。
註:其實 .vsix 只是個 zip 格式的壓縮檔,用來將我們的 .profile 和 .vsixmanifest 檔案包在一起。Visual Studio Extension Installer 在安裝 .vsix 檔案時,會將它解壓縮到 %LocalAppData%\Microsoft\VisualStudio\10.0\%AuthorName%\ 資料夾,其中的 %AuthorName% 就是步驟 6 的「Author」欄位值。
圖多,導致篇幅有點長,故分割成兩個部分。這篇是 Part 1,包含基礎觀念和一個練習:建立 UML Profile。Part 2 則會說明如何在模型中套用自己定義的 stereotypes。
學習目標:
- 瞭解如何建立自訂的 UML profile 和 stereotype 來擴充 UML 的語意。
以這個例子來說,我們可以將上述三個 stereotypes 定義在同一個 profile 裡面,然後為這個 profile 取個適當的名稱,例如:MVC Profile。在塑模時,只要為你的 UML 模型套用這個 profile,你就可以在 UML 圖中套用 profile 裡面所定義的 stereotypes。從這個角度來看,profile 其實就是針對特定領域所定義的一群相關 stereotypes 的集合。
Visual Studio 2010 Ultimate 除了提供常用的 UML 圖形元素,也支援 UML profile 的擴充機制。正如剛才提過的,這些 stereotypes 是定義在一個 profile 裡面(副檔名就是 .profile),而這個 profile 必須實作成 Visual Studio 擴充組件(extension)的形式,並且安裝到 Visual Studio IDE 之後,才能套用到你的 UML 模型。
接著便以逐步練習的方式,說明如何建立 profile,以及將自訂的 profile 套用至 UML 模型。
練習:建立 UML profile練習:建立 UML profile
這個小節要示範如何建立、安裝 Visual Studio 擴充組件(extension),以及定義我們的 UML profile。練習步驟如下:
註:雖然沒有安裝 Visual Studio 2010 SDK 也可以建立擴充組件,但使用工具會比較方便。本文的練習步驟都是在 Visual Studio 2010 SDK 已經安裝的前提下進行。
(2) 安裝完成後,在 Visual Studio 2010 的新增專案時,Visual C# 和 Visual Basic 的專案範本分類清單裡面就會多出「Extensibility」,參考下圖:
選擇「VSIX Project」,然後輸入專案名稱「MyUmlExtension」,按 OK。
(3) 專案建立完成後,會自動開啟 source.extension.vsixmanifest 檔案讓你修改:
輸入 ID、Product Name、和 Author 欄位之後,存檔。注意 ID 欄位必須是唯一值,Visual Studio 在建立此專案時會幫你產生一個預設的 ID,你可以直接使用這個預設值。
(4) 接著在 Solution Explorer 視窗中的 MyUmlExtension 專案名稱上點右鍵 > Add > New Item,新增一個 XML 檔案。檔名取為「MyUmlProfile.profile」,檔案內容如下:
<?xml version="1.0" encoding="utf-8"?> <profile dslVersion="1.0.0.0" name="MyUmlProfile" displayName="My UML Profile" xmlns="http://schemas.microsoft.com/UML2.1.2/ProfileDefinition"> <stereotypes> <stereotype name="humanTask" displayName="人工作業"> <metaclasses> <metaclassMoniker name="/MyUmlProfile/Microsoft.VisualStudio.Uml.Activities.IActivityNode" /> </metaclasses> </stereotype> <stereotype name="model" displayName="model"> <metaclasses> <metaclassMoniker name="/MyUmlProfile/Microsoft.VisualStudio.Uml.Classes.IClass" /> </metaclasses> </stereotype> <stereotype name="view" displayName="view"> <metaclasses> <metaclassMoniker name="/MyUmlProfile/Microsoft.VisualStudio.Uml.Classes.IClass" /> </metaclasses> </stereotype> <stereotype name="controller" displayName="controller"> <metaclasses> <metaclassMoniker name="/MyUmlProfile/Microsoft.VisualStudio.Uml.Classes.IClass" /> </metaclasses> </stereotype> </stereotypes> <metaclasses> <metaclass name="Microsoft.VisualStudio.Uml.Activities.IActivityNode" /> <metaclass name="Microsoft.VisualStudio.Uml.Classes.IClass" /> </metaclasses> <propertyTypes></propertyTypes> </profile>
稍後會進一步解釋這個 .profile 檔案內容的各個元素,現在只要知道它定義了四個 stereotypes,一個是 "humanTask",其套用的對象是活動圖的節點(包括動作節點、物件節點、決策等);另外三個是 "model"、"view"、"controller",套用對象都是類別圖的類別元素。
(5) 存檔之後,設定 MyUmlProfile.profile 的「Copy to Output Directory」屬性,將屬性值改為「Copy Always」。
(6) 再開啟 source.extension.vsixmanifest 檔案,這次要加入內容項目。
點 Add Content 按鈕之後,會開啟 Add Content 對話窗,內容類型選擇「Custom Extension Type」,類型(Type)欄位輸入「Microsoft.VisualStudio.UmlProfile」,內容的來源請選擇「File in project」,然後挑選我們之前已經在專案中加入的 MyUmlProfile.profile 檔案,參考下圖:
按 OK 之後,儲存檔案,然後建置此專案。按 OK 之後,儲存檔案,然後建置此專案。
(7) 關閉 Visual Studio,用檔案總管瀏覽 MyUmlExtension 專案的輸出目錄(bin\Debug 或 bin\Release),雙擊 MyUmlExtension.vsix 以開始安裝程序。
按「Install」鈕便可完成安裝。
註:其實 .vsix 只是個 zip 格式的壓縮檔,用來將我們的 .profile 和 .vsixmanifest 檔案包在一起。Visual Studio Extension Installer 在安裝 .vsix 檔案時,會將它解壓縮到 %LocalAppData%\Microsoft\VisualStudio\10.0\%AuthorName%\ 資料夾,其中的 %AuthorName% 就是步驟 6 的「Author」欄位值。
(8) 開啟 Visual Studio 2010,從主選單點 Tools > Extension Manager,應該可以看到我們自己開發的擴充組件。參考下圖:
已經安裝的擴充組件不能重複安裝,如果要重新安裝新的版本,可以先在 Extension Manager 中將擴充組件移除,然後關閉 Visual Studio,再依上一個步驟進行安裝。
註:萬一碰到無法移除的狀況,可以到資料夾 %LocalAppData%\Microsoft\VisualStudio\10.0\ 底下手動刪除擴充組件所在的資料夾。如果擴充組件修改頻繁,經常要解除安裝又再重新安裝,你甚至可以手動將 .profile 和 .visxmanifest 檔案複製到擴充組件的安裝資料夾(Visual Studio 還是必須重新啟動才會生效)。
沒有留言: