承接系列首篇,我們正式進入 DSL 入門實戰系列。雖然 VS.NET DSL 在國內應用較少,但希望本系列能為技術選型提供參考,幫助開發者建立領域特定語言的實作視野。
一、開發環境準備
- 基礎環境:Visual Studio 2008 SP1(系列撰寫時 VS2010 尚未正式發布)
- VSX SDK:DSL Tools 包含於 Visual Studio SDK 1.1 中
下載:https://msdn.microsoft.com/zh-cn/vsx/default(en-us).aspx
- T4 編輯器:輔助 T4 範本編寫,VS 內建不支援 T4 語法高亮
下載:https://www.t4editor.net/
二、案例需求:簡易狀態機模型
本系列將建構類似 UML 狀態圖 的 DSL,核心概念:
狀態
- 名稱:區分狀態的字串,可為匿名
- 分類:初始狀態、結束狀態
- 進入/退出動作:狀態轉換時觸發的操作
- 內部轉移:不改變狀態的轉移
- 子狀態:巢狀結構,支援非連續(循序)或並行(同時)子狀態
- 延遲事件:未在當前狀態處理,排隊等待其他狀態處理的事件
轉移
- 來源狀態:轉移發起的狀態
- 事件觸發器:滿足觸發條件的事件,有名稱者為顯式觸發,無名稱者為自動/隱式轉移
- 守衛條件:布林運算式,接收事件時求值,True 才觸發轉移
- 動作:不可分割的計算過程,可直接或間接作用於物件
- 目標狀態:轉移完成後進入的狀態(可選)
- 參數:事件觸發器方法的參數
關鍵提醒:模型與中繼資料皆源自需求描述,務必先釐清需求再動手建模。
三、系列開發規劃
- 建立簡單 DSL 模型專案
- 建構中繼資料模型:StateMachine、State、Transition(簡化:暫不處理子狀態等複雜結構)
- 建立對應圖形呈現
- 規範模型與圖表:新增規則與驗證
- 在 VS 實驗環境測試
- 改善使用者介面體驗
- 針對特定框架實作程式碼生成
- 建立安裝程式部署 DSL 專案
四、參考資源
- DSL Tools Lab:
https://code.msdn.microsoft.com/DSLToolsLab 系列教學
- 台灣微軟 Paul 的 DSL 影音教學:
https://msdn.microsoft.com/zh-tw/vstudio/cc963628.aspx
- 專書:《Domain-Specific Development with Visual Studio DSL Tools》(有中文譯本)
- VSX 進階系列:
https://dotneteers.net/blogs/divedeeper/default.aspx?PageIndex=1
準備就緒,下一篇將啟動專案建立與基礎模型建構。