《领域专用语言实战》试读:1.1 问题域与解答域

本章内容 什么是DSL DSL对于商业用户和解决方案的开发者各有什么好处 DSL的结构 采用设计得当的抽象概念 清晨上班路上,你通常都会走进钟爱的咖啡店点一杯“大杯纤体肉桂带奶油拿铁”,店员则会准确无误地端上一杯用脱脂奶和无糖糖浆调制的香甜肉桂口味473 ml拿铁咖啡,上浇打发的鲜奶油。因为你点单用的是她能理解的精确语汇,所以即使没有详细解释每个词的含义,也丝毫无碍于交流,哪怕不相干的人听了会摸不着头脑。本章将要介绍的就是如何用特定领域的语汇来表达一个问题,然后进一步在解答域对问题建模。这种从问题域映射到解答域的实现模型就是DSL(Domain-Specific Language,领域专用语言)的基本思路。如果把上述咖啡店里的情境做成软件,那么客人们每天点单所用的语言就是你要找的DSL。 开发者设计的任何应用程序都将问题域映射成解答域的实现模型。DSL是映射过程中的一项重要产物和组成部分。在更确切地定义DSL之前,我们首先介绍成功建立映射的必要过程。要使映射成立,你需要先找出两个领域之间相通的语汇。这组语汇是促成DSL最终诞生的关键种子。 设计得当的DSL实现必定不能缺少一套好的抽象。某些读者可能打算继续深究怎样设计出良好的抽象,因此我们在附录A中详细探讨了设计中应该追求的一些特质。你不妨现在就翻阅一下附录A,然后再继续看本章接下来的内容。1.7节也介绍了关于抽象的基本内容,但附录A的介绍要详细得多。 1.1 问题域与解答域 领域建模是帮助你分析、理解并识别某项具体活动所有参与方的活动。第一步从问题域入手,确定领域中的实体如何与其他实体进行有意义的互动。在咖啡店的例子里,你点单时用了该领域最自然的语言,用了与店员的知识最贴近的专门用语。术语构成了问题域的核心实体。咖啡店店员之所以能顺利给你提供相应饮料,正是因为你们俩都熟悉必要的专门用语。 1.1.1 问题域 在领域建模活动中,问题域指构成你所分析业务的那些过程、实体和约束条件。领域建模,也称领域分析(参见1.9节文献[1]),就是要识别出领域中所有的重要元素以及它们之间的协作关系。在前面的例子中,店员掌握了构成其问题域的所有实体,如咖啡、打发鲜奶油、肉桂、脱脂奶等。如果要分析一个更复杂的领域,比如金融中介的交易结算系统,那么证券、股票、债券、交易、结算就是其中的一些元素。除了这些,你还要研究证券如何发行、在交易所买卖、在各交易方之间结算、记录到各种账册和户头。你需要先确认这些协作关系,然后进行分析并把结果作为分析模型的产物记入文档。 1.1.2 解答域 问题域的分析模型是用解答域提供的工具和手段实现出来的。你只要点单,店员就懂得该如何制作相应咖啡。她所遵守的制作过程以及使用的工具就是其解答域的构成成分。面对的问题域越大,你可能就越需要从解答域寻求更多工具、方法学和技术手段方面的支持。问题域的元素需要映射成解答域中适当的技术手段。如果将面向对象方法作为解答域的基本平台,那么类、对象和方法就是解答域的基本组件。你可以把这些组件组合成大一点的组件,而后者可能正好能更好地表示问题域更高一层的元素。图1-1描绘了领域建模的第一步。如何从问题域出发,运用领域专家能理解的技术手段,完成向解答域转换的全过程?随着学习的不断推进,你对此过程的理解会逐渐加深。 图1-1 问题域的实体和协作关系必须映射成解答域中相应的制品。图中左边的实体 (证券、交易、结算等)需要在右边能找到对应的表示 领域建模的基本实践活动就是把问题域映射到解答域的若干制品,让所有的元素、相互作用和协作关系都得到正确而合理的表示。为此,你首先要把领域对象按合理的粒度归类。当分类正确时,问题域的每个对象及其结构和语义都能在解答域找到对应项。不过,映射的效果无法超越作为两个领域之间互动媒介的语言的表现力。可靠的互动要求问题域与解答域分享一套共通的语汇。

>领域专用语言实战

领域专用语言实战
作者: [美] Debasish Ghosh
原作名: DSLs in action
isbn: 711533174X
书名: 领域专用语言实战
页数: 312
译者: 郭晓刚
定价: 69.00
出版社: 人民邮电出版社
装帧: 平装
出版年: 2013-11