10

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

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

由于 OSLO/Quadrant 需要一些时间才能发布,我认为我们唯一的选择是依靠 Microsoft DSL 设计器。(参见 Kieth 的博客

另外,这里有一些我已经掌握的关于 DSL 的信息:

1 - MSDN 中关于 DSL 工具的一个不错的实验室

2 - Codeplex 中使用 DSL 工具包的项目列表

4

4 回答 4

5

我们已经对 DSL 进行了大量的工作,其中有一些是供内部和基于客户的顾问使用的,尽管使用它们完成大部分工作的不是我。一旦你完成了建模(不小的壮举),我会说这些都是很棒的工具。

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

编辑 - 经过几年的经验,我提出以下意见

  1. VS DSL 的大图视觉性能很差,您需要将模型元素折叠起来(隐藏/显示)
  2. 具有许多互连线的大型图表难以导航(布局很难)
  3. 大型模型在代码生成等方面表现良好,时间主要用于反序列化(如预期的那样)
  4. 由于 GUID 数量众多,模型比较很困难
  5. 良好的开发人员体验需要对开箱即用的属性对话框进行大量开发。
  6. 可以对模型进行加密以保护 IP,这使得以后比较非常困难(但对于所有加密文件都是如此。)
于 2009-03-18T03:34:05.230 回答
4

我看过 Visual Studio DSL 工具包的使用。最终,我发现这些工具远非限制性的。需要一个 GUI,而没有任何能力轻松描述底层文本语法,这对我来说似乎是不够的。我需要能够在没有 GUI 的情况下轻松使用 DSL。

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

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

于 2009-07-12T03:05:24.433 回答
2

除了上述之外,用于对象角色建模的NORMA工具是建立在 DSL 工具上的。这是一个非常复杂的示例,说明了可以使用它们做什么,并演示了使用 XML 转换进行模型转换和代码生成。

于 2009-07-12T02:30:02.370 回答
0

我绝对是一个认真的接受者。Ivé 最近制作了一个 dsl 来为订购系统的订购流程建模。我们使用一个 windowsservice,它根据特定行的进程状态连接到不同的 web 服务,然后根据结果(下一步、错误、拒绝)更改状态。手动编辑该数据库表非常耗时,因此我为 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
)
于 2009-03-19T12:17:24.137 回答