对于一个小小的夜间项目,我想编写一个验证组件,它可以在 .NET 应用程序中用于对对象、输入参数和后置条件进行通常而乏味的验证。
我的第一个想法是将所有这些验证设置逻辑转储到 XML 配置文件中,并为希望在代码中使用它的人们提供一个流畅的界面。
因为我想提供一些实际可用的东西,所以我考虑提供一种专门的 DSL(领域特定语言)。问题是我应该使用什么工具来做到这一点?
我考虑过使用正则表达式手动解析它。但就我个人而言,我想要更多……可用的东西。
那么你有什么建议呢?
听起来您正在谈论实现.Net 4.0 的功能之一,即代码合同。
所以我想我推荐的工具是 VS.Net 2010。
如果您专门研究 DSL,请查看ANTLR项目。过去,我们在我的公司非常成功地使用过它。
DSl 的问题是它们很少单独有效。要对编写真正的软件有用,您确实需要能够将 DSL 嵌入到宿主语言中。例如,比较 Linq 的工作方式与直接 SQL 的工作方式。另一个很好的例子是 VB 中的 XML 文字特性。两者都可以让您在通用 PL 中编写真正的代码,并将其与更简单的声明性 DSL 代码交织在一起。
结果是比独立的 SQL 或简单的 XML 编辑器更强大的东西。
不幸的是,这样做的缺点是 C# 和 VB 都没有提供任何元编程功能,因此主流 .net 开发人员的唯一方法是构建自己的语言。如果您只是为了好玩而做的事情,您可以修改单声道 C# 编译器以将您感兴趣的功能添加到该语言中。另一种选择可能是尝试红宝石。它有一个灵活的语法,让你摆脱很多疯狂。然而,就个人而言,我更喜欢被黑的 C# 方法。
可能想查看在 Boo 中构建领域特定语言(Boo 是一种 CLR 语言,概念应该延续到 C#)。一个示例项目是简单状态机。
为什么要走这么远?开始使用泛型和流畅的界面。从简单开始,然后通过一些生产来工作。如果处理流畅界面的摩擦太大,那么请考虑使用 DSL。
您可以尝试适用于 Visual Studio 的 DSL 工具。