從這節開始我們就開始我們的DSL之旅, 首先確保你已經安裝了Visual Studio Sdk,並且使用的是Visual Studio 2008.我們先大概建立一個簡單的DSL項目,通過這個項目來瞭解dsl的開發環境和流程.
1. 開啟VS.NET ,建立--項目, 點擊其它項目類型--擴充性(Extensibility). 這裡列出來了vs.net擴充類型的項目,包括Addin,VSPackage,Dsl等項目類型,選擇"Domain Specific Lan guage Designer”,點擊確定
2.接下來進入DSL建立嚮導,將會提供四種DSL模型模板提供我們選擇,其實他們只是給我們提供了不同的Sample提供查看,也方便我們更方便的開始.
Class Diagrams 由UML類圖組成,包含類,介面,關係,組合,屬性,操作等.
Component Models 組件模型,子組件組成的組件.
Minimal Language 只包含一個簡單的空的語言模型
Task Flow 建立類似UML狀態圖模型
3. 在這裡我們選擇Minimal Language,並保持Language Name預設即可,點擊下一步,設計Language的模型檔案的尾碼名和檔案表徵圖。如果你輸入的尾碼名已經被使用,中間的框中會列出搜尋到的註冊的尾碼名列表。在這裡我們輸入sm作為尾碼名,保持使用預設的表徵圖.
4. 點擊下一步,進入到產品設定,主要設計產品名稱,所屬公司,項目名稱空間.這些資訊將會包含在最後產生的項目中,在最後的產品部署中起到作用。在這裡我們不變更,可以直接保持預設即可.
5. 下一步進入到簽章設定,在擴充開發中任何需要部署的Package都需要強命名(將會註冊到GAC),可以選擇自動建立一個Key,也可以選擇使用已有的key.
6. 我們選擇直接建立強命名key,點擊下一步,這是一個設定總結介面:
我們直接能查看到所有的設定資訊,可以通過上一步下一步變更,也可直接點擊左側的導航來定位更改,確認無誤後,點擊完成。嚮導(Wizard)會自動給我們構建項目.我們暫且不管產生的這些項目結構,切換到方案總管,點擊上面的最後面的按鈕“轉換所有模板”(Transalte All Template).完成後,點擊Debug運行,就會開啟Visual Studio實驗室環境(Experimental hive),也就是上面的Minimal Language介面,可以大概操作一下了,相當神奇吧,這就完成了第一個DSL項目的開發.同樣你也可以選擇其它三種模型,效果在上面已經列出來了.
7. 我們再來看一下產生的項目結構,整個解決方案總共有兩以下兩個項目組成(其它有三個,另外就是運行後的Testing項目,稍後介紹).
Dsl: 根據你的模型資料(DslDefinition.dsl檔案)產生的有關模型的操作,包括模型關係,序列化,圖形,連接器等
DslPackage: 支撐Dsl能夠在Vs.net裡運行,以及和Vs.net互動的操作,包括菜單,工具條,遊覽器等
Dsl項目設定成了針對DslPackage項目的friend 組件(通過AssemblyInfo的InternalsVisibleTo),DslPackage中可以直接存取Dsl中的內部成員,DslPackage其實也是根據DslDefinition.dsl產生的.深入瞭解這兩個項目的結構是非常有必要的,我們會在隨後的深入過程中介紹。
8. 查看這兩個項目,發現大部分都是由尾碼名為tt的檔案組成,這就是t4檔案(Text Templating Transformation Toolkit),類似於asp,ruby這樣的解釋性語言,讀我們的模型產生cs代碼,可以看到每個tt檔案都附屬了一個cs代碼檔案.綁定到了每個t4檔案可以右鍵運行自訂工具Run Custom Tool,就會調用TextTemplatingFileGenerator解析t4模板檔案產生目標代碼,也可以向我們剛才那個點擊上面的按鈕轉換所有的模板檔案.
9. 開啟Dsl項目中的DslDefinition.dsl檔案.(這是通常情況下我們使用的最重要的檔案,包括我們的Dsl的所有的模型元素資料,它附屬的DslDefinition.dsl.Diagram是它的圖形顯示檔案).
這就是模型設計的主地區,我們來看一下它的組成部分:
1). 工具條,這裡包括模型,關係,圖形. 這個工具條與.Dsl檔案關係。
2). 模型中繼資料. 這些概念的東西我們在下一切會介紹.
3). 圖形展現. 設計模型的展現資訊,通過中間的那條線與模型對應起來
4). Dsl Details編輯視窗, 用來編輯Dsl相關的一些資訊,比如關係。
5). 解決方案檔案夾,注意上面的黃色地區就是”轉換所有模板“按鈕,點擊下面的Dsl Explorer頁簽,切換到Dsl瀏覽器.
這裡會列出來當前Dsl檔案裡的模型,模型元素Element,圖Shape,類型,連接器Connector,Connection Builders,以通讀對模型瀏覽器,工具條,序列化的設定。我們對Dsl的大部分設計都會在這裡完成.
Ok,就到這裡,下次將介紹一些基礎概念.
作者:孤獨俠客(似水流年)
出處:http://lonely7345.cnblogs.com/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。