Visual Studio DSL 入门(四)——基本概念
刚接触Visual Studio DSL时,被它的基本理论概念迷惑了很长时间, 我的建议是如果能够很快的理解这些概念最好.如果短时间内理解不了就大概了解下这些基础概念,就没有必要为了每一个概念一直深入,搞得自己头疼,倒不如在以后的实践中慢慢深入,理解并加深这些概念.
开发一个DSL需要创建的几个不同的组成部分:域模型,图形符号,工具箱,资源管理器和属性窗口,验证,序列化和部署,打开上一节我们创建的LanguageSm项目中的DslDefinition.dsl文件,可以看到在中心文档区域有左右两部分(两个泳道).
1.左侧是元数据模型(域模型). 也就是域类和域关系.
2.右侧是图形符合,也就是图形元素(Diagram Elements).
其实我们是在用DSL本身在创建DSL,这些描述本身也是在用DSL.

另外,域模型与图形符号之间通过连接器(Connectors)连接,域类之间可以通过关系relationships连接.
域模型 (Domain Model)
每一个DSL的核心都是一个域模型,它定义了语言所代表的各种概念,它们的属性,以及它们之间的关系。在模型驱动开发中,我们的模型要抽象出来,并用DSL的语法描述出来,这也就是用域模型来描述,只要我们有了域模型,工具箱,图形展现都是基于域模型然则创建的。
域模型有两个概念
1.根域类(root Domain Class)
任何一个DSL有且只有一个根域类,它和你的图形对应,这里说的图形是整个图形的概念。从我们上一节的项目中可以看到,我们创建的时候默认就自动创建了根域类(ExampleModel)和它对应的图形(ExampleShape)。
2.域类(Domain Class)
和根域类不一样,ExampleElement是真正意义上的模型。并且它有一个属性,名称为Name,类型为String.
域关系(domain relationships)
1.嵌入关系(embedding relationship)
嵌入关系表示一个模型能够嵌入在另外一个模型中。在我们的dsl中的可以找到嵌入关系ExampleModelHasElements,把ExampleModel和ExampleElement联系起来(见下图).

在ExampleModel这一端的属性名为Elements,这个集合属性是它包含所有的ExampleElement, 重数为0.*,表达它可以包含零个或者多个ExampleElement, 域角色是指它在这个关系中扮演的角色,角色名你可以通过点击域角色(这条线)在右面的属性里面看到,角色名往往和这一端的源属性名相反,和另外一端的属性名一致。
出处:似水流年
责任编辑:bluehearts
上一页 下一页 Visual Studio DSL 入门(四) [2]
◎进入论坛网络编程版块参加讨论
|