代码之家  ›  专栏  ›  技术社区  ›  amazedsaint

Microsoft Visual Studio SDK DSL工具-有认真的用户吗?

  •  10
  • amazedsaint  · 技术社区  · 17 年前

    我们正在考虑使用Microsoft DSL工具包来创建一些抽象设计器。我已经做了一些POC,但想得到一些意见。

    有人在这里分享他们使用微软DSL工具包和T4的经验吗?此外,任何指向开源DSL项目的指针都会有所帮助——例如,微软服务工厂建模版严重依赖DSL工具包。

    由于OSLO/Quadrant需要一些时间才能发布,我认为我们唯一的选择就是依靠微软的DSL设计器。 ( See Kieth's blog on the same )

    此外,以下是我已经掌握的有关DSL的一些信息:

    1. A Nice Lab in MSDN on DSL tools

    2. A List of Projects in Codeplex using DSL toolkit

    4 回复  |  直到 17 年前
        1
  •  5
  •   Preet Sangha    13 年前

    我们已经对DSL做了大量的工作,并有许多DSL供内部和基于客户的顾问使用,尽管不是我做了大部分工作。一旦你完成了建模(绝非易事),我会说这些都是很棒的工具。

    我不能不经意地指出任何开源项目,我还要补充一点,在启动和运行一个非平凡的DSL方面的投资是相当大的,但是如果你做对了,那么生产力的提高是令人印象深刻的。

    编辑-经过几年的经验,我有以下观察 :

    1. VS DSL的视觉性能很差——大型图表,你需要折叠模型元素(隐藏/显示)
    2. 具有许多互连线的大型图表很难导航(布局很难)
    3. 大型模型在代码生成等方面表现良好,大部分时间用于反序列化(正如预期的那样)
    4. 由于GUID数量庞大,模型比较很困难
    5. 良好的开发人员体验需要对开箱即用的属性对话框进行大量开发。
    6. 模型可以加密以保护IP,这使得以后的比较变得非常困难(但所有加密文件都是如此。)
        2
  •  4
  •   Community Mohan Dere    8 年前

    我研究了visual studio DSL工具包的使用。最终,我发现这些工具太难使用了。 在我看来,需要一个GUI,却无法轻松描述底层文本语法,这似乎是不够的。我需要在没有GUI的情况下轻松使用DSL的能力。

    Oslo似乎正朝着一个非常奇怪的方向发展,将DSL的所有元数据存储在SQL DB中。这对我来说似乎无关紧要,而且肯定会减慢速度,特别是如果你想快速集成IDE。诚然,我没有深入研究它,所以它可能比我的印象要好。

    顺便说一句,我最近使用 Antlr 你可以找到我的帖子,作为对SO上关于它的问题的回应 here

        3
  •  2
  •   John Saunders    16 年前

    除此之外 NORMA 对象角色建模工具是在DSL工具的基础上构建的。这是一个非常复杂的例子,展示了如何使用它们,并演示了如何使用XML Transforms进行模型转换和代码生成。

        4
  •  0
  •   Glenn    17 年前

    我绝对是个认真的接受者。Iv最近制作了一个dsl来模拟订购系统的订购流程。我们使用一个窗口服务,它根据特定行的进程状态连接到不同的Web服务,然后根据结果更改状态(Next、Error、Denial)。手动编辑数据库表非常耗时,所以我为sql代码制作了一种语言和生成器。

    我必须检查是否允许我发布项目中的任何代码,但我发布了DB结构,这样你就可以理解为什么手动编辑它很困难。我必须输入数据以备不时之需。10个订单流程,每个流程有5-20个步骤,每个步骤都有操作和所有内容(ProcessActionId是对Web服务的引用)。

    CREATE TABLE [dbo].[OrderProcessStep](
        [OrderProcessCode] [int] NOT NULL,
        [PreviousProcessStatusCode] [int] NOT NULL,
        [NextProcessStatusCode] [int] NULL,
        [DenialProcessStatusCode] [int] NULL,
        [ErrorProcessStatusCode] [int] NULL,
        [ProcessActionId] [int] NULL,
        [StepComment] [varchar](500) NOT NULL,
        [SecondsToNext] [int] NULL,
        [SecondsToError] [int] NULL,
        [SecondsToDenial] [int] NULL,
     CONSTRAINT [PK_OrderProcess] PRIMARY KEY CLUSTERED 
    (
        [OrderProcessCode] ASC,
        [PreviousProcessStatusCode] ASC
    )
    
    推荐文章