如何避免在Scala中编写令人困惑的DSL

时间:2019-04-10 20:16:40

标签: scala dsl software-design

我已阅读评论,指出Scala的灵活性使开发人员可以轻松编写难以理解和推理的DSL。

DSL之所以可行是因为

  • 我们可以sometimes省略.和括号(例如List(1) map println
  • 我们可以sometimes交换(){}
  • 我们有隐式的值,参数和类(还有转换,它们是now discouraged
  • 该语言中有relatively small个保留符号(例如,我可以为我的班级定义+

以及其他语言功能。

如何避免编写令人困惑的DSL……常见的反模式是什么? DSL在哪里不合适?

1 个答案:

答案 0 :(得分:0)

每当您创建自己的DSL时,您都将 new 语言嵌入到Scala中(这不是 standard ),因此它不会遵循standard code guides,约定等

我要说的是,只要添加适当的文档,说明创建目的以及添加用法示例,添加新的DSL并没有什么错。如果您觉得添加新的DSL可以提高代码的可读性,那么就去做吧,但是请记住,只要有人遇到您的DSL且文档记载不足,他们就会非常困惑。

matchers of scalatestScala duration是记录良好且服务良好的DSL的一个很好的例子。