1.7 DSL与抽象设计

本章前面,我用“抽象”这个词泛指来自领域、表现出一组联系紧密的行为的任何制品。抽象只关注对象的本质属性,不把任何不必要的细节呈现给用户。但哪些才是本质的部分?这取决于你从什么样的观察角度去看待抽象。本节将介绍抽象与DSL设计的相关性,以及它对于DSL的表现力有何影响。

你将在第5章和第6章了解到,设计得当的抽象是搭建DSL的语言学构造的基础。那么,怎样才能使抽象设计得当?

在评价抽象好坏的各种判断标准中,我认为有四种基本特质是抽象设计最应该具备的。表1-2总结了这四种特质。

表1-2 良好抽象应具备的特质

抽象的特质 对设计的影响
极简 只公开那些向客户承诺过的行为。公开得越多,越容易暴露抽象的内部实现,而这会为后面的工作招致困难
精炼 保证抽象的实现不包含任何非本质的细节
扩展性 保证抽象设计可以在不影响现有客户的前提下渐进式发展
组合性 你所设计的抽象要可以和其他抽象进行组合,构成更高阶的抽象

怎样设计出好的抽象?这是另一个话题了。我不打算在此讨论得太详细,以免偏离本章的主题。关于抽象设计的详尽内容参见附录A。在那里,我会用大量真实示例深入分析表1-2中列出的每一种特质。请读者在阅读下一章之前先看一遍附录A。当你能够轻松辨别抽象设计的好坏时,将更加了解好的抽象设计对于助力各种DSL设计技巧发挥效力的益处。