第6章 Scala语言中的内部DSL设计
本章内容
- 对Scala语言本身的介绍
- 用Scala语言开发内部DSL
- 组合多个DSL
- 运用Monad化结构
以DSL驱动的开发方式有其擅长和不擅长的方面,前面几章说了不少。现在你肯定已经认识到,对于应用中反映业务规则的部分,DSL能非常有效地疏通开发团队与领域专家团队的沟通渠道。上一章讨论了使用几种动态JVM语言担当内部DSL宿主的能力。这一章要介绍的是一种非常具有这方面潜力的静态JVM语言——Scala。
本章继续重点讨论具体的实现,直接与编程相关的实践性内容将占据较大篇幅。我们首先论证Scala语言是一种称职的内部DSL宿主语言,然后在真实的DSL设计中检验这个结论。图6-1是本章讨论进程的路线图。
图6-1 本章路线图
6.1节和6.2节将确立Scala作为DSL宿主的资格。在此之后,我们就证券交易后台系统中的真实用例展开详细讨论。6.3节和6.6节会实际演练许多惯用法、最佳实践和模式。6.7节讨论如何将多种DSL组合成更大规模的语言。本章最后介绍Monad在DSL设计中的作用,它能塑造出简洁、带有函数式风格、富有表现力的DSL。
学完本章,你将全面掌握如何在Scala这种宿主语言中设计DSL。你会学到如何建模领域组件,然后围绕它们建立简单易用、语义丰满的语言抽象,熟悉这方面的惯用法和最佳实践。怎么样,想学吗?我们开始吧。
本章代码片段都以Scala 2.8版本为准。不熟悉Scala语法的读者可以参阅附录D的Scala语法速查表。