2

对于一个小小的夜间项目,我想编写一个验证组件,它可以在 .NET 应用程序中用于对对象、输入参数和后置条件进行通常而乏味的验证。

我的第一个想法是将所有这些验证设置逻辑转储到 XML 配置文件中,并为希望在代码中使用它的人们提供一个流畅的界面。

因为我想提供一些实际可用的东西,所以我考虑提供一种专门的 DSL(领域特定语言)。问题是我应该使用什么工具来做到这一点?

我考虑过使用正则表达式手动解析它。但就我个人而言,我想要更多……可用的东西。

那么你有什么建议呢?

4

8 回答 8

5

听起来您正在谈论实现.Net 4.0 的功能之一,即代码合同

所以我想我推荐的工具是 VS.Net 2010。

于 2009-09-16T21:56:47.330 回答
1

如果您专门研究 DSL,请查看ANTLR项目。过去,我们在我的公司非常成功地使用过它。

于 2009-09-17T04:15:36.923 回答
0

DSl 的问题是它们很少单独有效。要对编写真正的软件有用,您确实需要能够将 DSL 嵌入到宿主语言中。例如,比较 Linq 的工作方式与直接 SQL 的工作方式。另一个很好的例子是 VB 中的 XML 文字特性。两者都可以让您在通用 PL 中编写真正的代码,并将其与更简单的声明性 DSL 代码交织在一起。

结果是比独立的 SQL 或简单的 XML 编辑器更强大的东西。

不幸的是,这样做的缺点是 C# 和 VB 都没有提供任何元编程功能,因此主流 .net 开发人员的唯一方法是构建自己的语言。如果您只是为了好玩而做的事情,您可以修改单声道 C# 编译器以将您感兴趣的功能添加到该语言中。另一种选择可能是尝试红宝石。它有一个灵活的语法,让你摆脱很多疯狂。然而,就个人而言,我更喜欢被黑的 C# 方法。

于 2009-09-30T04:11:03.087 回答
0

可能想查看在 Boo 中构建领域特定语言(Boo 是一种 CLR 语言,概念应该延续到 C#)。一个示例项目是简单状态机

于 2009-09-30T04:13:58.537 回答
0

看看Microsoft 的Oslo,不确定它是否符合您的要求,但我知道您可以构建 DSL 解析器并指定语法并让它生成可以根据语法解析数据的类库。

“M”语言的更多细节以及如何使用它在这里

于 2009-09-30T07:00:29.760 回答
0

为什么要走这么远?开始使用泛型和流畅的界面。从简单开始,然后通过一些生产来工作。如果处理流畅界面的摩擦太大,那么请考虑使用 DSL。

于 2009-09-30T15:23:15.967 回答
0

您可以尝试适用于 Visual Studio 的 DSL 工具。

于 2009-10-07T17:30:23.573 回答
0

您应该在http://irony.codeplex.com/上查看 Irony 项目

于 2013-05-23T16:34:54.150 回答