特定領(lǐng)域開發(fā)是用來解決重復(fù)發(fā)生的問題的方法,針對每次發(fā)生的問題,通過進行總結(jié)和分析,他們之間相同的方面可以一次性的解決.而經(jīng)常變化的方面,可以采用一種特殊的語言表達.針對這個特 " /> 成人免费v片在线观看,日韩欧美亚洲一区,www在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

Visual Studio DSL 入門 1

什么是特定領(lǐng)域開發(fā)和DSL
     特定領(lǐng)域開發(fā)是用來解決重復(fù)發(fā)生的問題的方法,針對每次發(fā)生的問題,通過進行總結(jié)和分析,他們之間相同的方面可以一次性的解決.而經(jīng)常變化的方面,可以采用一種特殊的語言表達.針對這個特殊語言,我們可以建立模型或者表達式,然后插入到固定部分. 
     對于我們軟件行業(yè)的解決方案來說,固定部分一般采用傳統(tǒng)的設(shè)計和實現(xiàn)方式,可以為框架,平臺,解釋器或者編程接口.提供可擴展性,具有高度的抽象性和可復(fù)用性.而特定領(lǐng)域語言專門用來創(chuàng)建變化的部分,從而使整個解決方案可具有可應(yīng)用性. 
     特定領(lǐng)域語言(DSL,Domain Specific Language)是一種特別用來描述某一專業(yè)領(lǐng)域內(nèi)涵的描述語言,其實它并不陌生, HTML ,SQL都算的上是DSL的例子.

幾種其它DSL 
     MPS   http://www.jetbrains.com/mps/   JetBrains公司的DSL工具,通過這個平臺可以直接定義規(guī)則,生成代碼
     image123
     MetaEdit+  http://www.metacase.com/    圖形化的DSL工具
     conference-registration500w
     Oslo    http://msdn.microsoft.com/zh-cn/data/ee460940(en-us).ASPx 微軟新推出的圖形化DSL語言,但是Oslo和我們要介紹的DSL Toolkit還是有些區(qū)別的,這里有一些介紹http://blogs.msdn.com/keith_short/archive/2008/11/06/oslo-and-the-dsl-toolkit.ASPx .Oslo由 “M"語言,工具Quadrant,關(guān)系存儲組成.
      image_2
      image_6
     GMF,EMF   http://www.eclipse.org/modeling/gmf/   使用 Eclipse Modeling Framework (EMF) 和 Graphical Modeling Framework (GMF) 技術(shù)來為領(lǐng)域特定語言(DSL)產(chǎn)生領(lǐng)域特定建模(DSM)輔助工具
      cbe_ecore

什么是Visual Studio DSL     
      Vistual Studio DSL 工具,是微軟針對特定領(lǐng)域開發(fā)而專門設(shè)計的.包含在Vistual Studio SDK中(vs 2010中將是單獨安裝),允許開發(fā)人員自行設(shè)計專屬的圖形化工具,它內(nèi)置了模型的相關(guān)支持,以及模型與圖形之間的支持,還包括對模型的驗證,規(guī)則,事務(wù)的支持,同時還允許開發(fā)人員在結(jié)合VS.NET的一些擴展VSX一同使用.比如工具條,菜單等.可以將模型與T4一同使用,從而生成目標代碼.Vs.NET現(xiàn)在的類設(shè)計器,分布式系統(tǒng)設(shè)計器(Distributed System Designer),LinqToSql設(shè)計器,EntityFramework設(shè)計器都是基于VS.NET DSL開發(fā)的,VS 2010新增了UML Modeling Project,終于提供了對類圖,時序圖,用例圖等的支持,這也是基于Vs.NET DSL來實現(xiàn)的.

為什么要使用DSL工具
     上面介紹了幾種DSL工具,但是我們?yōu)槭裁匆褂盟?它又能給我們帶來什么呢? 很關(guān)鍵的一點,DSL和UML不同,是用來解決問題的,而不是描述問題.如果你正在你的工作和解決方案中重復(fù)編寫著相同或者相似的代碼,而且這些重復(fù)的代碼能夠單獨出來采用生成的方式,那么你就可以考慮結(jié)合DSL工具來生成這些代碼. 
     可能有人會說,那這和使用現(xiàn)有的這些基于數(shù)據(jù)庫的代碼生成工具(Codesmith,李天平的codematic等)又有何不同呢?DSL是站在領(lǐng)域?qū)<业母叨龋擒浖_發(fā)專家來開始解決問題,如果需要對數(shù)據(jù)庫進行設(shè)計,然后再生成代碼Coding,那么你這個工具只能說是開發(fā)人員的一個輔助工具,只是面對實際開發(fā)人員,而這在大型的軟件系統(tǒng)當中會有些力不從心.      

采用DSL的開發(fā)過程定制
      1.找出問題的固定部分,并把這些固定固定部分放在通用架構(gòu)或平臺中.通用的部分基本上都是我們根據(jù)長期的經(jīng)驗和積累抽象出來固定的.比如我們使用的Enterprise Library中已經(jīng)將數(shù)據(jù)訪問操作,日志操作,驗證緩存等封裝起來提供調(diào)用.
      2.識別可變性和發(fā)現(xiàn)DSL. 找出其中變化的部分,并設(shè)計DSL, 通過DSL的表達式或模型提供給問題一個解決方案. 在使用Enterprise Library過程中,你發(fā)現(xiàn)其中大部分的變化的部分其實也相對"固定",他們還是基于你的模型,基于你的實體模型,服務(wù)模型,如果把這些元數(shù)據(jù)抽象出來,通過DSL來實現(xiàn)這些元數(shù)據(jù)的配置,那么就可以把這些部分直接生成到你的目標解決方案中.

