1.8 小结
本章对DSL背后基本原理的冗长介绍至此接近尾声。在对一个具体领域建模的时候,你的实现要用该领域的语汇来表达。有了共通语汇作为媒介,DSL可以把领域的语法和语义带进你的解答模型。
DSL应当有足够的表现力,这要靠发挥宿主语言的威力设计出恰当的抽象。抽象的设计是一个迭代过程,DSL的设计过程也一样。你不可能第一次迭代就得到一种设计完善的DSL,它必定是经过开发者和领域专家的协作与努力逐渐形成的。请让领域专家尽早参与开发过程。如果领域专家能理解抽象的含义,能验证业务规则的实现,那就证明你的模型是正确的,而且具有足够的表现力。
为陌生的开发范式打基础一向是个艰辛的过程。恭喜你成功完成了任务。接下来,你将深入接触现实世界中的DSL设计与实现。第2章将偏重介绍一些真实存在的DSL,它们是用JVM平台上的几种现代语言实现的。这一部分内容首先从Java开始讲起,然后是表达能力更强的Groovy、Scala和Ruby。你会发现,在代表了当前发展方向的几种编程语言的帮助下,模型的表现力会相应提高。敬请关注!
要点与最佳实践
DSL是开发者和业务人员之间的交流媒介。DSL的设计工作必须有领域专家参与。
DSL不一定适合所有情况。请在衡量过各种有利和不利因素之后,再决定是否投入设计与开发。
DSL的设计过程必定是迭代的。请为它付出应有的努力。
谨记DSL的语法必须满足最终用户对表现力的要求。不要过度设计DSL,那只会使语法变得庞杂并增加实现的复杂性。