MDSF:DSL(Domain Specific Language)介绍
前面介紹過(guò)模型 驅(qū)動(dòng)開(kāi)發(fā)(MDD) 、軟件 工廠(Software factory) 、特定領(lǐng) 域建模 DSM(Domain Specific) 等都是高抽象的開(kāi)發(fā)方法,這些方法使用的語(yǔ)言都是特定領(lǐng)域語(yǔ)言(DSL)。相比于通用目的語(yǔ)言 (C#/C++/JAVA/Delphi等)而言,DSL是一種為了特定任務(wù)而設(shè)計(jì)的開(kāi)發(fā)語(yǔ)言,例如SQL是一種專(zhuān)門(mén)處理數(shù)據(jù)庫(kù)的語(yǔ)言,本篇將介 紹一下DSL。
一種語(yǔ)言
我們熟知的編程語(yǔ)言(如C#、Ruby等)是一種通用語(yǔ)言,MDA基于UML語(yǔ)言,而模型 驅(qū)動(dòng)開(kāi)發(fā)(MDD) 基于DSL。DSL是一種基于特定領(lǐng)域的語(yǔ)言,它使工作更貼近于客戶(hù)的理解,而不是實(shí)現(xiàn)本身, 這 樣有利于開(kāi)發(fā)過(guò)程中,所有參與人員使用同一種語(yǔ)言進(jìn)行交流。
DSML
DSML是 特定領(lǐng)域模型語(yǔ)言(domain-specific modelling language),之前介紹的MetaEdit+使用的DSM 方 法中使用的就是DSML,它是一種可以用來(lái)構(gòu)建圖形模型的一種DSL,DSM的GOPPRR 就 是一個(gè)用來(lái)構(gòu)建DSML語(yǔ)言的元模型。
DSL涉及內(nèi)容
- 問(wèn)題域、問(wèn)題空間
- 語(yǔ)法、語(yǔ)義
- 案例、方法、工具
DSL架構(gòu)
- DSL腳本(DSL Script):每一個(gè)DSL的核心都是一個(gè)域模型,它定義了這一語(yǔ)言所代表的各種概念,這些概念的屬性,以 及它們之間的關(guān)系
- 在問(wèn)題域中用于構(gòu)建、配置或者其他用途的一種語(yǔ)言
- 可以是文本,也可以是圖形,或者兩者混合使用
- ?圖形語(yǔ)言不只是圖表,否則使用Visio之類(lèi)的畫(huà)圖軟件就行了,它實(shí)際上是要?jiǎng)?chuàng)建模型,這個(gè)模型要能夠從概念上描繪你正在創(chuàng)建的系統(tǒng),并對(duì)其內(nèi) 容進(jìn)行圖表化的表示。一個(gè)模型可以同時(shí)由多個(gè)圖表來(lái)表示,每個(gè)圖表表示模型的某個(gè)方面
- ?文本語(yǔ)言用戶(hù)輸入,可以快速的打字。
- ?文本語(yǔ)言的優(yōu)勢(shì)在于可以進(jìn)行比較和合并,而圖形表達(dá)式可以更容易的看出內(nèi)容之間的關(guān)聯(lián)。
- ?相對(duì)來(lái)說(shuō),文本語(yǔ)言比圖形復(fù)雜
- 語(yǔ)義模型(Semantic Model)
- DSL腳本的一種內(nèi)存完整表示
- 有時(shí)候這個(gè)就是抽象語(yǔ)法樹(shù)(AST)
- 分離Parse和Generate
- 生成代碼(Generated Code):DSL的一個(gè)最重要的應(yīng)用是用來(lái)生產(chǎn)簡(jiǎn)單的文本形式的工件,例如源代碼、數(shù)據(jù)庫(kù)腳本
- DSL腳本的一種可執(zhí)行表示
- 解釋語(yǔ)義模型
DSL應(yīng)用的優(yōu)點(diǎn)
樣式(Styles)
之前在信 息系統(tǒng)開(kāi)發(fā)平臺(tái)OpenExpressApp:【OpenTest】 之 如何實(shí)現(xiàn)自動(dòng)化測(cè)試框架 介紹了在OEA上使用 Ruby語(yǔ)法實(shí)現(xiàn)的一個(gè)自動(dòng)化測(cè)試語(yǔ)言,這個(gè)就屬于內(nèi)部DSL。而在OpenExpressApp 對(duì)建模支持的初步計(jì)劃 中介紹的MetaModelEngie屬于外部DSL。
外部DSL可以擺脫內(nèi)部DSL寄宿語(yǔ)言的限制,可以重新設(shè)計(jì)一種新的語(yǔ)言,但是增加了學(xué)習(xí)新的語(yǔ)言的學(xué)習(xí)成本,并且需要工具的支持。
設(shè)計(jì)DSL
為了降低風(fēng)險(xiǎn),我們并不是馬上就從頭開(kāi)始開(kāi)發(fā)框架及其 DSL ,而是應(yīng)該從現(xiàn)有的可以在某些應(yīng)用中使用的代碼開(kāi)始,逐步的對(duì)其進(jìn)行參數(shù)化,逐步的發(fā)現(xiàn)那些在不同應(yīng)用中變化的部分,然后使這些部分 依賴(lài)于DSL。
自上而下的方法傾向于快速建立一個(gè)完整且自包含的模型, 具有更長(zhǎng)遠(yuǎn)的考慮,有助于保證結(jié)構(gòu)的一致性 。但是從另一方面看,這種方法容易導(dǎo)致在概念層設(shè)計(jì)出很復(fù)雜的模型,并且該模型難于實(shí)現(xiàn)。因此在 實(shí)際應(yīng)用中,將自上而下和自下而上兩種方法交替使用會(huì)更有效。 采 用漸進(jìn)的方式可以避免早期投入過(guò)大風(fēng)險(xiǎn),但是需要定期進(jìn)行一致性檢查。
在《 Visual Studio DSL工具特定領(lǐng)域開(kāi)發(fā)指南 》書(shū)中對(duì)設(shè)計(jì)DSL做了如下步驟:
應(yīng)用場(chǎng)景
? ......
書(shū)籍
Martin Fowler花了幾年時(shí)間寫(xiě)了一本DSL的書(shū)籍《Domain Specific Languages 》, 我還沒(méi)有看,感興趣的可以先看看它在網(wǎng)站上寫(xiě)的系列文章 Domain Specific Languages
?
Best Practices for DSLs and Model-Driven Development?
讀書(shū)筆 記:Visual Studio DSL工具特定領(lǐng)域開(kāi)發(fā)指南
DSL 的演進(jìn)
推薦:你 可能需要的在線電子書(shū)
轉(zhuǎn)載于:https://www.cnblogs.com/yefengmeander/archive/2011/01/06/2888038.html
總結(jié)
以上是生活随笔為你收集整理的MDSF:DSL(Domain Specific Language)介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 杭电多校第三场-H-Game
- 下一篇: fgdsafhak