共用方式為


撰寫程式碼來自訂特定領域語言

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

撰寫 DSL 程式碼的內容

您可在多種情況下撰寫適用於 DSL 的程式碼:

記憶體內部存放區

您在 DslDefinition.dsl 中定義的類別執行個體,會保存在稱為記憶體內部存放區 (IMS) 或存放區的資料結構中。 您在 DSL 中定義的類別一律會採用存放區作為建構函式的引數。 例如,如果您的 DSL 定義名為 Example 的類別:

Example element = new Example (theStore);

將物件保留在存放區中 (而非像一般物件一樣) 提供了幾個好處。

  • Transactions。 您可以將一系列相關變更分組至異動中:

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))
    {
      // make several changes to Store elements here
      t.Commit();
    }
    

    如果變更期間出現例外狀況,導致最終 Commit() 未執行,則存放區會重設為先前的狀態。 此方法可協助您確定錯誤不會讓模型處於不一致的狀態。 如需詳細資訊,請參閱在程式碼中巡覽和更新模型

  • 二進位關聯性。 如果定義兩個類別之間的關聯性,則兩端的執行個體都會有巡覽至另一端的屬性。 兩端一律會同步處理。 例如,如果您以名為 ParentsChildren 的角色定義父代關聯性,則可以撰寫:

    John.Children.Add(Mary)

    以下兩個運算式現在為 true:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    透過撰寫下列內容,也能達到相同效果:

    Mary.Parents.Add(John)

    如需詳細資訊,請參閱在程式碼中巡覽和更新模型

  • 規則與事件。 您可以定義在執行指定變更時觸發的規則。 例如,使用規則可讓圖表上的圖形與其呈現的模型元素保持同步。 如需詳細資訊,請參閱回應及傳播變更

  • 序列化。 存放區提供將其所包含物件序列化至檔案的標準方式。 您可以自訂序列化和還原序列化的規則。 如需詳細資訊,請參閱自訂檔案儲存體和 XML 序列化