共用方式為


撰寫程式碼以自訂網域特定語言

本節說明如何使用自訂程式碼以網域特定語言 (DSL) 存取、修改或建立模型。

撰寫 DSL 程式碼的內容

您可以在多個情境中撰寫與 DSL 協作的程式碼:

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 序列化