成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Visual Studio特定領域開發(fā)中生成域類和域關系

開發(fā) 后端
我們之前介紹過Visual Studio特定領域開發(fā),在這里我們將詳細的講述如何生成域類和域關系。

Visual Studio DSL也成為Visual Studio特定領域開發(fā),之前我們報道過《淺析Visual Studio中的特定領域開發(fā)》,而本文也是Visual Studio特定領域開發(fā)系列文章中關于生成域類和域關系的部分。

#T#

上一節(jié)我們大概介紹了一些Vs.net Dsl的域模型的一些基本的概念,這一節(jié)我們再回到我們生成的LanuageSm項目,看一下生成的域類以及域關系,介紹一下Dsl運行時的Store,然后再來介紹一下需要注意的一些關鍵點。為我們下一節(jié)具體設計我們自己的Dsl做最后的準備. 

1. 首先找到Dsl項目中模板DomainClasses.tt生成的DomainClasses.cs,我們來查看一下它由兩個類組成: 

ClassDiagram1 

其實也就對應著我們域模型中的根域類ExampleModel和域類ExampleElement.我們仔細再來看一下ExampleElement類的具體結構.可以發(fā)現(xiàn): 

1).字段是Guid類型的,這樣更方便關系類中直接引用屬性,后續(xù)我們也會發(fā)現(xiàn)在驗證,規(guī)則中也會經(jīng)常使用屬性的Guid字段變量來代表屬性. 

2).我們看到上一節(jié)我們看到的關系生成的屬性,ExampleElement與ExampleModel的嵌入關系,生成了ExampleModel類型的ExampleModel屬性.   ExampleElement與自身的引用關系,由于重數(shù)是*,生成了強集合類型LinkedElementCollection<ExampleElement>屬性. 

3).屬性中的Name代表域類的域屬性Name。

2. 我們再來看一下域關系,找到DomainRelationships.tt生成的類文件DomainRelationships.cs,查看類圖,顯示類圖中的屬性為關系或者是組合關系: 

域關系

1)可以看到域關系對應的類通過Guid對應的字段關聯(lián)域類. 

2)通過上面的類圖,可以看到域關系類對應的屬性與域類的關系,它分別存儲了關系對應的源Source和目標Target的屬性。 

3)我們可以找到一些靜態(tài)方法,比如在ExampleModelHasElements類中:

GetElements(ExampleModel)  ---  獲取關系中一個ExampleModel對應的所有的ExampleElement 

GetExampleModel(ExampleElement)  --獲取關系中一個ExampleElement對應的ExampleModel 

另外還可以通過GetLink,GetLinks, GetLinksToElements,獲取指定元素之間的關系。 

3.很有必要在這里也對Dsl的運行的機制有一些了解 ,那就必須在這里介紹一下Store. 

1)在Dsl運行期間,模型元素都被存儲在內存中的Store中,Sotre也提供了一系列的操作:模型元素和關系的創(chuàng)建,操作,刪除,Redo/Undo,規(guī)則,事件等,相當重要,在Dsl開發(fā)中經(jīng)常會涉及到Store的操作。 

2)當一個模型文件被打開時,會自動重建一個Store,并且加載模型文件中的所有的模型和關系的實例,這個過程我們會在后面介紹。 

3) 每一個域類都繼承ModelElement,每個域關系都繼承自ElementLink(ElementLink其實也繼承于ModelElement). 在Store中加載的每個模型其實都是ModelEment的一個實例,每個域關系都是ElementLink的一個實例。可以通過Store甚至可以操作它們的屬性,監(jiān)聽創(chuàng)建,刪除等事件. 

4.有一些細節(jié)性的應該注意的問題在這里零散的總結一下: 

1).區(qū)分兩個域類是嵌入關系還是引用關系,可以考慮這域類在模型瀏覽器里的展現(xiàn),如果嵌入在模型瀏覽器中(Model Explorer)那就可以采用嵌入關系,否則就是引用關系. 

2).關系的重數(shù)雖然可以任意選擇,但是在有些情況下會有些限制,比如在嵌入式關系中: 

嵌入關系目標角色的重數(shù)可為One 或者是ZeroOne,因為一個ModelElement只能被嵌入一次. 

如果一個ModelElement是多個嵌入關系中的目標角色,那么目標角色的重數(shù)必須都為ZeroOne,因為它只能在同一時間在一個關系中扮演目標角色。 

在一個完整的域模型中,每個域類(根域類除外)必須是一個嵌入關系的目標,不然就不能夠構成一個完整的模型樹,也就不能夠處理序列化 

當然,可能大家會對這些規(guī)則有些不知所措,沒關系,你可以不理這些規(guī)則,按照你的方式去設計,在保存或者是驗證(右鍵Validate All)時,會在下面的錯誤窗口提示你的。 

3)每個域類都應該有Name Domain Property.可以通過從工具欄拖Named Domain Class創(chuàng)建域類,自動帶出此域屬性,也可以手動添加域屬性,然后指定域屬性的Is Element Name 為True,此屬性的值會在序列化處理時使用.  

原文標題:Visual Studio DSL 入門 5---理解生成的域類和域關系

鏈接:http://www.cnblogs.com/lonely7345/archive/2010/01/29/1659157.html

責任編輯:彭凡 來源: 博客園
相關推薦

2010-01-25 09:17:01

Visual Stud

2009-11-09 10:08:31

Visual Stud

2009-11-09 17:04:20

Visual Stud

2024-02-27 12:42:38

開發(fā)前端

2009-11-06 13:25:35

Visual Stud

2009-11-06 13:54:09

Visual Stud

2025-01-07 09:23:45

2023-09-05 07:32:22

vscode開源故障

2013-11-14 01:09:35

微軟Visual StudVisual Stud

2019-03-13 08:00:00

JavaScript作用域前端

2021-03-09 08:35:51

JSS作用域前端

2011-07-15 11:11:13

AD域控制器

2011-07-15 10:43:06

AD域控制器

2011-09-06 09:56:24

JavaScript

2009-11-09 14:55:51

Visual Stud

2009-11-06 11:04:29

Visual Stud

2009-11-06 11:16:17

Visual Stud

2020-08-27 15:06:22

Alexa

2010-12-23 16:09:48

Active Dire

2009-12-16 14:34:32

Visual Stud
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.99re | 一区二区三区视频在线免费观看 | 波多野结衣先锋影音 | 欧美在线一区二区三区 | 精品一区二区久久久久久久网站 | 久久亚洲一区二区三 | 国产精品精品视频一区二区三区 | 亚洲国产精品久久人人爱 | 毛片一区二区三区 | 天堂va在线 | 亚洲激情av | 久草网址| 暴草美女| 亚洲精品国产精品国自产在线 | 亚洲国产伊人 | 欧美一区二区三区在线观看 | 五月激情婷婷网 | jizz18国产 | 欧美国产日韩在线观看成人 | www.欧美| 九九热在线视频观看这里只有精品 | 久久久久久久久久性 | 精品视频在线播放 | 精品久久久久久中文字幕 | 91欧美精品成人综合在线观看 | 色狠狠一区| 少妇无套高潮一二三区 | 一区二区三区四区在线 | 精品啪啪 | 国产一区二区在线免费观看 | 亚洲精品一区在线 | 亚洲第一福利网 | 国产黄色在线 | 欧美激情精品久久久久久免费 | 国产成人精品一区二区 | 在线观看三级av | 久久综合久色欧美综合狠狠 | 亚洲美女视频 | 成人免费三级电影 | 日本成人中文字幕在线观看 | 亚州精品天堂中文字幕 |