• Dsl学习笔记-1


    现在工作中一直在使用前辈开发的IDE工具,使用非常方便,可以自动生成代码,可以统一处理业务上的逻辑,但是也有用的不爽的地方,自己想试着学习改下,但是发现打开后很多工程无法加载。

    然后自己查了一些资料发现要使用vs的dsl要先装vs2010的sp1,和sdk。安装完成后终于打开了。

    国外强人的Dsl使用心得:http://dotneteers.net/blogs/divedeeper/archive/2008/09/18/LearnVSXNowPart32.aspx

    什么是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.可以基于同一个模型配置不同的技术实现过程.降低技术难度和工作量。
         7.DSL不局限于生成我们的技术方案,还可以用来生成构建脚本,文档,计划等。
         8.使解决方案进行技术转移变得相对容易,通过修改生成器或解释器就可以做到。模型元数据相对固定,使我们的解决方案相对规范。我们只需要生成不同的代码就可以了。

  • 相关阅读:
    Pycharm中运行Python代码的几种方式
    Git同步Python代码
    抓包工具Charles的使用
    jmeter进行的接口测试和压力测试
    并发的HTTP请求,apache是如何响应的,以及如何调用php文件的
    http 请求头部解析
    display_errors","On");和error_reporting 区别和联系
    http
    curl
    正则 惰性和非惰性匹配
  • 原文地址:https://www.cnblogs.com/gavinhuang/p/3369828.html
Copyright © 2020-2023  润新知