如何定義網域指定的語言
若要定義一種定義域專屬語言 (DSL),建立Visual Studio方案範本。解決方案的關鍵部分是 DSL 定義圖表中,儲存在 DslDefinition.dsl 中。DSL 定義會定義類別和 DSL 的圖形。之後您修改並新增到這些項目,您可以新增自訂更詳細地 DSL 的程式碼。
如果您的 Dsl 的新手,建議您在逐步使用DSL Tools Lab,您可以在中找到這個站台: Visualizaton,並建立模型的 SDK
本主題內容
選擇範本方案
用來定義 DSL 的模式
類別的模型項目
在圖表上的圖形
參考和連接器
包含清單的圖形: 區間圖案
在另一個圖案的界限上的連接埠
泳道
屬性型別
自訂您的 DSL
疑難排解
選擇範本方案
若要定義 DSL,您必須安裝下列元件:
Visual Studio |
|
Visual Studio SDK |
|
Visual Studio 的視覺化和模型 SDK |
完整.嗎?LinkID = 186128 |
若要建立新的網域特定語言,您建立新的Visual Studio解決方案使用網域特定語言的專案範本。
若要建立 DSL 方案
建立方案,並以定義域專屬語言 」 範本,它可以在下找到 其他專案類型/擴充性 在 新的專案對話方塊。
當您按下確定、 定義域專屬語言精靈會開啟,並顯示一份範本 DSL 的解決方案。
按一下 [每個範本,請參閱 [說明]。選擇最接近您要建立方案]。
每一個 DSL 範本定義 DSL 基本工作。您將編輯這個 DSL 來符合您自己的需要。
按一下每個範例,如需詳細資訊。
選取 [ 工作流程來建立 DSL 都區隔線。區隔線是圖表的垂直或水平資料分割。
選取 [ 元件模型來建立連接埠的 DSL。連接埠是較大圖形的邊緣上的小型圖形。
選取 [ 類別圖表來定義有區間圖案的 DSL。區間圖案包含項目的清單。
選取 [ 降到最低的語言在其他情況下,或如果您不確定。
注意事項 如果您想要建立類別圖表] 或 [元件圖表,請考慮使用 [UML 模型。UML 模型工具提供一組整合在單一模型周圍的圖表。它們是可擴充的而且可以與您使用 ModelBus 的 DSL 整合。如需詳細資訊,請參閱開發軟體設計的模型。
選取 [ 最少的 WinForm 設計工具 或 降到最低的 WPF 設計工具來建立 Windows Form 或 WPF 介面所顯示的 DSL。您必須撰寫程式碼來定義了編輯器。如需詳細資訊,請參閱下列主題:
您的 DSL 在適當的精靈頁面中輸入檔案的副檔名。這是包含您的 DSL 的執行個體的檔案將使用的副檔名。
選擇與任何應用程式,在您的電腦,或您想要用來安裝 DSL 的任何電腦都沒有關聯的副檔名。例如, docx和htm是令人無法接受的檔案名稱副檔名。
精靈會警告您如果正在使用您所輸入的副檔名為 DSL。請考慮使用不同的副檔名。您也可以重設 Visual Studio 的 SDK 實驗來清除舊實驗性的設計工具的執行個體。按一下 [ 開始,按一下 所有程式, Visual Studio 2010 SDK Microsoft, 工具,然後再 重設 Microsoft Visual Studio 2010年實驗的執行個體。
您可以調整其他網頁上,設定,或保留預設值。
按一下 [完成]。
精靈會建立包含兩個或三個專案,並從 DSL 定義產生程式碼的方案。
使用者介面現在類似下圖。
本解決方案定義的網域特定語言。如需詳細資訊,請參閱 Domain-Specific Language Tools 使用者介面概觀。
測試方案
使用樣板的方法提供可運作的 DSL,您可以修改,或使用原狀。
若要測試的解決方案,請按 F5 或 CTRL + F5。新的執行個體的Visual Studio在實驗性質的模式下開啟。
在 [新的執行個體的Visual Studio,在 [方案總管] 中,開啟 [範例檔案。它會開啟成圖表中,一個工具箱。
如果您執行方案,您已建立從降到最低的語言範本、 您實驗Visual Studio會類似下列範例:
嘗試使用的工具。建立項目,連接起來。
關閉 Visual Studio 的實驗執行個體。
注意事項 |
---|
當您修改 DSL 時,不再可以看見在圖形上的範例測試檔案。不過,您可以建立新的項目。 |
修改範本 DSL
重新命名,並保留 DSL 定義範本內的部分或所有的網域類別和圖形的類別。新的類別名稱必須是有效的 CLR 名稱、 無空格或標點符號。
它是特別有用,要保留這些類別:
根類別會出現在左上角 DSL 定義圖表中,在類別和關聯性。將它重新命名為 DSL 與不同的名稱。比方說,名為 MusicLibrary 的 DSL 可能根類別,名為音樂。
在圖表的類別會出現在右下角 DSL 定義圖表中, 圖表項目資料行。您可能必須捲動到右邊才能看到它。通常名為 YourDsl圖表。
如果您使用工作流程範本,而您想要建立圖表,以區隔線、 保留及重新命名動作項目的網域類別和 ActorSwimlane 的圖形。
刪除或重新命名以符合您需求的其他類別。
用來定義 DSL 的模式
我們建議您藉由新增或一次調整一個或兩個功能,開發 DSL。增加一項功能、 DSL 的執行及測試之用,然後再新增一或兩個更多的功能。可能是您的 DSL 的一般功能:
網域類別、 內嵌的關聯性模型,來顯示該類別的項目在圖表中,並可讓使用者在項目工具所需的圖形連接之項目的建立項目。
網域類別以及它們顯示在圖形的裝飾網域內容。
參考的關聯性與連接器,其顯示在 [圖表] 和 [連接器] 工具,可讓使用者建立的連結。
自訂所需程式碼,例如驗證條件約束或功能表指令。
下列章節說明如何建構的 DSL 功能最有用處的種類。有許多其他模式,可以用來建構 DSL,但這些最常用的。
注意事項 |
---|
後新增一項功能,請不要忘記按一下轉換所有的範本在方案總管] 的工具列上,才能建置及執行您的 DSL。 |
下圖使用本主題中的範例 DSL 的類別和關聯性的組件。
下圖是這個 DSL 的範例模型:
注意事項 |
---|
「 模型 」 指的是您的使用者建立,並且通常會顯示為圖表的 DSL 的執行個體。本主題討論 DSL 定義圖表,並使用您的 DSL 時所出現的模型圖表。 |
定義網域類別
網域類別表示您的 DSL 的概念。執行個體就模型項目。例如 MusicLibrary DSL 中可能有命名為專輯 」 和 「 歌曲的網域類別。
若要建立的網域類別,您可以將從名為網域類別工具在圖表中,並再重新命名類別。
如需詳細資訊,請參閱 網域類別的屬性。
每個網域類別建立內嵌的關聯性
除了根類別的每個網域類別必須至少一個內嵌的關聯性,目標或必須繼承自類別做為內嵌的關聯性的目標。
在模型中,每個模型項目是內嵌關聯性的單一樹狀目錄中的節點。來源與內嵌的關聯性的目標是經常被稱為父和子系。
網域類別的父類別的選項,取決於您要其項目的存留期,若 a 相依於其他元件的方式。如果刪除樹狀結構的節點,則其樹狀子目錄是通常也一併刪除。類別的項目具有獨立的存在,就會因此內嵌根類別的正下方。
一般而言,如果您要顯示在另一個項目內的項目,您會想要指出一個擁有者的關聯。在此情況下,最適合的父類別是容器的類別。例外狀況時,您會看到容器內的項目是實際上只是個參照連結至獨立的項目。在此情況下,刪除該容器刪除參考,而不是它的目標。
在本主題所述的 DSL 定義的模式,我們會假設容器遭到刪除時,會刪除容器內所顯示的項目。更複雜的配置是可行的並可以藉由定義規則來達成。
項目顯示方式 |
(內嵌) 的父類別 |
DSL 方案範本中的範例 |
---|---|---|
在圖表上的圖形。 區隔線。 |
DSL 的根類別。 |
最小的語言。 工作流程: 動作項目類別。 |
圖形區隔線中。 |
目的網域類別做為區隔線顯示的項目。 |
工作流程: 工作類別。 |
在圖形中,其中的項目就會被刪除容器遭到刪除的清單中的項目。 在圖形邊緣上的連接埠。 |
網域對應至 [容器] 圖形的類別。 |
在類別圖表: 屬性類別。 元件圖: 連接埠類別。 |
在清單中,不會刪除容器被刪除的項目。 |
DSL 的根類別。 清單會顯示參考的連結。 |
|
不會直接顯示。 |
類別,其中它可構成組件。 |
在音樂媒體櫃的範例中,會將專輯顯示成矩形所列的歌曲標題中。因此專輯的父代是根類別音樂,而歌曲的父代專輯。
若要建立網域類別和其內嵌在此同時,請按一下 [ 內嵌關聯性工具,然後按一下父類別,然後按一下圖表的空白部分。
它通常不需要調整的名稱嵌入的關聯性和其角色,因為它們將會自動追蹤類別名稱。
注意事項 |
---|
內嵌不繼承相同。在內嵌的關聯性的子系不會從其父項繼承的功能。 |
加入網域中的每個類別中的網域內容
網域內容儲存值。以下是範例: 名稱、 職稱、 出版日期。
按一下 [ 網域內容在類別中,按 ENTER 鍵,,然後鍵入屬性的名稱。預設網域屬性型別為字串。如果您想要變更的類型,選取 [網域] 屬性中,並設定型別 在 屬性視窗。如果您想要的類型不在下拉式清單中,請參閱新增的屬性型別。
將項目名稱屬性設定。 選取 [網域] 屬性可以用來識別語言檔案總管] 中的項目]。例如,在您可以選取 [標題] 網域屬性的歌曲網域類別。在屬性 ] 視窗中,設定是項目名稱到true。
建立衍生的網域類別
如果您希望網域類別必須繼承它的屬性和關聯性的變種,建立從它衍生的類別。比方說,專輯可能會有衍生類別 WMA 與 MP3。
建立衍生的類別使用網域類別工具。
按一下 [ 繼承工具,按一下 [衍生的類別中,然後按一下 [基底類別。
請考慮設定繼承修飾詞 的基底類別的 抽象。如果您認為您可能需要基底類別的執行個體,請考慮改建立不同的衍生類別為他們。
在衍生的類別繼承的屬性和其基底類別的角色。
清理 DSL 定義圖表
當您新增的關聯性時,有些類別會出現在一個以上的地方。若要減少的外觀,並讓圖表更寬,關聯性,目標類別上按一下滑鼠右鍵,然後按一下在這裡將樹狀目錄。相反的效果,請以滑鼠右鍵按一下目標類別的關聯性,並按一下 [ 分割樹狀結構。如果看不到這些功能表命令,請確定已選取 [網域類別。
使用 CTRL + 向上鍵和 CTRL + 向下移動網域類別和圖形的類別。
測試網域類別
若要測試新的網域類別
按一下 [轉換所有的範本在工具列上的 [方案總管] 中,以產生 DSL 設計工具的程式碼。您可以自動執行此步驟。如需詳細資訊,請參閱 如何將轉換所有範本的作業自動化。
建置並執行 DSL。 按下 F5 或 CTRL + F5 以執行新執行個體的Visual Studio在實驗性質的模式。實驗性的執行個體中Visual Studio、 開啟或建立您的 DSL 副檔名的檔案。
開啟 [檔案總管]。 在圖表的側邊是語言 [總管] 視窗,它通常是名為 YourLanguage 總管。如果看不到這個視窗,它可能會在方案總管] 下方的索引標籤上。如果您找不到,在檢視 功能表上指向 其他視窗,然後按一下 YourLanguage總管。
您的檔案總管] 提供模型的樹狀檢視。
建立新的項目。 在頂端,根節點上按一下滑鼠右鍵,然後按一下 [ 加入新YourClass。
您的類別的新執行個體就會出現在您的語言檔案總管中。
請確認每個執行個體在建立新的執行個體時,會有不同的名稱。這在您已設定時,才會發生是項目名稱上定義域屬性的旗標。
請檢查網域的內容。 您選取的類別的執行個體檢查 [屬性] 視窗。它應該會顯示在您類別定義此網域的網域內容。
將檔案儲存、 關閉它,並重新啟動。之後您展開節點,應該顯示在 [總管] 中,您所建立的所有執行個體。
在圖表上定義的圖形
您可以在圖表上定義類別出現的項目矩形、 橢圓形或圖示的方式。
若要定義類別,以在圖表上的圖形的形式出現的項目
定義並測試中所述的網域類別定義網域類別**.**
類別的父代應該根類別。也就是應該是一個內嵌根類別和新的網域類別之間的關聯。
如果您的圖表區隔線,父代可以是網域類別對應至 [區隔線。繼續這個程序,請參閱定義具有區隔線 DSL。
新增 shape 類別來代表模型圖表上的項目。拖曳其中一個拖曳到 DSL 定義圖表中的下列工具:
幾何圖案提供的矩形或橢圓形。
影像圖形顯示您所提供的影像。
Compartment 圖形是一個矩形,會包含一或多個清單項目。
重新命名的圖形類別,會出現在右下方的 DSL 定義圖表中,在 [圖形] 及 [連接線] 下。
如果您建立的 [影像] 圖形,請定義映像、。
建立任何大小的影像檔。支援 BMP、 JPEG、 GIF 及 EMF 格式。
在 [方案總管] 中,請將檔案加入方案的 Dsl\Resources。
返回 DSL 定義圖表,然後選取 [新的映像 shape 類別。
在 [屬性] 視窗中,按一下 映像屬性。
在選取影像 對話方塊方塊中,按一下 [] 下的下拉功能表 檔名,並選取影像。
加入圖形,以顯示 [網域內容中的文字裝飾。
若要顯示的名稱或模型項目的標題,您可能需要一個以上的文字裝飾。
Shape 類別的標頭上按一下滑鼠右鍵,指到新增,然後按一下 [ 文字裝飾。設定名稱裝飾,並在 [屬性] 視窗設定其位置。
每個圖形連接與圖表項目對應至網域類別,則應該顯示。
按一下 [ 圖表項目對應工具,然後按一下 [網域類別,然後按一下 [shape 類別。
將內容對應至文字裝飾。
選取網域類別和圖形類別,表示圖示的項目對應表之間的灰色線條。
在 DSL 詳細資料 ] 視窗中,按一下 裝飾對應 索引標籤。如果看不到 DSL 的詳細資訊 視窗,在 檢視 功能表上指向 其他視窗 ,然後按一下 DSL 詳細資料。它經常是視窗的必要引發頂端,以察看其所有內容。
選取裝飾名稱。在顯示屬性,選取的網域類別的屬性名稱。針對每一個裝飾重複此步驟。
如果您要顯示相關的元素的屬性,請按下的下拉式樹狀目錄導覽器來顯示屬性的路徑。
請確定核取記號會出現每一個裝飾名稱的旁邊。
讓工具箱項目建立的網域類別的項目。
在 DSL 總管,展開 編輯器節點和其所有子節點。
以滑鼠右鍵按一下 [下的] 節點工具箱] 索引標籤 ,具有相同的名稱,為您的 DSL,例如 MusicLibrary。按一下 [ 中加入項目工具。
注意事項 如果您以滑鼠右鍵按一下工具 節點,就不會看到 新增項目工具。相反地,按一下 [上方] 節點。
在所選取的新項目工具與 [屬性] 視窗中,設定類別到您最近新增的網域類別。
設定標題 和 工具提示。
設定工具箱圖示會出現在工具箱] 中的圖示。您可以將它設定為新的圖示或圖示已經用於另一種工具。
若要建立新的圖示,開啟中的 Dsl\Resources 方案總管] 中。複製並貼上其中一個現有的項目工具 BMP 檔。重新命名的貼上的複本,然後再連按兩下即可進行編輯。
返回 DSL 定義圖表、 選取工具,然後在 [屬性] 視窗中按一下 [...] 在 工具箱圖示。在選取點陣圖對話方塊中,選取您。BMP 檔案,從下拉功能表。
若要測試圖形
按一下 [轉換所有的範本在工具列上的 [方案總管] 中,以產生 DSL 設計工具的程式碼。
建置並執行 DSL。 按下 F5 或 CTRL + F5 以執行新執行個體的Visual Studio在實驗性質的模式。實驗性的執行個體中Visual Studio、 開啟或建立您的 DSL 副檔名的檔案。
請確認項目工具顯示在工具箱] 中。
建立圖形藉由拖曳至模型圖表上的工具。
請確認則會顯示每個文字裝飾, 且:
您可以編輯它,除非您已設定是 UI 知道印表機驅動上的 [網域] 屬性的旗標。
當您編輯的屬性,[屬性] 視窗或裝飾時,其他的檢視會更新。
您第一次測試圖形之後,您可以調整一些它的屬性,並將新增一些更進階的功能。如需詳細資訊,請參閱 自訂及擴充網域指定的語言。
定義的參考關聯性
您可以定義來源網域的任何類別和目標網域的任何類別之間的參考關聯性。參考的關聯性通常會在圖表上以連接器,也就是圖形之間的線條。
比方說,如果音樂專輯與演出者名稱會顯示在圖表上的圖形,您可定義名為 ArtistsAppearedOnAlbums,用來連結其有工作專輯演出者名稱的關聯性。請參閱圖範例。
參考的關聯性也可以連結相同型別的項目。比方說,在代表族譜 DSL、 父代和它們的子系之間的關係是參考關係因人而異。
定義的參考關聯性
按一下 [參考關聯性] 工具中,按一下 [來源網域類別關係,,然後按一下 [目標網域類別。目標類別可以是不同於來源類別。
每個關聯性會有兩種角色,以在 [關聯] 方塊中的每一面線條表示。您可以選取每個角色,並在 [屬性] 視窗設定其屬性。
請考慮重新命名角色。比方說,在人與人之間的關係,您可以將預設的名稱變更為父代和子系、 管理員和從屬項目、 老師和學生,以此類推。
調整每個角色多樣性、 它是否必要。如果您要每人都可以有最多一個經理,將出現..1 到圖表上的 [管理員] 標籤下的多重性。
加入關聯性中的網域內容。 圖中的演出者專輯關聯性都具有角色的屬性。
設定允許重複屬性的關聯性, 如果相同類別的多個連結可以存在同一對模型元素之間。例如,您可能會允許教導不只是一個受限於相同的學生的老師。
定義連接器,以顯示關係
連接線會顯示模型圖上的兩個圖形之間的線條。
拖曳連接器工具拖曳到 DSL 定義圖表中。
如果您想要顯示在連接器上的標籤,請將文字裝飾。設定它們的位置。若要讓移動的文字裝飾的使用者,請設定其是不理會 [可移動屬性。
使用圖表項目對應工具,以連結至參考關係的連接器。
選取圖表項目對應,以開啟 DSL 詳細資料 ] 視窗中,並開啟 裝飾對應 ] 索引標籤。
選取每個裝飾 ,並設定 顯示屬性至正確的網域] 屬性。
請確定在每個項目旁邊的核取記號裝飾清單。
定義連接產生器工具
在 DSL 總管 ] 視窗中,展開 編輯器節點和其所有子節點。
以滑鼠右鍵按一下具有您的 DSL 同名的節點,然後按一下 [ 加入新的連線工具。
選取新的工具時,在 [屬性] 視窗中:
設定標題 和 工具提示。
按一下 [ 連接產生器 ,然後選取新的關聯性的適當輔助設計工具。
設定工具箱圖示到您想要出現在 [工具箱] 圖示。您可以將它設定為新的圖示或圖示已經用於另一種工具。
若要建立新的圖示,開啟中的 Dsl\Resources 方案總管] 中。複製並貼上其中一個現有的項目工具 BMP 檔。重新命名的貼上的複本,然後再連按兩下即可進行編輯。
返回 DSL 定義圖表、 選取工具,然後在 [屬性] 視窗中按一下 [...] 在 工具箱圖示。在選取點陣圖對話方塊中,選取您。BMP 檔案,從下拉功能表。
若要測試的參考關聯性和連接器
按一下 [轉換所有的範本在工具列上的 [方案總管] 中,以產生 DSL 設計工具的程式碼。
建置並執行 DSL。 按下 F5 或 CTRL + F5 以執行新執行個體的Visual Studio在實驗性質的模式。實驗性的執行個體中Visual Studio、 開啟或建立您的 DSL 副檔名的檔案。
請檢查 [連接] 工具會出現在工具箱] 中。
建立圖形藉由拖曳至模型圖表上的工具。
建立連線的圖形之間。按一下連接器工具],按一下圖形,然後按一下另一個圖形。
請確認您不能建立適當的類別之間的連線。 比方說,如果您的關係專輯與演出者名稱,請確認您不能連結演出者演出者名稱。
請確認多樣性正確無誤。 比方說,驗證無法連接個人給一個以上的專案經理。
請確認則會顯示每個文字裝飾, 且:
您可以編輯它,除非您已設定是 UI 知道印表機驅動上的 [網域] 屬性的旗標。
當您編輯的屬性,[屬性] 視窗或裝飾時,其他的檢視會更新。
您第一次測試連接器之後,您可以調整一些它的屬性,並將新增一些更進階的功能。如需詳細資訊,請參閱 自訂及擴充網域指定的語言。
定義包含清單的圖形: 區間圖案
區間圖案包含一或多個清單項目。比方說,在 [音樂媒體櫃 DSL,您可以使用區間圖形來代表音樂專輯。在 [每一相簿中,沒有歌曲清單。
在達成這項特效 DSL 定義中的最簡單的方法,您可以定義一個網域類別容器,並對每個清單的一個網域類別。容器類別都會對應至 [區間] 圖形。
如需詳細資訊,請參閱 區間圖案的屬性。
若要定義區間圖案
建立容器的網域類別。按一下 [ 內嵌關聯性工具,按一下 [在模型中的根類別,然後按一下 DSL 定義圖表的空白部分。這會建立名為專輯的圖表範例中的網域類別。
或者內嵌的根類別中,您可以內嵌容器來區隔線所對應的網域類別中。
將屬性新增到網域名稱的類別,並設定其是項目名稱 [屬性] 視窗中的旗標。
建立清單項目的網域類別。按一下 [ 內嵌關聯性工具,按一下 [容器類別 (專輯),然後按一下 [圖表的空白部分。這會建立名為歌曲的圖表範例中的網域類別。
新增標題至類別,例如網域屬性並設定其是項目名稱旗標。
新增其他網域的內容。
新增您想要顯示的每個清單的另一個清單項目的網域類別。
若要調出幾種類型的清單中的項目,建立繼承自 list 類別的類別。請 list 類別的抽象,藉由設定其繼承修飾詞。
比方說,如果您想要依作曲者,而不是演出者的古典音樂時,您可以建立兩個歌曲、 ClassicalSong 和 NonClassicalSong 的子類別。
建立 [區間] 圖形。自 [ 區間圖案工具拖曳到 DSL 定義圖表中。
新增文字裝飾並設定它的名稱。
新增區間並設定它的名稱。
若要讓使用者隱藏清單區間、 區間 shape 類別上按一下滑鼠右鍵,指向新增,然後按一下 [ 展開/摺疊裝飾。在 [屬性] 視窗中,設定裝飾的位置。
按一下 圖表項目對應工具,按一下 [容器網域類別,然後按一下 [區間] 圖形。
選取網域類別之間] 圖形的圖表項目對應連結。在 DSL 詳細資料視窗:
按一下 裝飾 索引標籤。按一下 [裝飾名稱,然後選取適當的項目,在顯示屬性。請確定的裝飾名稱旁邊的核取記號。
按一下 區間對應 索引標籤。
按一下區間名稱。
在顯示項目集合的路徑,瀏覽至 [清單項目類別 (歌曲)。按一下下拉箭號,使用 [導覽] 工具。
在顯示屬性,選取應顯示在清單中的屬性。在範例中,這是標題。
注意事項 |
---|
使用裝飾圖中的 [路徑] 欄位及區間對應的欄位,您可以將網域類別之間的區間圖案更複雜的關聯。 |
若要定義用來建立圖形的工具
讓工具箱項目建立的網域類別的項目。
在 DSL 總管,展開 編輯器節點和其所有子節點。
以滑鼠右鍵按一下 [下的] 節點工具箱] 索引標籤 ,具有相同的名稱,為您的 DSL,例如 MusicLibrary。按一下 [ 中加入項目工具。
注意事項 如果您以滑鼠右鍵按一下工具 節點,就不會看到 新增項目工具。相反地,按一下 [上方] 節點。
在所選取的新項目工具與 [屬性] 視窗中,設定類別到您最近新增的網域類別。
設定標題 和 工具提示。
設定工具箱圖示會出現在工具箱] 中的圖示。您可以將它設定為新的圖示或圖示已經用於另一種工具。
若要建立新的圖示,開啟中的 Dsl\Resources 方案總管] 中。複製並貼上其中一個現有的項目工具。BMP 檔案中。重新命名的貼上的複本,然後再連按兩下即可進行編輯。
返回 DSL 定義圖表、 選取工具,然後在 [屬性] 視窗中按一下 [...] 在 工具箱圖示。在選取點陣圖對話方塊方塊中,從下拉式功能表中選取 BMP 檔。
若要測試區間圖案
按一下 [轉換所有的範本在工具列上的 [方案總管] 中,以產生 DSL 設計工具的程式碼。
建置並執行 DSL。 按下 F5 或 CTRL + F5 以執行新執行個體的Visual Studio在實驗性質的模式。實驗性的執行個體中Visual Studio、 開啟或建立您的 DSL 副檔名的檔案。
請確認此工具會顯示工具箱] 上。
將工具拖曳到模型圖表。建立圖形。
請確認項目的名稱會出現,並自動地被設定為預設值。
新的形狀的標頭上按一下滑鼠右鍵,然後按一下 [新增您的清單項目]。 在範例中,指令是 [新增歌曲]。
請確認項目出現在清單中,且其最新的名稱。
按一下其中一個清單項目,,然後檢查 [屬性] 視窗中的色彩。您應該會看到清單項目的內容。
開啟 [檔案總管的語言。請確認您可以看到與清單項目節點內的容器節點。
您第一次測試區間圖案之後,您可以調整其部分屬性並新增一些更進階的功能。如需詳細資訊,請參閱 自訂及擴充網域指定的語言。
顯示在區間中的參考連結
通常,您在區間中顯示的項目是由 [區間] 圖形所表示之項目的子系。但是,某些情況下,您要顯示項目連結到它參考的關聯性。
比方說,我們可以在顯示清單連結至 [專輯演出者的 AlbumShape 中新增第二個的區間。
如此一來,區間應該會顯示該連結,而非參考的項目。這是因為當使用者在區間中選取的項目,並按下 DELETE,您會想要刪除的連結不是參考的項目。
不過,您可以有參考的項目會出現在區間名稱。
下列程序會假設您已經建立網域類別、 參考關聯性、 [區間] 圖形中,以及圖表項目對應,如先前所述,本章節中。
若要顯示區間中的 [參考] 連結
加入 [區間] 圖形中的區間。DSL 定義在圖表上區間 shape 類別上按一下滑鼠右鍵,指到新增,然後按一下 [ 區間。
設定顯示項目集合的路徑來瀏覽的連結,而不是它的目標項目。按一下下拉功能表,使用樹狀檢視中選取參考關係,而不是它的目標。在範例中,關聯性會是 ArtistAppearedOnAlbums。
設定來顯示屬性的路徑來瀏覽的連結目標項目。在範例中,這位演出者。
設定顯示屬性 ,目標項目的適當的屬性,例如命名。
轉換所有範本、 建置和執行 DSL,並開啟測試模型。
在模型圖表中,建立適當的類別] 圖形的、 設定它們的名稱,然後建立它們之間的連結。在 [區間] 圖形中,應該會出現連結的項目名稱。
區間圖案中,選取 [連結] 或 [項目。連結和項目都應該會消失。
定義在另一個圖案的界限上的連接埠
連接埠是位在另一個圖案的界限的圖形。
連接埠也可用來提供固定的連接點上的使用者可繪製連接器的另一個圖形。如此一來,您可以讓連接埠 」 圖形變成透明。
若要查看使用連接埠的範例,請選取元件圖範本,當您建立新的 DSL 方案。本範例顯示當您定義的連接埠時,您可以考慮的重點:
沒有代表的連接埠,容器的網域類別Component。
沒有網域類別,表示連接埠。在範例中,這是ComponentPort。
沒有從容器的網域類別到連接埠的網域類別內嵌關聯性。如需詳細資訊,請參閱定義網域類別。
如果您想要不同類型的混在同一個容器上的連接埠,您可以建立連接埠的網域類別的子的類別。在範例中, InPort和OutPort繼承自ComponentPort。
容器的網域類別都可以對應至任何類型的圖形。在範例中,這是ComponentShape。如需詳細資訊,請參閱定義圖形。
連接埠的網域等級會對應至連接埠的圖形。您可以將對應至不同的連接埠圖形類別,衍生的類別或基底的類別對應至一個連接埠圖形類別。
在其他方面,連接埠圖形的行為方式如所述定義圖形。
如需詳細資訊,請參閱 通訊埠圖案的屬性。
定義 DSL 都區隔線
區隔線是圖表的水平或垂直資料分割。每個區隔線對應至模型元素。您的 DSL 定義需要一個網域類別的區隔線項目。
使用區隔線建立 DSL 的最佳方式是建立新的 DSL 方案,然後選擇 [工作流程] 方案範本。在 DSL 定義中,動作項目類別是網域類別對應至 [區隔線。重新命名此因應對策和其他類別,以符合您的專案。
若要新增的類別,將會變成 [區隔線內的圖形,嵌入之間建立關聯性的區隔線類別和新的類別。使用者可以將項目從一個區隔線拖曳到另一個,但每個項目一定會在特定的區隔線。在 [工作流程] 方案範本中,FlowElement 會是區隔線類別的子系。
若要新增的類別,將顯示為獨立的區隔線圖形,嵌入之間建立關聯性的根類別和新的類別。使用者可以將這些圖形放在圖表上,包括跨界限的區隔線] 和 [外部區隔線的任意位置。在 [工作流程] 方案範本中,註解會是根類別的子系。
如需詳細資訊,請參閱 泳道的屬性。
加入屬性的型別
網域列舉型別和常值
網域的列舉型別是一個具有數個常值型別。
若要加入網域的列舉型別,以滑鼠右鍵按一下在模型的根 DSL 總管 ,然後按一下 [ 加入新的網域列舉。項目會出現在 DSL 總管 下 網域類型節點。這個項目沒有出現在圖表上。
要加入網域的列舉型別列舉常值,請以滑鼠右鍵按一下網域列舉型別,在 DSL 總管 ,然後按一下 [ 新增新列舉常。
根據預設,屬性具有列舉型別可以將列舉型別一次只能有一個值。如果您希望使用者與程式設計者,才能夠設定值的任何組合設定"位元欄位-" IsFlags 列舉型別的屬性。
外部型別
如果找不到型別,設定網域屬性型別,當您想要型別下拉式選單] 清單中,您可以新增外部的型別。例如,您可以在其中新增System.Drawing.Color到清單的型別。
若要新增一個型別,在 DSL 總管] 中,模型的根目錄上按右鍵,然後按一下加入新的外部類型。在 [屬性] 視窗中,請將名稱設定為Color和命名空間,以System.Drawing。這種類型都會出現在 DSL 總管] 的下方網域類型。每當您設定網域屬性的型別時,您可以選擇它。
自訂 DSL
使用本主題所述的技巧,您可以快速地建立 DSL 與圖表化的配標記法,可讀取的 XML 格式,來產生程式碼和其他成品所需的基本工具。
有兩種方法可以擴充 DSL 定義:
藉由使用 DSL 定義的更多的功能來微調 DSL。例如,您可以將單一的連接器工具] 可以建立許多不同類型連接器],而且您可以控制哪些刪除一個項目也會刪除相關的項目規則。這些技術大多透過在 DSL 定義中,設定值,有些需要幾行程式碼。
如需詳細資訊,請參閱 自訂及擴充網域指定的語言。
延伸模組化工具,藉由使用程式碼,以取得更多進階的效果。例如,您可以建立功能表命令,可以變更該模型,而您可以建立將兩個以上的 Dsl 整合的工具。VMSDK 特別為了讓您輕易地整合您的擴充功能從 DSL 定義產生的程式碼。如需詳細資訊,請參閱 撰寫程式碼來自訂網域指定的語言。
變更 DSL 定義
當您建立的任何項目在 DSL 定義時,會自動設定許多的預設值。已設定之後,您可以變更它們。這樣可以簡化開發 DSL,同時允許強大的自訂設定。
比方說,當您將圖形對應至項目時,對應的父項目的路徑是自動根據設定的網域類別內嵌的關係。不過,如果您稍後變更內嵌的關聯性,父項目的路徑不能自動。
因此您應該要知道當您變更一些關聯,在您的 DSL 定義,不是什麼罕見的錯誤當您儲存其定義,或當您轉換所有範本時。這些錯誤多半都很容易修正。連按兩下 [錯誤報告以查看錯誤的位置。
疑難排解
下表列出了一些最常見設計 DSL、 加上建議方案時遇到的問題。更多的建議是在視覺化工具 Extensibililty 論壇。
問題 |
建議 |
---|---|
DSL 定義檔中,我所做的變更會有任何作用。 |
按一下 轉換所有的範本在 [方案總管] 中,然後再重建方案上方的工具列。 |
圖形顯示的裝飾,而不是屬性值的名稱。 |
設定裝飾的對應。DSL 定義圖表中,按一下 [圖表項目地圖上,也就是灰色的線條,網域類別和 shape 類別之間]。 開啟 DSL 詳細資料視窗。如果您看不見它,在 [檢視] 功能表上,指向其他視窗,然後按一下 DSL 詳細資料。 按一下 裝飾對應 索引標籤。選取裝飾名稱。請確定已核取它旁邊的方塊。在顯示屬性,選取 [網域屬性的名稱。 如需詳細資訊,請參閱在圖表上的圖形。 |
在 DSL 總管] 中,我無法新增至集合。比方說,當我以滑鼠右鍵按一下工具時,沒有 「 新增工具 」 命令在功能表中。 在 [我的 DSL 總管] 中,我無法新增至清單的項目。 |
以滑鼠右鍵按一下您想的節點上方的項目。您要新增至清單時,[新增] 命令時不在 [清單] 節點中,而其擁有者。 |
我建立了網域類別,但我無法建立執行個體語言總管] 中。 |
除了根目錄之外的每個網域類別必須是內嵌的關聯性的目標。 |
在 [我的 DSL 總管] 中,項目會顯示用它們的型別名稱。 |
在 DSL 定義中,選取 [網域類別的屬性,然後在 [屬性] 視窗中,將是項目名稱設為 true。 |
我 DSL 永遠在 XML 編輯器中開啟。 |
這種現象,因為發生錯誤時正在讀取檔案。不過,即使您修正該錯誤後,明確地必須重設編輯器] 為您的 DSL 設計工具。 以滑鼠右鍵按一下專案項目,請按一下開啟 ,然後選取 YourLanguage設計工具 (預設值)。 |
我變更的組件名稱之後,就不會出現工具箱] 中的 [我的 DSL。 |
檢查並更新DslPackage\GeneratedCode\Package.tt如需詳細資訊,請參閱HOW TO:變更網域指定的語言命名空間。 |
我的 DSL 的工具箱不會顯示,但是我維持不變的組件名稱。 或者,報告無法載入擴充功能時,出現訊息方塊。 |
重設實驗性的執行個體,並重建您的方案。
|