浅析Visual Studio中的特定领域开发

开发 后端
在这里我们将讨论的是Visual Studio中的DSL,也就是特定领域开发的内容。可以说在Visual Studio中使用SQL和HTML都属于DSL的范围。

本文将列数Visual Studio中的DSL,也就是特定领域开发的方面会用到的工具,包括微软以及其他企业开发的平台。这些工具能为大家的.NET开发之路提供更多的便利。

什么是特定领域开发和DSL

特定领域开发是用来解决重复发生的问题的方法,针对每次发生的问题,通过进行总结和分析,他们之间相同的方面可以一次性的解决.而经常变化的方面,可以采用一种特殊的语言表达.针对这个特殊语言,我们可以建立模型或者表达式,然后插入到固定部分.

对于我们软件行业的解决方案来说,固定部分一般采用传统的设计和实现方式,可以为框架,平台,解释器或者编程接口.提供可扩展性,具有高度的抽象性和可复用性.而特定领域语言专门用来创建变化的部分,从而使整个解决方案可具有可应用性.

特定领域语言(DSL,Domain Specific Language)是一种特别用来描述某一专业领域内涵的描述语言,其实它并不陌生, HTML ,SQL都算的上是DSL的例子.

几种其它DSL

MPS http://www.jetbrains.com/mps/ JetBrains公司的DSL工具,通过这个平台可以直接定义规则,生成代码

MPS

MetaEdit+ http://www.metacase.com/ 图形化的DSL工具

MetaEdit+

Oslo http://msdn.microsoft.com/zh-cn/data/ee460940(en-us).aspx 微软新推出的图形化DSL语言,但是Oslo和我们要介绍的DSL Toolkit还是有些区别的,这里有一些介绍http://blogs.msdn.com/keith_short/archive/2008/11/06/oslo-and-the-dsl-toolkit.aspx .Oslo由 “M"语言,工具Quadrant,关系存储组成.

oslo

DSL工具

GMF,EMF http://www.eclipse.org/modeling/gmf/ 使用 Eclipse Modeling Framework (EMF) 和 Graphical Modeling Framework (GMF) 技术来为领域特定语言(DSL)产生领域特定建模(DSM)辅助工具

辅助工具

什么是Visual Studio DSL

Vistual Studio DSL 工具,是微软针对特定领域开发而专门设计的.包含在Vistual Studio SDK中(vs 2010中将是单独安装),允许开发人员自行设计专属的图形化工具,它内置了模型的相关支持,以及模型与图形之间的支持,还包括对模型的验证,规则,事务的支持,同时还允许开发人员在结合VS.NET的一些扩展VSX一同使用.比如工具条,菜单等.可以将模型与T4一同使用,从而生成目标代码.Vs.Net现在的类设计器,分布式系统设计器(Distributed System Designer),LinqToSql设计器,EntityFramework设计器都是基于VS.NET DSL开发的,VS 2010新增了UML Modeling Project,终于提供了对类图,时序图,用例图等的支持,这也是基于Vs.NET DSL来实现的。

#T#

为什么要使用DSL工具

上面介绍了几种DSL工具,但是我们为什么要使用它呢?它又能给我们带来什么呢? 很关键的一点,DSL和UML不同,是用来解决问题的,而不是描述问题.如果你正在你的工作和解决方案中重复编写着相同或者相似的代码,而且这些重复的代码能够单独出来采用生成的方式,那么你就可以考虑结合DSL工具来生成这些代码.

可能有人会说,那这和使用现有的这些基于数据库的代码生成工具(Codesmith,李天平的codematic等)又有何不同呢?DSL是站在领域专家的高度,而非软件开发专家来开始解决问题,如果需要对数据库进行设计,然后再生成代码Coding,那么你这个工具只能说是开发人员的一个辅助工具,只是面对实际开发人员,而这在大型的软件系统当中会有些力不从心.

采用DSL的开发过程定制

1.找出问题的固定部分,并把这些固定固定部分放在通用架构或平台中.通用的部分基本上都是我们根据长期的经验和积累抽象出来固定的.比如我们使用的Enterprise Library中已经将数据访问操作,日志操作,验证缓存等封装起来提供调用.

