我见过一个使用部分类和部分方法来允许重新生成代码而不影响自定义代码的系统。如果您愿意,“规则引擎”完全是从 Visio 状态图生成的。这基本上是糟糕的工作流程,但很容易修改。Viso 图表导出为 XML,使用 powershell 和 T4 读取 XML 以生成类。
上面的例子是一个外部 DSL。IE 在运行应用程序的编程语言之外。另一方面,您可以创建一个内部 DSL,该 DSL 在编程语言中实现和使用。
这篇和 Code-Magazine 上一篇关于 DSLS的文章都非常好。
在上面的链接中,Neal Ford 向您展示了如何使用流利的接口在 C# 中创建内部 DSL。
他还没有提到的一件事是你可以把这个属性 [EditorBrowsable(EditorBrowsableState.Never)] 放在你的方法上,这样它们就不会被智能感知。这意味着您可以对 DSL 的用户隐藏类上的非 DSL(如果您愿意的话)方法,从而使 fluent API 更容易被发现。
您可以在Daniel Cazzulino编写的关于使用 TDD 编写 IoC 容器的视频系列中看到流畅的界面正在实时编写
关于外部 DSL,您还可以选择Oslo(目前是 CTP),它非常强大,可以让您创建可以直接执行的外部 DSL,而不是使用想到的代码生成它根本不是一个 DSL。