Visual Studio DSL 入門(四)——基本概念
剛接觸Visual Studio DSL時(shí),被它的基本理論概念迷惑了很長(zhǎng)時(shí)間, 我的建議是如果能夠很快的理解這些概念最好.如果短時(shí)間內(nèi)理解不了就大概了解下這些基礎(chǔ)概念,就沒(méi)有必要為了每一個(gè)概念一直深入,搞得自己頭疼,倒不如在以后的實(shí)踐中慢慢深入,理解并加深這些概念.
開(kāi)發(fā)一個(gè)DSL需要?jiǎng)?chuàng)建的幾個(gè)不同的組成部分:域模型,圖形符號(hào),工具箱,資源管理器和屬性窗口,驗(yàn)證,序列化和部署,打開(kāi)上一節(jié)我們創(chuàng)建的LanguageSm項(xiàng)目中的DslDefinition.dsl文件,可以看到在中心文檔區(qū)域有左右兩部分(兩個(gè)泳道).
1.左側(cè)是元數(shù)據(jù)模型(域模型). 也就是域類和域關(guān)系.
2.右側(cè)是圖形符合,也就是圖形元素(Diagram Elements).
其實(shí)我們是在用DSL本身在創(chuàng)建DSL,這些描述本身也是在用DSL.
另外,域模型與圖形符號(hào)之間通過(guò)連接器(Connectors)連接,域類之間可以通過(guò)關(guān)系relationships連接.
域模型 (Domain Model)
每一個(gè)DSL的核心都是一個(gè)域模型,它定義了語(yǔ)言所代表的各種概念,它們的屬性,以及它們之間的關(guān)系。在模型驅(qū)動(dòng)開(kāi)發(fā)中,我們的模型要抽象出來(lái),并用DSL的語(yǔ)法描述出來(lái),這也就是用域模型來(lái)描述,只要我們有了域模型,工具箱,圖形展現(xiàn)都是基于域模型然則創(chuàng)建的。
域模型有兩個(gè)概念
1.根域類(root Domain Class)
任何一個(gè)DSL有且只有一個(gè)根域類,它和你的圖形對(duì)應(yīng),這里說(shuō)的圖形是整個(gè)圖形的概念。從我們上一節(jié)的項(xiàng)目中可以看到,我們創(chuàng)建的時(shí)候默認(rèn)就自動(dòng)創(chuàng)建了根域類(ExampleModel)和它對(duì)應(yīng)的圖形(ExampleShape)。
2.域類(Domain Class)
和根域類不一樣,ExampleElement是真正意義上的模型。并且它有一個(gè)屬性,名稱為Name,類型為String.
域關(guān)系(domain relationships)
1.嵌入關(guān)系(embedding relationship)
嵌入關(guān)系表示一個(gè)模型能夠嵌入在另外一個(gè)模型中。在我們的dsl中的可以找到嵌入關(guān)系ExampleModelHasElements,把ExampleModel和ExampleElement聯(lián)系起來(lái)(見(jiàn)下圖).
在ExampleModel這一端的屬性名為Elements,這個(gè)集合屬性是它包含所有的ExampleElement, 重?cái)?shù)為0.*,表達(dá)它可以包含零個(gè)或者多個(gè)ExampleElement, 域角色是指它在這個(gè)關(guān)系中扮演的角色,角色名你可以通過(guò)點(diǎn)擊域角色(這條線)在右面的屬性里面看到,角色名往往和這一端的源屬性名相反,和另外一端的屬性名一致。
出處:似水流年
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) Visual Studio DSL 入門(四) [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|