怎样浅析Visual Studio中的特定领域开发,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
将列数Visual Studio中的DSL,也就是特定领域开发的方面会用到的工具,包括微软以及其他企业开发的平台。这些工具能为大家的.NET开发之路提供更多的便利。
什么是特定领域开发和DSL
特定领域开发是用来解决重复发生的问题的方法,针对每次发生的问题,通过进行总结和分析,他们之间相同的方面可以一次性的解决.而经常变化的方面,可以采用一种特殊的语言表达.针对这个特殊语言,我们可以建立模型或者表达式,然后插入到固定部分.
对于我们软件行业的解决方案来说,固定部分一般采用传统的设计和实现方式,可以为框架,平台,解释器或者编程接口.提供可扩展性,具有高度的抽象性和可复用性.而特定领域语言专门用来创建变化的部分,从而使整个解决方案可具有可应用性.
特定领域语言(DSL,Domain Specific Language)是一种特别用来描述某一专业领域内涵的描述语言,其实它并不陌生, HTML ,SQL都算的上是DSL的例子.
几种其它DSL
MPS http://www.jetbrains.com/mps/ JetBrains公司的DSL工具,通过这个平台可以直接定义规则,生成代码
MetaEdit+ http://www.metacase.com/ 图形化的DSL工具
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,关系存储组成.
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来实现的。
为什么要使用DSL工具
上面介绍了几种DSL工具,但是我们为什么要使用它呢?它又能给我们带来什么呢? 很关键的一点,DSL和UML不同,是用来解决问题的,而不是描述问题.如果你正在你的工作和解决方案中重复编写着相同或者相似的代码,而且这些重复的代码能够单独出来采用生成的方式,那么你就可以考虑结合DSL工具来生成这些代码.
可能有人会说,那这和使用现有的这些基于数据库的代码生成工具(Codesmith,李天平的codematic等)又有何不同呢?DSL是站在领域专家的高度,而非软件开发专家来开始解决问题,如果需要对数据库进行设计,然后再生成代码Coding,那么你这个工具只能说是开发人员的一个辅助工具,只是面对实际开发人员,而这在大型的软件系统当中会有些力不从心.
采用DSL的开发过程定制
找出问题的固定部分,并把这些固定固定部分放在通用架构或平台中.通用的部分基本上都是我们根据长期的经验和积累抽象出来固定的.比如我们使用的Enterprise Library中已经将数据访问操作,日志操作,验证缓存等封装起来提供调用.
识别可变性和发现DSL. 找出其中变化的部分,并设计DSL, 通过DSL的表达式或模型提供给问题一个解决方案. 在使用Enterprise Library过程中,你发现其中大部分的变化的部分其实也相对"固定",他们还是基于你的模型,基于你的实体模型,服务模型,如果把这些元数据抽象出来,通过DSL来实现这些元数据的配置,那么就可以把这些部分直接生成到你的目标解决方案中.
优势
大幅度的提高生产率. 生成代码可比人工复制粘贴快多了。
使系统的规范性更强. 每个开发人员对某一个功能的都会有不同的实现方式,采用DSL设计模型,结合代码生成能够使功能的实现相对固定.
降低了犯错的机会.
使非开发人员,那些顾问和售前,也能够直接了解模型。使开发过程提前,甚至顾问的调研需求时,就可以使用工具和客户沟通,抽象需求,从而提供给二次开发人员使用.
能够在较高的抽象层次对解决方案进行验证,过早的发现问题.
可以基于同一个模型配置不同的技术实现过程.降低技术难度和工作量。比如上次介绍的Sculpture,就可以针对不同的层次,提供不同的技术选择。针对同一个模型,我们可以选择使用Entity Framework或者NHibernate。UI层可以选择Asp.net MVC,Sliverlight,WPF等不同的实现方式.
DSL不局限于生成我们的技术方案,还可以用来生成构建脚本,文档,计划等。
使解决方案进行技术转移变得相对容易,通过修改生成器或解释器就可以做到。模型元数据相对固定,使我们的解决方案相对规范。我们只需要生成不同的代码就可以了。
当然,这也是有前提的,一是开发DSL,进行抽象整合需要成本。二是并不是所有的解决方案都适合使用DSL,比如一个门户网站,可能相对固定的部门很少,可以定制的部分也很少,就不适合使用,如果对不适合使用的强制使用就会陷进定制化陷阱。在设计和开发时,一定要保留一定的灵活性,因为不可能所有的代码都能够生成,你必须提供一定的扩展性,保证能够对生成的代码进行扩展。另外就是一定要保证实现的规范,实现方式太多,会导致你的DSL过于复杂。有些时候你甚至需要舍弃一些实现,舍弃一些需求。“简单的问题的解决应该简单化,复杂问题的解决应该可能化”(smalltalk的创始人AlianKay).
系列介绍
本系列一开始将通过一个案例简单的介绍DSL的开发流程,这个案例来源于DSL Tools Lab,主要介绍DSL的一些简单开发方法,其中也包括T4与DSL结合完成代码生成,DSL工具的部署. 主要是完成一个状态机的DSL应用,具体我们会在接下来一一介绍。
对DSL的开发有过简单的了解后,我们会对完成一个实际使用的完整的开发工具的开发。在这个过程中也会包含介绍DSL设计和开发过程以及应该注意的问题,当然也会包括DSL以及VSX的一些比较深层次的应用。
关于怎样浅析Visual Studio中的特定领域开发问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。