日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

MDSF:DSL(Domain Specific Language)介绍

發(fā)布時(shí)間:2025/10/17 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MDSF:DSL(Domain Specific Language)介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前面介紹過模型 驅(qū)動開發(fā)(MDD) 、軟件 工廠(Software factory) 、特定領(lǐng) 域建模 DSM(Domain Specific) 等都是高抽象的開發(fā)方法,這些方法使用的語言都是特定領(lǐng)域語言(DSL)。相比于通用目的語言 (C#/C++/JAVA/Delphi等)而言,DSL是一種為了特定任務(wù)而設(shè)計(jì)的開發(fā)語言,例如SQL是一種專門處理數(shù)據(jù)庫的語言,本篇將介 紹一下DSL。

一種語言

  我們熟知的編程語言(如C#、Ruby等)是一種通用語言,MDA基于UML語言,而模型 驅(qū)動開發(fā)(MDD) 基于DSL。DSL是一種基于特定領(lǐng)域的語言,它使工作更貼近于客戶的理解,而不是實(shí)現(xiàn)本身, 這 樣有利于開發(fā)過程中,所有參與人員使用同一種語言進(jìn)行交流。

DSML

  DSML是 特定領(lǐng)域模型語言(domain-specific modelling language),之前介紹的MetaEdit+使用的DSM 方 法中使用的就是DSML,它是一種可以用來構(gòu)建圖形模型的一種DSL,DSM的GOPPRR 就 是一個(gè)用來構(gòu)建DSML語言的元模型。

DSL涉及內(nèi)容

  • 問題域、問題空間
  • 語法、語義
  • 案例、方法、工具

DSL架構(gòu)

  • DSL腳本(DSL Script):每一個(gè)DSL的核心都是一個(gè)域模型,它定義了這一語言所代表的各種概念,這些概念的屬性,以 及它們之間的關(guān)系
    • 在問題域中用于構(gòu)建、配置或者其他用途的一種語言
    • 可以是文本,也可以是圖形,或者兩者混合使用
      • ?圖形語言不只是圖表,否則使用Visio之類的畫圖軟件就行了,它實(shí)際上是要創(chuàng)建模型,這個(gè)模型要能夠從概念上描繪你正在創(chuàng)建的系統(tǒng),并對其內(nèi) 容進(jìn)行圖表化的表示。一個(gè)模型可以同時(shí)由多個(gè)圖表來表示,每個(gè)圖表表示模型的某個(gè)方面
      • ?文本語言用戶輸入,可以快速的打字。
      • ?文本語言的優(yōu)勢在于可以進(jìn)行比較和合并,而圖形表達(dá)式可以更容易的看出內(nèi)容之間的關(guān)聯(lián)。
      • ?相對來說,文本語言比圖形復(fù)雜
  • 語義模型(Semantic Model)
    • DSL腳本的一種內(nèi)存完整表示
    • 有時(shí)候這個(gè)就是抽象語法樹(AST)
    • 分離Parse和Generate
  • 生成代碼(Generated Code):DSL的一個(gè)最重要的應(yīng)用是用來生產(chǎn)簡單的文本形式的工件,例如源代碼、數(shù)據(jù)庫腳本
    • DSL腳本的一種可執(zhí)行表示
    • 解釋語義模型

DSL應(yīng)用的優(yōu)點(diǎn)

  • 高級別的重用:如果僅適用通用編程語言,則每次只能解決一個(gè)問題,但如果應(yīng)用特定領(lǐng)域開發(fā)方法設(shè)計(jì)并實(shí)現(xiàn)一些特殊語言,每個(gè)特殊語言可以高效地解 決一類相似的問題
  • 使用DSL的軟件架構(gòu)可以跨接軟件工程過程各階段之間的鴻溝,特別是通過代碼生成可以很好的進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)階段的銜接
  • 讓領(lǐng)域?qū)<覅⑴c開發(fā)過程,不僅僅是需求階段,架構(gòu)階段也需要參與
  • 通過在問題空間工作,可以讓不熟悉如何實(shí)現(xiàn)技術(shù)的人,包括商業(yè)人士,也能夠更了解模型
  • 使用DSL表達(dá)的模型,可以在問題空間這個(gè)較高的抽象層次進(jìn)行驗(yàn)證,這意味著可以在開發(fā)周期的更早期發(fā)現(xiàn)因?yàn)槔斫夂捅硎龆斐傻腻e(cuò)誤。
  • 一個(gè)模型中具備了重要的業(yè)務(wù)知識,將解決方案從一種技術(shù)遷移到另一種技術(shù),或在同一技術(shù)的不同版本之間遷移,就變的相對容易。一般通過適當(dāng)修改生 成器或解釋器就可以做到。
  • 樣式(Styles)

      之前在信 息系統(tǒng)開發(fā)平臺OpenExpressApp:【OpenTest】 之 如何實(shí)現(xiàn)自動化測試框架 介紹了在OEA上使用 Ruby語法實(shí)現(xiàn)的一個(gè)自動化測試語言,這個(gè)就屬于內(nèi)部DSL。而在OpenExpressApp 對建模支持的初步計(jì)劃 中介紹的MetaModelEngie屬于外部DSL。

      外部DSL可以擺脫內(nèi)部DSL寄宿語言的限制,可以重新設(shè)計(jì)一種新的語言,但是增加了學(xué)習(xí)新的語言的學(xué)習(xí)成本,并且需要工具的支持。

    設(shè)計(jì)DSL

      為了降低風(fēng)險(xiǎn),我們并不是馬上就從頭開始開發(fā)框架及其 DSL ,而是應(yīng)該從現(xiàn)有的可以在某些應(yīng)用中使用的代碼開始,逐步的對其進(jìn)行參數(shù)化,逐步的發(fā)現(xiàn)那些在不同應(yīng)用中變化的部分,然后使這些部分 依賴于DSL。

      自上而下的方法傾向于快速建立一個(gè)完整且自包含的模型, 具有更長遠(yuǎn)的考慮,有助于保證結(jié)構(gòu)的一致性 。但是從另一方面看,這種方法容易導(dǎo)致在概念層設(shè)計(jì)出很復(fù)雜的模型,并且該模型難于實(shí)現(xiàn)。因此在 實(shí)際應(yīng)用中,將自上而下和自下而上兩種方法交替使用會更有效。 采 用漸進(jìn)的方式可以避免早期投入過大風(fēng)險(xiǎn),但是需要定期進(jìn)行一致性檢查。

      在《 Visual Studio DSL工具特定領(lǐng)域開發(fā)指南 》書中對設(shè)計(jì)DSL做了如下步驟:

  • 識別可變性與發(fā)現(xiàn)DSL:DSL是用你的框架具體的實(shí)現(xiàn)你的體系架構(gòu)模 式中可變的部分
  • 開發(fā)領(lǐng)域模型捕獲可變性
  • 定義標(biāo)記:在適當(dāng)?shù)牡胤绞褂贸R姌?biāo)記法或與標(biāo)記法相關(guān)的約定
  • 開發(fā)驗(yàn)證的約束:識別樹形之間的依賴性,認(rèn)出快照中的強(qiáng)制或禁止的循環(huán)
  • 開發(fā)并演進(jìn)框架:理解你的DSL針對的代碼體系結(jié)構(gòu),并在框架中編寫它
  • 測試DSL:包括驗(yàn)證的約束與規(guī)則、生成器與命令、以及生成的代碼
  • 演化和移植DSL:確保舊的模型在新版本的DSL中能夠使用
  • 識別好的DSL:范圍、最小性、常見標(biāo)記法,適度的冗余,合理的使用句 法空間,使用用戶術(shù)語
  • 應(yīng)用場景

    ? ......

    書籍

    Martin Fowler花了幾年時(shí)間寫了一本DSL的書籍《Domain Specific Languages 》, 我還沒有看,感興趣的可以先看看它在網(wǎng)站上寫的系列文章 Domain Specific Languages

    ?

    Best Practices for DSLs and Model-Driven Development?

    讀書筆 記:Visual Studio DSL工具特定領(lǐng)域開發(fā)指南

    DSL 的演進(jìn)


    推薦:你 可能需要的在線電子書

    轉(zhuǎn)載于:https://www.cnblogs.com/yefengmeander/archive/2011/01/06/2888038.html

    總結(jié)

    以上是生活随笔為你收集整理的MDSF:DSL(Domain Specific Language)介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。