第4章 内部DSL实现模式
本章内容
- 内嵌式DSL的元编程模式
- 内嵌式DSL的类型化抽象模式
- 生成式DSL的运行时元编程模式
- 生成式DSL的编译时元编程模式
本书第一部分已经领你步入了DSL驱动的开发范式。我们一起见识了DSL的风采,也见识了它在现实应用中可能出现的问题。从本章开始,我们开始探讨DSL实现层面的内容。
每一位架构师都有个“工具箱”,里面放着自己用来雕琢优美软件制品的趁手工具。经过这一章的学习,你会拥有自己的“工具箱”存放一套用于实现DSL的架构模式。图4-1简单列举了本章打算涉及的话题。
图4-1 本章路线图
DSL设计者绝不可忽视DSL实现中的惯用法和最佳实践。因此,我们首先介绍一系列可以用于现实开发工作的模式。内部DSL一般都内嵌于某种宿主语言,而充当宿主的语言往往支持某种元对象协议(meta-object protocol),可以用来在DSL上实现一些动态行为。内部DSL的实现语言大多是动态类型语言,如Ruby和Groovy,我们会在4.2节讲解几种利用它们的元编程能力的几种模式。静态类型语言的抽象能力可用于将DSL建模成宿主语言的内嵌类型,4.3节以Scala作为实现语言讲解这类模式。4.4节和4.5节讨论不同语言的代码生成能力,它们可用于实现简练的内部DSL。这样产生的DSL称为生成式DSL,因为它们简洁的表面语法所代表的领域行为,是在编译时或运行时通过生成宿主语言的代码来实现的。学习完本章,你定会感觉胸有成竹,因为你的“工具箱”里将塞满各种实用的问题域建模技巧、模式和最佳实践。