本節說明如何使用自訂程式碼以網域特定語言 (DSL) 存取、修改或建立模型。
撰寫 DSL 程式碼的內容
您可以在多個情境中撰寫與 DSL 協作的程式碼:
自訂命令。 您可以建立指令,使用者可以透過在圖表上按一下滑鼠右鍵來呼叫該指令,並可以修改模型。 如需詳細資訊,請參閱 如何:將命令新增至快捷功能表。
驗證。 您可以撰寫程式碼來驗證模型是否處於正確狀態。 如需詳細資訊,請參閱 Domain-Specific 語言的驗證。
覆寫預設行為。 您可以修改從 DslDefinition.dsl 產生的程式碼的許多層面。 如需詳細資訊,請參閱 覆寫和擴充產生的類別。
文字轉換。 您可以撰寫文字範本,其中包含存取模型並產生文字檔的程式碼,例如產生程式代碼。 如需詳細資訊,請參閱 從 Domain-Specific 語言產生程式碼。
其他 Visual Studio 延伸模組。 您可以撰寫個別的 VSIX 延伸模組來讀取和修改模型。 如需詳細資訊,請參閱 如何:從程式程式碼中的檔案開啟模型
In-Memory 店
您在 DslDefinition.dsl 中定義的類別實例會保留在稱為 In-Memory 存放區 (IMS) 或 存放區的資料結構中。 您在 DSL 中定義的類別一律會採用 Store 作為建構函式的引數。 例如,如果您的 DSL 定義了一個名為 Example 的類別:
Example element = new Example (theStore);
將物件保留在市集中,而不是像一般物件一樣,提供數個優點。
交易。 您可以將一系列相關變更分組到交易中:
using (Transaction t = store.TransactionManager.BeginTransaction("updates")) { // make several changes to Store elements here t.Commit(); }如果在進行變更時發生例外狀況,導致最終的
Commit()無法執行,則存放區會重設為先前的狀態。 此方法可協助您確保錯誤不會讓模型處於不一致的狀態。 如需詳細資訊,請參閱 在 程式代碼中導覽和更新模型。二元關係。 如果您定義兩個類別之間的關聯性,則兩端的實例具有導覽至另一端的屬性。 兩端始終是同步的。 例如,如果您定義具有名為「父母」和「子女」角色的親子關係,您可以寫:
John.Children.Add(Mary)下列兩個運算式現在都成立:
John.Children.Contains(Mary)Mary.Parents.Contains(John)您也可以透過編寫來達到相同的效果:
Mary.Parents.Add(John)如需詳細資訊,請參閱 在 程式代碼中導覽和更新模型。
規則和事件。 您可以定義規則,這些規則會在進行指定變更時觸發。 例如,規則用於使圖表上的形狀與它們呈現的模型元素保持最新狀態。 如需詳細資訊,請參閱 回應和傳播變更。
序列化。 儲存庫提供標準方法,可將其中包含的物件序列化為檔案。 您可以自訂序列化和還原序列化的規則。 如需相關資訊,請參閱 自訂檔案儲存體和 XML 序列化。