相信如果看過一上篇(Visual Studio DSL 入門(一))你已經(jīng)對vs.net dsl有了一定的了解,接下來我們就來開始我們的這個系列的入門,Vs.net Dsl在國內(nèi)可能使用的人少之又少,不過希望這個系列能夠使看到的人能夠?qū)sl有一定的了解,使之能夠成為產(chǎn)品方案選型時的一個參考,能夠?qū)﹂喿x的人有所幫助.
準備環(huán)境
由于vs.net 2010并未正式發(fā)布,所以這一系列基于vs 2008 sp1進行開發(fā),Dsl tools是包含在VSX當中的,所以需要下載 Vistual Stutio.Net SDK 1.1安裝,下載地址為:http://msdn.microsoft.com/zh-cn/vsx/default(en-us).aspx
另外代碼生成采用的是T4,為了方便T4的編寫,需要下載T4編輯器http://www.t4editor.net/,遺憾的是Vs.net至今還沒有內(nèi)置T4編輯器,在vs 2010中也不會提供。
需求說明
我們完成的這個簡單的Demo類似于UML中的狀態(tài)圖(Statechart Diagram), 這個狀態(tài)機由狀態(tài)(states)組成,各狀態(tài)由轉(zhuǎn)移(transitions)鏈接在一起。狀態(tài)是對象執(zhí)行某項活動或等待某個事件時的條件。轉(zhuǎn)移是兩個狀態(tài)之間的關(guān)系,它由某個事件觸發(fā),然后執(zhí)行特定的操作或評估并導致特定的結(jié)束狀態(tài)。
狀態(tài)(State)的要素:
名稱: 將一個狀態(tài)與其他狀態(tài)區(qū)分開來的文本字符串;狀態(tài)也可能是匿名的,這表示它沒有名稱。
分類:狀態(tài)分為初始狀態(tài)(initial state)和結(jié)束狀態(tài)(end state).
進入/退出操作:在進入和退出狀態(tài)時所執(zhí)行的操作。
內(nèi)部轉(zhuǎn)移:在不使狀態(tài)發(fā)生變更的情況下進行的轉(zhuǎn)移。
子狀態(tài):狀態(tài)的嵌套結(jié)構(gòu),包括不相連的(依次處于活動狀態(tài)的)或并行的(同時處于活動狀態(tài)的)子狀態(tài)。
延遲的事件:未在該狀態(tài)中處理但被延遲處理(即列隊等待由另一個狀態(tài)中的對象來處理)的一系列事件。
轉(zhuǎn)移(Transitions)的要素:
源狀態(tài):轉(zhuǎn)移所影響的狀態(tài);如果對象處于源狀態(tài),當對象收到轉(zhuǎn)移的觸發(fā)事件并且滿足警戒條件(如果有)時,就可能會觸發(fā)輸出轉(zhuǎn)移。
事件觸發(fā)器:使轉(zhuǎn)移滿足觸發(fā)條件的事件。當處于源狀態(tài)的對象收到該事件時(假設(shè)已滿足其警戒條件),就可能會觸發(fā)轉(zhuǎn)移。 事件一般都有一個名稱,但是有些轉(zhuǎn)移沒有事件名稱,稱為自動或隱式轉(zhuǎn)移.
警戒條件:一種布爾表達式。在接收到事件觸發(fā)器而觸發(fā)轉(zhuǎn)移時,將對該表達式求值;如果該表達式求值結(jié)果為 True,則說明轉(zhuǎn)移符合觸發(fā)條件;如果該表達式求值結(jié)果為False,則不觸發(fā)轉(zhuǎn)移。如果沒有其他轉(zhuǎn)移可以由同一事件來觸發(fā),該事件就將被丟棄。
操作:可執(zhí)行的、不可分割的計算過程,該計算可能直接作用于擁有狀態(tài)機的對象,也可能間接作用于該對象可見的其他對象。
目標狀態(tài)(可選):在完成轉(zhuǎn)移后被激活的狀態(tài)。
參數(shù): 轉(zhuǎn)移可能有參數(shù),這個參數(shù)為事件觸發(fā)器的事件方法的參數(shù)
事先弄清楚這段說明是很重要的,因為我們的模型,我們的元數(shù)據(jù)都來源于需求問題的描述.
計劃
一個簡單的入門系列計劃大致包含幾下幾步:
1. 創(chuàng)建一個簡單的DSL模型
2. 創(chuàng)建我們的元數(shù)據(jù)模型,包含狀態(tài)機(StateMachine),狀態(tài)(State),轉(zhuǎn)移(Transition).可能實際的會對我們需求有些取舍,比如不考慮子狀態(tài)等.
3. 創(chuàng)建相對我們的元數(shù)據(jù)模型的圖形展現(xiàn).
4.規(guī)范我們的模型和圖.添加規(guī)則(Rule)和驗證(Validation).
5.在Visual Studio實驗室環(huán)境中測試我們的Dsl項目
6.改善我們的用戶界面.
7.針對我們限定的元數(shù)據(jù)針對一個框架創(chuàng)建代碼生成.
8.創(chuàng)建安裝程序發(fā)布Dsl項目安裝包
資源
1.DSL Tools Lab http://code.msdn.microsoft.com/DSLToolsLab 系列教程
2.臺灣微軟Paul的DSL系列視頻教程 http://msdn.microsoft.com/zh-tw/vstudio/cc963628.aspx
3.Domain-Specific Development with Visual Studio DSL Tools 目前知道的唯一一本關(guān)于專門關(guān)于Vs.NET DSL的書,有對應的中文譯本.
4.VSX的一系列深入進階 http://dotneteers.net/blogs/divedeeper/default.aspx?PageIndex=1
轉(zhuǎn)載:http://www.cnblogs.com/lonely7345/archive/2010/01/26/1656343.html
本文鏈接:http://www.95time.cn/tech/program/2010/7730.asp
出處:似水流年
責任編輯:bluehearts
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|