Visual Studio DSL 入門(四)——基本概念
在ExampleElement這一端的屬性名為ExampleModel,表示它所從屬的ExampleModel類型,重?cái)?shù)為1..1 ,表示它可以并且只可以從屬于一個(gè)ExampleModel.
簡單來說,這個(gè)嵌入關(guān)系也就表示了在我們的上一切最后運(yùn)行起來的Dsl中,我們的ExampleModel模型中能夠放多個(gè)ExampleElement,對(duì)于每一個(gè)ExampleElement只能從屬于一個(gè)ExampleModel.
2.引用關(guān)系(reference relationship)
在我們的Dsl中看到引用關(guān)系ExempleElementReferencesTargets把兩個(gè)ExampleElements關(guān)系起來,表示在兩個(gè)ExampleElement之間可以建立ExempleElementReferencesTarget關(guān)系,引用關(guān)系一般有圖形表示,所以在設(shè)計(jì)時(shí)通過拖動(dòng)一條線來把兩個(gè)模型關(guān)系起來,和嵌入關(guān)系一樣,引用關(guān)系也可以設(shè)置多重性,表示是否允許和多個(gè)模型同時(shí)建立引用關(guān)系。在我們的例子中源和目標(biāo)相同,重?cái)?shù)為0..*,表示一個(gè)ExampleElement可以與多個(gè)其它的ExempleElement建立引用關(guān)系。
注意這里這不是代表著兩個(gè)ExampleElement之間可以建立多個(gè)重復(fù)的引用關(guān)系,而是指不同的ExampleElement之間。允許重復(fù)的關(guān)系需要在關(guān)系的屬性中設(shè)置Allows Duplicates為True.另外很重要的一點(diǎn),Dsl會(huì)對(duì)每個(gè)域關(guān)系生成一個(gè)單獨(dú)的類,模型中建立的每個(gè)關(guān)系都是這個(gè)類的一個(gè)實(shí)例。我們可以通過屬性中的Code下面屬性進(jìn)行設(shè)置來控制生成的代碼,我們可以設(shè)置GeneratesDoubleDerived屬性為True,每個(gè)關(guān)系會(huì)生成兩個(gè)類,父類ExampleModelHasElementsBase包含所有的實(shí)現(xiàn),子類ExampleModelHasElements是一個(gè)partial類,所以你可以重載父類的方法來實(shí)現(xiàn)你自己的邏輯。另外我們也可以通過這種機(jī)制來實(shí)現(xiàn)生成的代碼里實(shí)現(xiàn)某個(gè)我們自定義的接口。注意,同樣也可以在域類上進(jìn)行設(shè)置。
在這里我覺得有必要對(duì)幾個(gè)概念加強(qiáng)區(qū)分一下:
域類---域模型
域模型包含域類和域關(guān)系,域類代表領(lǐng)域中的不同的類型,域關(guān)系代表兩個(gè)域類中的關(guān)系信息。
(1) 域模型 --虛線里所所有的
(2) 域類Library
(3) 域類Person
(4) 域關(guān)系
(5)重?cái)?shù) * (表示在一個(gè)域模型中,一個(gè)Library可以有多個(gè)Person).
(6)重?cái)?shù) 1 (表示一個(gè)Person,只能存在于一個(gè)Library中).
(7)源角色
(8)目標(biāo)角色
出處:似水流年
責(zé)任編輯:bluehearts
上一頁 Visual Studio DSL 入門(四) [1] 下一頁 Visual Studio DSL 入門(四) [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|