領域特定開發 是解決重複性問題的方法論:將問題中固定不變的部分一次性解決(封裝為框架、平台、解譯器或 API),將頻繁變化的部分以特定語言表達,建立模型或運算式插入固定架構中。軟體方案中,固定部分提供擴充性與高度抽象復用;特定領域語言專責變化部分,使整體方案具備實務適用性。
DSL 是專門描述特定專業領域內涵的語言。其實並不陌生:HTML、SQL 皆屬 DSL 範疇。
https://www.jetbrains.com/mps/ 透過平台定義規則直接生成程式碼https://www.metacase.com/ 圖形化 DSL 工具https://msdn.microsoft.com/zh-cn/data/ee460940(en-us).aspx 圖形化 DSL 語言,由 "M" 語言、Quadrant 工具、關聯式儲存組成。與 DSL Toolkit 有所不同,參考:https://blogs.msdn.com/keith_short/archive/2008/11/06/oslo-and-the-dsl-toolkit.aspxhttps://www.eclipse.org/modeling/gmf/ 利用 EMF 與 GMF 技術產生領域特定建模工具




Visual Studio DSL Tools 是微軟針對領域特定開發設計的工具組,包含於 Visual Studio SDK(VS2010 將獨立安裝)。它讓開發者自行設計專屬圖形化工具,內建:
實證案例:VS 現有的類別設計器、分散式系統設計器、LinqToSql 設計器、Entity Framework 設計器、VS2010 UML Modeling Project,皆基於 VS.NET DSL 開發。
DSL 與 UML 根本不同:UML 描述問題,DSL 解決問題。若你在專案中重複撰寫相似程式碼,且這些程式碼可抽離為生成式樣板,即可考慮引入 DSL。
對比傳統資料庫導向代碼生成器:DSL 站在領域專家高度而非軟體開發專家視角,將業務中繼資料抽象配置,直接生成目標方案。傳統生成器面向開發人員,在大型系統中往往力有未逮。
「簡單問題的解決應該簡單化,複雜問題的解決應該可能化」—— Alan Kay (Smalltalk 創始人)
第一階段:透過 DSL Tools Lab 案例,完成狀態機 DSL 應用,涵蓋 T4 程式碼生成、DSL 部署。

第二階段:開發實務可用的完整開發工具,深入 DSL 設計開發細節與 VSX 進階應用。

旅程正式啟程,下一篇進入環境建置與專案啟動。