zoukankan      html  css  js  c++  java
  • 一起谈.NET技术,Visual Studio DSL 入门 1 狼人:

    什么是特定领域开发和DSL
         特定领域开发是用来解决重复发生的问题的方法,针对每次发生的问题,通过进行总结和分析,他们之间相同的方面可以一次性的解决.而经常变化的方面,可以采用一种特殊的语言表达.针对这个特殊语言,我们可以建立模型或者表达式,然后插入到固定部分. 
         对于我们软件行业的解决方案来说,固定部分一般采用传统的设计和实现方式,可以为框架,平台,解释器或者编程接口.提供可扩展性,具有高度的抽象性和可复用性.而特定领域语言专门用来创建变化的部分,从而使整个解决方案可具有可应用性. 
         特定领域语言(DSL,Domain Specific Language)是一种特别用来描述某一专业领域内涵的描述语言,其实它并不陌生, HTML ,SQL都算的上是DSL的例子.

    几种其它DSL 
         MPS   http://www.jetbrains.com/mps/   JetBrains公司的DSL工具,通过这个平台可以直接定义规则,生成代码
         image123
         MetaEdit+  http://www.metacase.com/    图形化的DSL工具
         conference-registration500w
         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,关系存储组成.
          image_2
          image_6
         GMF,EMF   http://www.eclipse.org/modeling/gmf/   使用 Eclipse Modeling Framework (EMF) 和 Graphical Modeling Framework (GMF) 技术来为领域特定语言(DSL)产生领域特定建模(DSM)辅助工具
          cbe_ecore

    什么是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的开发过程定制
          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应用,具体我们会在接下来一一介绍。

    clip_image002

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

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

  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/waw/p/2158783.html
Copyright © 2011-2022 走看看