我们正在考虑使用Microsoft DSL工具包来创建一些抽象设计器。我已经做了一些POC,但是想得到一些意见。
在这里有人分享使用Microsoft DSL Toolkit和T4的经验吗?此外,任何指向开源DSL项目的指针都会有所帮助 - 例如。 Microsoft Service Factory建模版在很大程度上依赖于DSL工具包。
由于OSLO / Quadrant需要一些时间才能发布,我认为我们唯一的选择就是依赖Microsoft DSL设计师。 (See Kieth's blog on the same)
此外,以下是我在DSL上已有的一些信息:
答案 0 :(得分:5)
我们已经在DSL上做了大量的工作,并且有许多用于内部和客户的顾问使用,尽管我没有与他们做过大部分工作。一旦你完成了建模(不小的壮举),我会说这些都是很棒的工具。
我不能指出你在任何开源项目上的不幸,我会补充说,投入一个非常重要的DSL并运行起来是非常大的,但是如果你把它们弄好,那么生产力提升是令人印象深刻的。
编辑 - 经过几年的经验,我做了以下观察:
答案 1 :(得分:4)
我已经看过使用visual studio DSL工具包了。最终,我发现这些工具远远不能收缩。 要求GUI,没有任何容易描述基础文本语法的能力,对我来说似乎不够。我需要能够在没有GUI的情况下轻松使用DSL。
奥斯陆似乎走向了一个非常奇怪的方向,将所有DSL元数据存储在SQL DB中。这对我来说似乎无关紧要,当然可以减慢速度,特别是如果你想要快速的IDE集成。不可否认,我没有深入研究它,所以它可能比我对它的印象更好。
答案 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
)