Visual Studio DSL 入门(四)——基本概念
在ExampleElement这一端的属性名为ExampleModel,表示它所从属的ExampleModel类型,重数为1..1 ,表示它可以并且只可以从属于一个ExampleModel.
简单来说,这个嵌入关系也就表示了在我们的上一切最后运行起来的Dsl中,我们的ExampleModel模型中能够放多个ExampleElement,对于每一个ExampleElement只能从属于一个ExampleModel.
2.引用关系(reference relationship)
在我们的Dsl中看到引用关系ExempleElementReferencesTargets把两个ExampleElements关系起来,表示在两个ExampleElement之间可以建立ExempleElementReferencesTarget关系,引用关系一般有图形表示,所以在设计时通过拖动一条线来把两个模型关系起来,和嵌入关系一样,引用关系也可以设置多重性,表示是否允许和多个模型同时建立引用关系。在我们的例子中源和目标相同,重数为0..*,表示一个ExampleElement可以与多个其它的ExempleElement建立引用关系。
注意这里这不是代表着两个ExampleElement之间可以建立多个重复的引用关系,而是指不同的ExampleElement之间。允许重复的关系需要在关系的属性中设置Allows Duplicates为True.另外很重要的一点,Dsl会对每个域关系生成一个单独的类,模型中建立的每个关系都是这个类的一个实例。我们可以通过属性中的Code下面属性进行设置来控制生成的代码,我们可以设置GeneratesDoubleDerived属性为True,每个关系会生成两个类,父类ExampleModelHasElementsBase包含所有的实现,子类ExampleModelHasElements是一个partial类,所以你可以重载父类的方法来实现你自己的逻辑。另外我们也可以通过这种机制来实现生成的代码里实现某个我们自定义的接口。注意,同样也可以在域类上进行设置。
在这里我觉得有必要对几个概念加强区分一下:
域类---域模型
域模型包含域类和域关系,域类代表领域中的不同的类型,域关系代表两个域类中的关系信息。
(1) 域模型 --虚线里所所有的
(2) 域类Library
(3) 域类Person
(4) 域关系
(5)重数 * (表示在一个域模型中,一个Library可以有多个Person).
(6)重数 1 (表示一个Person,只能存在于一个Library中).
(7)源角色
(8)目标角色
出处:似水流年
责任编辑:bluehearts
上一页 Visual Studio DSL 入门(四) [1] 下一页 Visual Studio DSL 入门(四) [3]
◎进入论坛网络编程版块参加讨论
|