優(yōu)勢
     1.大幅度的提高生產(chǎn)率. 生成代碼可比人工復(fù)制粘貼快多了。
     2.使系統(tǒng)的規(guī)范性更強.    每個開發(fā)人員對某一個功能的都會有不同的實現(xiàn)方式,采用DSL設(shè)計模型,結(jié)合代碼生成能夠使功能的實現(xiàn)相對固定.
     3.降低了犯錯的機會.
     4.使非開發(fā)人員,那些顧問和售前,也能夠直接了解模型。使開發(fā)過程提前,甚至顧問的調(diào)研需求時,就可以使用工具和客戶溝通,抽象需求,從而提供給二次開發(fā)人員使用.
     5.能夠在較高的抽象層次對解決方案進行驗證,過早的發(fā)現(xiàn)問題.
     6.可以基于同一個模型配置不同的技術(shù)實現(xiàn)過程.降低技術(shù)難度和工作量。比如上次介紹的Sculpture,就可以針對不同的層次,提供不同的技術(shù)選擇。針對同一個模型,我們可以選擇使用Entity Framework或者NHibernate。UI層可以選擇ASP.NET MVC,Sliverlight,WPF等不同的實現(xiàn)方式.
     7.DSL不局限于生成我們的技術(shù)方案,還可以用來生成構(gòu)建腳本,文檔,計劃等。
     8.使解決方案進行技術(shù)轉(zhuǎn)移變得相對容易,通過修改生成器或解釋器就可以做到。模型元數(shù)據(jù)相對固定,使我們的解決方案相對規(guī)范。我們只需要生成不同的代碼就可以了。

    當然,這也是有前提的,一是開發(fā)DSL,進行抽象整合需要成本。二是并不是所有的解決方案都適合使用DSL,比如一個門戶網(wǎng)站,可能相對固定的部門很少,可以定制的部分也很少,就不適合使用,如果對不適合使用的強制使用就會陷進定制化陷阱。在設(shè)計和開發(fā)時,一定要保留一定的靈活性,因為不可能所有的代碼都能夠生成,你必須提供一定的擴展性,保證能夠?qū)ι傻拇a進行擴展。另外就是一定要保證實現(xiàn)的規(guī)范,實現(xiàn)方式太多,會導(dǎo)致你的DSL過于復(fù)雜。有些時候你甚至需要舍棄一些實現(xiàn),舍棄一些需求。“簡單的問題的解決應(yīng)該簡單化,復(fù)雜問題的解決應(yīng)該可能化”(smalltalk的創(chuàng)始人AlianKay).

系列介紹
    
本系列一開始將通過一個案例簡單的介紹DSL的開發(fā)流程,這個案例來源于DSL Tools Lab,主要介紹DSL的一些簡單開發(fā)方法,其中也包括T4與DSL結(jié)合完成代碼生成,DSL工具的部署. 主要是完成一個狀態(tài)機的DSL應(yīng)用,具體我們會在接下來一一介紹。

clip_image002

    對DSL的開發(fā)有過簡單的了解后,我們會對完成一個實際使用的完整的開發(fā)工具的開發(fā)。在這個過程中也會包含介紹DSL設(shè)計和開發(fā)過程以及應(yīng)該注意的問題,當然也會包括DSL以及VSX的一些比較深層次的應(yīng)用
    untitled

    
參考
      Visual Studio DSL 工具特定領(lǐng)域開發(fā)指南   Doamin-Specific Development With Visual Studio DSL Tools

NET技術(shù)Visual Studio DSL 入門 1,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 福利在线看| 国产欧美激情一区二区三区-老狼 | 久久综合亚洲鲁鲁五月天欧美 | 国产原创自拍 | 美女扒开腿被男人猛视频 | 精品精品国产自在久久高清 | 国产美女精品三级在线观看 | 高清国产一区二区三区 | 国产线视频精品免费观看视频 | 色噜噜狠狠先锋影音久久 | 黄色美女视频 | 免费国产午夜高清在线视频 | 精品国产亚洲一区二区三区 | 国产精品酒店视频 | 欧美福利视频 | 国产高清视频免费人人爱 | 91中文在线| 怡红院日韩| 日本乱理伦中文三区 | 天天干免费视频 | 亚洲视频一二区 | 丁香婷婷久久大综合 | 黄色视屏在线免费观看 | 四虎新地址4hu 你懂的 | 国产玖玖在线观看 | 中文不卡视频 | 草草精品视频 | 精品成人乱色一区二区 | 久久精品免视看国产盗摄 | 91亚洲视频 | 日日狠狠久久偷偷四色综合免费 | 国产高清自拍 | 精品国产香蕉在线播出 | 国产欧美一区二区三区在线 | 精品国产一区二区三区不卡 | 国产老鸭窝毛片一区二区 | 激情毛片视频 | 深夜啪啪网站 | 久久久久久精 | 久久精品国产国产 | 久久精品视频99精品视频150 |