首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Visual Studio DSL 入門 1:什麼是領域特定開發與 DSL

     編輯:關於.NET

領域特定開發 是解決重複性問題的方法論:將問題中固定不變的部分一次性解決(封裝為框架、平台、解譯器或 API),將頻繁變化的部分以特定語言表達,建立模型或運算式插入固定架構中。軟體方案中,固定部分提供擴充性與高度抽象復用;特定領域語言專責變化部分,使整體方案具備實務適用性。

一、特定領域語言 (DSL) 簡介

DSL 是專門描述特定專業領域內涵的語言。其實並不陌生:HTML、SQL 皆屬 DSL 範疇。

其他知名 DSL 平台

  • MPS (JetBrains):https://www.jetbrains.com/mps/ 透過平台定義規則直接生成程式碼
  • MetaEdit+:https://www.metacase.com/ 圖形化 DSL 工具
  • Oslo (Microsoft):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.aspx
  • GMF/EMF (Eclipse):https://www.eclipse.org/modeling/gmf/ 利用 EMF 與 GMF 技術產生領域特定建模工具

MPS 介面

MetaEdit+ 介面

Oslo 架構

Oslo 元件

GMF/EMF 介面

二、什麼是 Visual Studio DSL

Visual Studio DSL Tools 是微軟針對領域特定開發設計的工具組,包含於 Visual Studio SDK(VS2010 將獨立安裝)。它讓開發者自行設計專屬圖形化工具,內建:

  • 模型支援與模型-圖形映射
  • 模型驗證、規則、交易機制
  • VSX 整合擴充:工具列、選單等
  • 與 T4 結合實現程式碼生成

實證案例:VS 現有的類別設計器、分散式系統設計器、LinqToSql 設計器、Entity Framework 設計器、VS2010 UML Modeling Project,皆基於 VS.NET DSL 開發。

三、為什麼使用 DSL 工具

DSL 與 UML 根本不同:UML 描述問題,DSL 解決問題。若你在專案中重複撰寫相似程式碼,且這些程式碼可抽離為生成式樣板,即可考慮引入 DSL。

對比傳統資料庫導向代碼生成器:DSL 站在領域專家高度而非軟體開發專家視角,將業務中繼資料抽象配置,直接生成目標方案。傳統生成器面向開發人員,在大型系統中往往力有未逮。

四、採用 DSL 的開發流程定制

  1. 萃取固定部分:封裝至通用架構/平台(如 Enterprise Library 封裝資料存取、日誌、驗證、快取)
  2. 識別變化點並設計 DSL:發現變化部分其實相對「固定」(基於實體模型、服務模型),抽象中繼資料透過 DSL 配置,直接生成至目標方案

五、DSL 的八大優勢

  1. 大幅提升生產力:生成遠快於手工複製貼上
  2. 強化系統規範性:統一實作風格,減少個人風格差異
  3. 降低錯誤機率:生成邏輯經驗證,減少手動編碼錯誤
  4. 非開發人員可讀:顧問、售前可直接理解模型,提前介入需求溝通
  5. 高抽象層級驗證:早期發現架構問題
  6. 單一模型多技術實作:同一模型可選 EF/NHibernate、ASP.NET MVC/Silverlight/WPF 等不同技術棧
  7. 生成範圍不限程式碼:建置腳本、文件、計畫等皆可生成
  8. 技術遷移容易:修改生成器即可切換技術棧,模型中繼資料穩定

六、前提與避坑指南

  • 建置成本:開發 DSL、抽象整合需要投入
  • 非萬能藥:如入口網站固定部分少、可定制少,不適合強行使用,否則陷入「定制化陷阱」
  • 保留彈性:不可能全生成,必須提供擴充點保證生成碼可擴充
  • 實作規範化:實作方式過多會導致 DSL 過度複雜,有時需捨棄部分需求
「簡單問題的解決應該簡單化,複雜問題的解決應該可能化」—— Alan Kay (Smalltalk 創始人)

七、系列規劃預覽

第一階段:透過 DSL Tools Lab 案例,完成狀態機 DSL 應用,涵蓋 T4 程式碼生成、DSL 部署。

階段一成果預覽

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

階段二成果預覽

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved