開發一個 DSL 專案,本質上是在建構幾個核心組件:領域模型、圖形符號、工具箱、模型瀏覽器、屬性視窗、驗證機制、序列化與部署。打開 DslDefinition.dsl 設計介面,中央文件區分為左右兩個「泳道」:
有趣的是,我們使用 DSL 工具本身來建立 DSL,這些描述性定義本身也是用 DSL 語法表達的。

領域模型與圖形符號之間透過連接器綁定;領域類別之間透過關聯關係連接。
每個 DSL 的核心都是一個領域模型,它定義了語言所代表的概念、屬性與關聯。在模型驅動開發中,我們將業務抽象為模型,再用 DSL 語法描述——只要擁有領域模型,工具箱、圖形呈現等皆可自動衍生。
任何 DSL 有且只有一個 根領域類別,它對應整個圖表文件的概念。預設專案範本會自動建立 ExampleModel(根類別)與對應的 ExampleShape(圖形)。
相對於根類別,ExampleElement 才是真正代表業務實體的模型類別,預設包含一個 Name 字串屬性。
表示「整體-部分」的擁有關係。範例中的 ExampleModelHasElements 將 ExampleModel 與 ExampleElement 連結:

Elements,型別為集合,重數 0..*,表示可包含零或多個 ElementExampleModel,型別為單一參考,重數 1..1,表示每個 Element 必須且只能屬於一個 Model簡單說:執行時期,一個 Model 可包含多個 Element,每個 Element 只屬於一個 Model。
表示「關聯/引用」關係,通常在圖表上以連線呈現。範例中的 ExampleElementReferencesTargets 連接兩個 ExampleElement:

ExampleElement0..*:一個 Element 可與多個其他 Element 建立參考Allows Duplicates = TrueDSL 會為每個領域關聯生成獨立類別,模型中的每條關聯都是該類別的實例。透過屬性視窗的 Code 區段可控制生成策略:
GeneratesDoubleDerived = True:產生雙層類別結構。基底類別(如 ExampleModelHasElementsBase)包含完整實作;衍生類別(ExampleModelHasElements)為 partial class,可覆寫方法注入自訂邏輯

易混淆處:



消化這些核心概念,下一步我們將進入實作階段,建立具體的狀態機 DSL 模型。