什么是Visual Studio DSL
Vistual Studio DSL 工具,是微軟針對特定領域開發(fā)而專門設計的.包含在Vistual Studio SDK中(vs 2010中將是單獨安裝),允許開發(fā)人員自行設計專屬的圖形化工具,它內置了模型的相關支持,以及模型與圖形之間的支持,還包括對模型的驗證,規(guī)則,事務的支持,同時還允許開發(fā)人員在結合VS.NET的一些擴展VSX一同使用.比如工具條,菜單等.可以將模型與T4一同使用,從而生成目標代碼.Vs.Net現在的類設計器,分布式系統(tǒng)設計器(Distributed System Designer),LinqToSql設計器,EntityFramework設計器都是基于VS.NET DSL開發(fā)的,VS 2010新增了UML Modeling Project,終于提供了對類圖,時序圖,用例圖等的支持,這也是基于Vs.NET DSL來實現的.
為什么要使用DSL工具
上面介紹了幾種DSL工具,但是我們?yōu)槭裁匆褂盟?它又能給我們帶來什么呢? 很關鍵的一點,DSL和UML不同,是用來解決問題的,而不是描述問題.如果你正在你的工作和解決方案中重復編寫著相同或者相似的代碼,而且這些重復的代碼能夠單獨出來采用生成的方式,那么你就可以考慮結合DSL工具來生成這些代碼.
可能有人會說,那這和使用現有的這些基于數據庫的代碼生成工具(Codesmith,李天平的codematic等)又有何不同呢?DSL是站在領域專家的高度,而非軟件開發(fā)專家來開始解決問題,如果需要對數據庫進行設計,然后再生成代碼Coding,那么你這個工具只能說是開發(fā)人員的一個輔助工具,只是面對實際開發(fā)人員,而這在大型的軟件系統(tǒng)當中會有些力不從心.
采用DSL的開發(fā)過程定制
- 找出問題的固定部分,并把這些固定固定部分放在通用架構或平臺中.通用的部分基本上都是我們根據長期的經驗和積累抽象出來固定的.比如我們使用的Enterprise Library中已經將數據訪問操作,日志操作,驗證緩存等封裝起來提供調用.
- 識別可變性和發(fā)現DSL. 找出其中變化的部分,并設計DSL, 通過DSL的表達式或模型提供給問題一個解決方案. 在使用Enterprise Library過程中,你發(fā)現其中大部分的變化的部分其實也相對"固定",他們還是基于你的模型,基于你的實體模型,服務模型,如果把這些元數據抽象出來,通過DSL來實現這些元數據的配置,那么就可以把這些部分直接生成到你的目標解決方案中.
優(yōu)勢
- 大幅度的提高生產率. 生成代碼可比人工復制粘貼快多了。
- 使系統(tǒng)的規(guī)范性更強. 每個開發(fā)人員對某一個功能的都會有不同的實現方式,采用DSL設計模型,結合代碼生成能夠使功能的實現相對固定.
- 降低了犯錯的機會.
- 使非開發(fā)人員,那些顧問和售前,也能夠直接了解模型。使開發(fā)過程提前,甚至顧問的調研需求時,就可以使用工具和客戶溝通,抽象需求,從而提供給二次開發(fā)人員使用.
- 能夠在較高的抽象層次對解決方案進行驗證,過早的發(fā)現問題.
- 可以基于同一個模型配置不同的技術實現過程.降低技術難度和工作量。比如上次介紹的Sculpture,就可以針對不同的層次,提供不同的技術選擇。針對同一個模型,我們可以選擇使用Entity Framework或者NHibernate。UI層可以選擇Asp.net MVC,Sliverlight,WPF等不同的實現方式.
- DSL不局限于生成我們的技術方案,還可以用來生成構建腳本,文檔,計劃等。
- 使解決方案進行技術轉移變得相對容易,通過修改生成器或解釋器就可以做到。模型元數據相對固定,使我們的解決方案相對規(guī)范。我們只需要生成不同的代碼就可以了。
當然,這也是有前提的,一是開發(fā)DSL,進行抽象整合需要成本。二是并不是所有的解決方案都適合使用DSL,比如一個門戶網站,可能相對固定的部門很少,可以定制的部分也很少,就不適合使用,如果對不適合使用的強制使用就會陷進定制化陷阱。在設計和開發(fā)時,一定要保留一定的靈活性,因為不可能所有的代碼都能夠生成,你必須提供一定的擴展性,保證能夠對生成的代碼進行擴展。另外就是一定要保證實現的規(guī)范,實現方式太多,會導致你的DSL過于復雜。有些時候你甚至需要舍棄一些實現,舍棄一些需求!昂唵蔚膯栴}的解決應該簡單化,復雜問題的解決應該可能化”(smalltalk的創(chuàng)始人AlianKay).
系列介紹
本系列一開始將通過一個案例簡單的介紹DSL的開發(fā)流程,這個案例來源于DSL Tools Lab,主要介紹DSL的一些簡單開發(fā)方法,其中也包括T4與DSL結合完成代碼生成,DSL工具的部署. 主要是完成一個狀態(tài)機的DSL應用,具體我們會在接下來一一介紹。
對DSL的開發(fā)有過簡單的了解后,我們會對完成一個實際使用的完整的開發(fā)工具的開發(fā)。在這個過程中也會包含介紹DSL設計和開發(fā)過程以及應該注意的問題,當然也會包括DSL以及VSX的一些比較深層次的應用。
點擊放大
參考
Visual Studio DSL 工具特定領域開發(fā)指南 Doamin-Specific Development With Visual Studio DSL Tools
原文:http://www.cnblogs.com/lonely7345/archive/2010/01/24/1655495.html
本文鏈接:http://m.95time.cn/tech/program/2010/7364.asp
出處:似水流年
責任編輯:bluehearts
上一頁 Visual Studio DSL 入門 [1] 下一頁
◎進入論壇網絡編程版塊參加討論
|