关于Visual Studio DSL改善状态机实例说明(1) 软件测试
文章将主要介绍Visual Studio DSL的一些基本的知识,包括域类,域关系,图形符号,图形映射等,虽然这些东西看起来有些抽象,但是其是开发我们自己的Visual Studio DSL之前必须要掌握的。
Vistual Studio DSL是微软针对特定领域开发而专门设计的,其主要作用是允许开发人员自行设计专属的图形化工具,DSL是微软为特定领域开发的方面会用到的工具。
在前几节中,我们以创建的默认项目介绍了Visual Studio DSL的一些基本的知识,包括域类,域关系,图形符号,图形映射等,这些东西看起来可能会有些抽象,和我们第二节介绍的需求还没有直接关系,不过这些概念确实我们开发我们自己的Visual Studio DSL之前必须要掌握的。
如果你对我们将要做的这个实际的案例的需求并不是很了解,请仔细需求一下我们这个状态机的需求.如果你第一次看这一系列,或者是对这些基础概念还不是很熟悉,建议你看一下前面的几节基础知识。首先,按照第三节创建一个Minimal Lanauge模板项目,打开DSLDefinition.DSL文件:
1. 把根域类ExampleModel的名称修改StateMachine.同时签入关系ExampleModelHasElements也会自动重命名为StateMachineHasElements.
2. 修改域关系StateMachineHasElements左侧的域角色Elements的属性名(Property Name 注意不是修改Name--域角色名)改成States.同时签入关系StateMachineHasElements自动更新为StateMachineHasStates. [你也可以直接在域角色上点击修改,因为图的域角色上显示的是属性名而非角色名).
3. 修改域关系StateMachineHasStates的右侧已经更名的域角色StateMachine,修改属性Name为State.[注意,这里修改的是Name,而不是Property Name].
4. 修改域类ExampleElement的Name为State。
注意这里是基于模板项目进行更改,当然,你也可以删除这些自动生成的域类而是全新重新添加.另外或许你对这里的属性名(property name)和域角色名(name)有些迷惑,请看前面的详细区分。其实到这一步我们已经完成了状态机与状态之间元数据的DSL描述,接下来我们来完成状态之间的关系。
5.我们可以看到,图中的State与State之间已经是引用关系,这正是我们想要的,我们修改关系StateReferencesTargets为Transition。
6.修改Targets为属性名为Suclearcase/" target="_blank" >ccessors,域角色名为Predecessor。
7.修改Sources的属性名为Predecessors,域角色名为Successor。
同样,如果不是基于修改,而是重新添加域类也是完全可以的,我们接下来给域类添加一些属性:
8.给域关系Transition右键添加域属性(DomainProperty)Event,Condition,Action,Label.类型都为string。现在来看一下我们的DSL,状态机StateMachine,状态State.State之间的有引用关系Transition,也就是我们需求中描述的转移,它的属性也就是状态机元数数据---事件Event,警戒条件Condition,操作Action。