我读过评论,指出Scala的灵活性使开发人员可以轻松编写难以理解和推理的DSL。
DSL是可能的,因为
.
和括号(例如List(1) map println
)()
和{}
+
)可能还有其他语言功能。
我怎样才能避免编写令人困惑的DSL ...什么是常见的反模式? DSL在哪里不合适?
每当你创建自己的DSL时,你就会在Scala中嵌入新语言,这不是标准的,所以它不遵循standard code guides,约定等。
我想说,只要添加适当的文档,解释创建它的目的并添加使用示例,添加新DSL就没有错。如果你觉得添加新的DSL可以提高代码的可读性,那就去吧,但是请记住,每当有人遇到你的DSL并且没有足够的文档记录时,他们会非常困惑。
良好记录和服务良好用途DSL的一个很好的例子是matchers of scalatest或Scala duration。