2.识别可变性和发现DSL. 找出其中变化的部分,并设计DSL, 通过DSL的表达式或模型提供给问题一个解决方案. 在使用Enterprise Library过程中,你发现其中大部分的变化的部分其实也相对"固定",他们还是基于你的模型,基于你的实体模型,服务模型,如果把这些元数据抽象出来,通过DSL来实现这些元数据的配置,那么就可以把这些部分直接生成到你的目标解决方案中.

优势

1.大幅度的提高生产率. 生成代码可比人工复制粘贴快多了。

2.使系统的规范性更强. 每个开发人员对某一个功能的都会有不同的实现方式,采用DSL设计模型,结合代码生成能够使功能的实现相对固定.

3.降低了犯错的机会.

4.使非开发人员,那些顾问和售前,也能够直接了解模型。使开发过程提前,甚至顾问的调研需求时,就可以使用工具和客户沟通,抽象需求,从而提供给二次开发人员使用.

 

5.能够在较高的抽象层次对解决方案进行验证,过早的发现问题.

 

6.可以基于同一个模型配置不同的技术实现过程.降低技术难度和工作量。比如上次介绍的Sculpture,就可以针对不同的层次,提供不同的技术选择。针对同一个模型,我们可以选择使用Entity Framework或者NHibernate。UI层可以选择Asp.net MVC,Sliverlight,WPF等不同的实现方式.

 

7.DSL不局限于生成我们的技术方案,还可以用来生成构建脚本,文档,计划等。

 

8.使解决方案进行技术转移变得相对容易,通过修改生成器或解释器就可以做到。模型元数据相对固定,使我们的解决方案相对规范。我们只需要生成不同的代码就可以了。

 

当然,这也是有前提的,一是开发DSL,进行抽象整合需要成本。二是并不是所有的解决方案都适合使用DSL,比如一个门户网站,可能相对固定的部门很少,可以定制的部分也很少,就不适合使用,如果对不适合使用的强制使用就会陷进定制化陷阱。在设计和开发时,一定要保留一定的灵活性,因为不可能所有的代码都能够生成,你必须提供一定的扩展性,保证能够对生成的代码进行扩展。另外就是一定要保证实现的规范,实现方式太多,会导致你的DSL过于复杂。有些时候你甚至需要舍弃一些实现,舍弃一些需求。“简单的问题的解决应该简单化,复杂问题的解决应该可能化”(smalltalk的创始人AlianKay).

 

系列介绍

 

本系列一开始将通过一个案例简单的介绍DSL的开发流程,这个案例来源于DSL Tools Lab,主要介绍DSL的一些简单开发方法,其中也包括T4与DSL结合完成代码生成,DSL工具的部署. 主要是完成一个状态机的DSL应用,具体我们会在接下来一一介绍。

 

介绍

对DSL的开发有过简单的了解后,我们会对完成一个实际使用的完整的开发工具的开发。在这个过程中也会包含介绍DSL设计和开发过程以及应该注意的问题,当然也会包括DSL以及VSX的一些比较深层次的应用。

设计

 

 

参考

 

Visual Studio DSL 工具特定领域开发指南 Doamin-Specific Development With Visual Studio DSL Tools

原文标题:Visual Studio DSL 入门 1

链接:http://www.cnblogs.com/lonely7345/archive/2010/01/24/1655495.html

 

责任编辑:彭凡 来源: 博客园
相关推荐

2010-02-02 09:38:29

Visual Stud

2010-01-25 16:58:15

C++程序

2009-11-02 14:16:43

Visual Stud

2010-07-20 08:43:00

Visual Stud

2010-02-23 16:24:47

Visual Stud

2009-11-03 09:21:26

Visual Stud

2009-09-27 08:57:29

Visual Stud

2009-10-20 09:59:44

Visual Stud

2024-02-27 12:42:38

开发前端

2009-11-02 14:06:59

Visual Stud

2010-03-01 09:16:22

Visual Stud

2009-06-23 10:36:32

移动开发isual Studi

2010-11-16 09:23:13

敏捷开发Visual Stud

2010-05-21 09:10:56

Visual Stud

2009-08-05 11:02:30

Visual Stud

2010-09-13 08:48:04

Visual Stud

2010-01-18 14:41:52

Visual C++开

2011-01-10 08:48:53

2009-12-16 14:34:32

Visual Stud

2011-02-13 17:10:28

Visual Stud
点赞
收藏

51CTO技术栈公众号