http://www.zhoujingen.cn/blog/2748.html
DSML是 特定領域模型語言(domain-specific modelling language),以前介紹的MetaEdit+使用的DSM方法中使用的就是DSML,它是一種能夠用來構建圖形模型的一種DSL,DSM的GOPPRR就是一個用來構建DSML語言的元模型。html
DSL架構
![](http://static.javashuo.com/static/loading.gif)
- DSL腳本(DSL Script):每個DSL的核心都是一個域模型,它定義了這一語言所表明的各類概念,這些概念的屬性,以及它們之間的關係
- 在問題域中用於構建、配置或者其餘用途的一種語言
- 能夠是文本,也能夠是圖形,或者二者混合使用
- 圖形語言不僅是圖表,不然使用Visio之類的畫圖軟件就好了,它其實是要建立模型,這個模型要可以從概念上描繪你正在建立的系統,並對其內容進行圖表化的表示。一個模型能夠同時由多個圖表來表示,每一個圖表表示模型的某個方面
- 文本語言用戶輸入,能夠快速的打字。
- 文本語言的優點在於能夠進行比較和合並,而圖形表達式能夠更容易的看出內容之間的關聯。
- 相對來講,文本語言比圖形複雜
- 語義模型(Semantic Model)
- DSL腳本的一種內存完整表示
- 有時候這個就是抽象語法樹(AST)
- 分離Parse和Generate
- 生成代碼(Generated Code):DSL的一個最重要的應用是用來生產簡單的文本形式的工件,例如源代碼、數據庫腳本
DSL應用的優勢
- 高級別的重用:若是僅適用通用編程語言,則每次只能解決一個問題,但若是應用特定領域開發方法設計並實現一些特殊語言,每一個特殊語言能夠高效地解決一類類似的問題
- 使用DSL的軟件架構能夠跨接軟件工程過程各階段之間的鴻溝,特別是經過代碼生成能夠很好的進行設計和實現階段的銜接
- 讓領域專家參與開發過程,不單單是需求階段,架構階段也須要參與
- 經過在問題空間工做,可讓不熟悉如何實現技術的人,包括商業人士,也可以更瞭解模型
- 使用DSL表達的模型,能夠在問題空間這個較高的抽象層次進行驗證,這意味着能夠在開發週期的更早期發現由於理解和表述而形成的錯誤。
- 一個模型中具有了重要的業務知識,將解決方案從一種技術遷移到另外一種技術,或在同一技術的不一樣版本之間遷移,就變的相對容易。通常經過適當修改生成器或解釋器就能夠作到。