从这节开始我们就开始我们的DSL之旅, 首先确保你已经安装了Visual Studio Sdk,并且使用的是Visual Studio 2008.我们先大概创建一个简单的DSL项目,通过这个项目来了解dsl的开发环境和流程.
1. 打开VS.NET ,新建--项目, 点击其它项目类型--扩展性(Extensibility). 这里列出来了vs.net扩展类型的项目,包括Addin,VSPackage,Dsl等项目类型,选择"Domain Specific Lan guage Designer”,点击确定
2.接下来进入DSL创建向导,将会提供四种DSL模型模板提供我们选择,其实他们只是给我们提供了不同的Sample提供查看,也方便我们更方便的开始.
Class Diagrams 由UML类图组成,包含类,接口,关系,组合,属性,操作等.
Component Models 组件模型,子组件组成的组件.
Minimal Language 只包含一个简单的空的语言模型
Task Flow 创建类似UML状态图模型
3. 在这里我们选择Minimal Language,并保持Language Name默认即可,点击下一步,设计Language的模型文件的后缀名和文件图标。如果你输入的后缀名已经被使用,中间的框中会列出搜索到的注册的后缀名列表。在这里我们输入sm作为后缀名,保持使用默认的图标.
4. 点击下一步,进入到产品设置,主要设计产品名称,所属公司,项目名称空间.这些信息将会包含在最后生成的项目中,在最后的产品部署中起到作用。在这里我们不进行更改,可以直接保持默认即可.
5. 下一步进入到签名设置,在扩展开发中任何需要部署的Package都需要强命名(将会注册到GAC),可以选择自动创建一个Key,也可以选择使用已有的key.
6. 我们选择直接创建强命名key,点击下一步,这是一个设置总结界面:
我们直接能查看到所有的设置信息,可以通过上一步下一步进行更改,也可直接点击左侧的导航来定位更改,确认无误后,点击完成。向导(Wizard)会自动给我们构建项目.我们暂且不管生成的这些项目结构,切换到解决方案资源管理器,点击上面的最后面的按钮“转换所有模板”(Transalte All Template).完成后,点击Debug运行,就会打开Visual Studio实验室环境(Experimental hive),也就是上面的Minimal Language界面,可以大概操作一下了,相当神奇吧,这就完成了第一个DSL项目的开发.同样你也可以选择其它三种模型,效果在上面已经列出来了.
7. 我们再来看一下生成的项目结构,整个解决方案总共有两以下两个项目组成(其它有三个,另外就是运行后的Testing项目,稍后介绍).
Dsl: 根据你的模型数据(DslDefinition.dsl文件)生成的有关模型的操作,包括模型关系,序列化,图形,连接器等
DslPackage: 支撑Dsl能够在Vs.net里运行,以及和Vs.net交互的操作,包括菜单,工具条,游览器等
Dsl项目设置成了针对DslPackage项目的友元程序集(通过AssemblyInfo的InternalsVisibleTo),DslPackage中可以直接访问Dsl中的内部成员,DslPackage其实也是根据DslDefinition.dsl生成的.深入了解这两个项目的结构是非常有必要的,我们会在随后的深入过程中介绍。
8. 查看这两个项目,发现大部分都是由后缀名为tt的文件组成,这就是t4文件(Text Templating Transformation Toolkit),类似于asp,ruby这样的解释性语言,读我们的模型生成cs代码,可以看到每个tt文件都附属了一个cs代码文件.绑定到了每个t4文件可以右键运行自定义工具Run Custom Tool,就会调用TextTemplatingFileGenerator解析t4模板文件生成目标代码,也可以向我们刚才那个点击上面的按钮转换所有的模板文件.
9. 打开Dsl项目中的DslDefinition.dsl文件.(这是通常情况下我们使用的最重要的文件,包括我们的Dsl的所有的模型元素数据,它附属的DslDefinition.dsl.Diagram是它的图形显示文件).
这就是模型设计的主区域,我们来看一下它的组成部分:
1). 工具条,这里包括模型,关系,图形. 这个工具条与.Dsl文件关系。
2). 模型元数据. 这些概念的东西我们在下一切会介绍.
3). 图形展现. 设计模型的展现信息,通过中间的那条线与模型对应起来
4). Dsl Details编辑窗口, 用来编辑Dsl相关的一些信息,比如关系。
5). 解决方案文件夹,注意上面的黄色区域就是”转换所有模板“按钮,点击下面的Dsl Explorer页签,切换到Dsl浏览器.
这里会列出来当前Dsl文件里的模型,模型元素Element,图Shape,类型,连接器Connector,Connection Builders,以通读对模型浏览器,工具条,序列化的设置。我们对Dsl的大部分设计都会在这里完成.
Ok,就到这里,下次将介绍一些基础概念.