【问题标题】:Microsoft Visual Studio SDK DSL Tools - Any serious takers?Microsoft Visual Studio SDK DSL 工具 - 有认真的人吗?
【发布时间】:2008-12-15 19:53:51
【问题描述】:

我们正在考虑使用 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

【问题讨论】:

  • 我试图了解这一切是如何运作的。用户是否需要获得 Visual Studio 许可证才能使用您的 DSL?
  • 要创建 DSL 包,请下载并安装 Visual Studio SDK。 DSL 包与任何其他 VS 包一样,您需要一个包加载密钥来部署。 msdn.microsoft.com/en-us/library/bb165795(VS.80).aspx
  • AFAIK 所有的 Visual Studio UML 工具都是使用公共建模和可视化 SDK 构建的......这是一个非常认真的接受者

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • @Darien:这个问题专门针对 DSL 工具包。
    • 啊,你是对的,我弄错了关于开源项目的部分问题。柱体删除
    • 实际上,我会对其进行编辑以更多地反映我对 MS 所拥有的工具的看法。
    • @Darien:SQL Server DB 只是 Oslo 的目标之一。您还可以获得 AST 或“MSchema”。 DB(SQL Server Express == 免费)对于模型及其实例应该在同一个地方可供多个利益相关者使用的情况很方便。示例:应用程序和服务的配置。
    【解决方案3】:

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

    【讨论】:

    【解决方案4】:

    我绝对是一个认真的人。 Ivé 最近制作了一个 dsl 来为订购系统的订购流程建模。我们使用一个 windowsservice,它根据特定行的进程状态连接到不同的 web 服务,然后根据结果(下一步、错误、拒绝)更改状态。手动编辑那个 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
    )
    

    【讨论】:

    • 听起来很酷。其实我们也做过这样的事情,主要是为了通过原型和dto对象生成点击
    • 当然,你可以简单地使用一个ORM来生成所有的Repository保存代码......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多