Microsoft Visual Studio SDK DSL工具 - 任何认真的接受者?

时间:2008-12-15 19:53:52

标签: .net visual-studio dsl dsl-tools visual-studio-sdk

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

在这里有人分享使用Microsoft DSL Toolkit和T4的经验吗?此外,任何指向开源DSL项目的指针都会有所帮助 - 例如。 Microsoft Service Factory建模版在很大程度上依赖于DSL工具包。

由于OSLO / Quadrant需要一些时间才能发布,我认为我们唯一的选择就是依赖Microsoft 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 个答案:

答案 0 :(得分:5)

我们已经在DSL上做了大量的工作,并且有许多用于内部和客户的顾问使用,尽管我没有与他们做过大部分工作。一旦你完成了建模(不小的壮举),我会说这些都是很棒的工具。

我不能指出你在任何开源项目上的不幸,我会补充说,投入一个非常重要的DSL并运行起来是非常大的,但是如果你把它们弄好,那么生产力提升是令人印象深刻的。

编辑 - 经过几年的经验,我做了以下观察

  1. VS DSL具有糟糕的视觉性能大图,你需要折叠模型元素(隐藏/显示)
  2. 具有许多互连线的大图很难导航(布局很难)
  3. 大型模型适用于代码生成等,主要用于反序列化(如预期)
  4. 由于GUID数量众多,模型比较很困难
  5. 良好的开发人员体验需要在开箱即用的属性对话框上进行大量开发。
  6. 模型可以加密以保护IP,这使得后来的比较非常困难(但对于所有加密文件都是如此。)

答案 1 :(得分:4)

我已经看过使用visual studio DSL工具包了。最终,我发现这些工具远远不能收缩。 要求GUI,没有任何容易描述基础文本语法的能力,对我来说似乎不够。我需要能够在没有GUI的情况下轻松使用DSL。

奥斯陆似乎走向了一个非常奇怪的方向,将所有DSL元数据存储在SQL DB中。这对我来说似乎无关紧要,当然可以减慢速度,特别是如果你想要快速的IDE集成。不可否认,我没有深入研究它,所以它可能比我对它的印象更好。

顺便说一句,我最近使用Antlr实现了DSL。您可以找到我的帖子作为对SO的问题的回复here

答案 2 :(得分:2)

除上述内容外,用于对象角色建模的NORMA工具也是基于DSL工具构建的。这是一个非常复杂的例子,可以用它们做些什么,并演示如何使用XML Transforms进行模型转换和代码生成。

答案 3 :(得分:0)

我绝对是一个严肃的接受者。 Ivé最近制作了一个dsl来为订单系统建模订单处理。我们使用一个windowsservice,它根据特定行所具有的进程状态连接到不同的Web服务,然后根据结果更改状态(Next,Error,Denial)。手动编辑db-table非常耗时,所以我为sql代码创建了一个语言和生成器。

我必须检查是否允许发布项目中的任何代码,但我发布了数据库结构,这样您就可以理解为什么很难手动编辑。我必须为aprox输入数据。 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
)