领域专用语言简介
什么是 DSL
共同语言称为解决方案模型构建者用来表达解决方案中的词汇的基础。构建者将这些共同语言对应到模型中,在程序中就是模块名、在数据模型中就是实体名、在测试用例中就是对象。
在上面的描述,可以看到在需求收集的过程中,如果要成功构建模型,则需要一种领域专家和构建者(也就是通常的领域分析师/业务分析师)都能理解的“共同语言”。但是这种共同语言的创建过程没有保证,不能够保证在收集过程中得到的信息完整的描述了领域活动中所有的业务规则和活动。
如果能够让领域专家通过简单的编程方式描述领域中的所有活动和规则,那么就能在一定程度上保证描述的完整性。
DSL 就是为了解决这个问题而提出的。
常见的 DSL
- 软件构建领域 Ant
- UI 设计师 HTML
- 硬件设计师 VHDL
DSL 的特点
- 用于专门领域,不能用于其他领域
- 表现力有限
- 不描述解答域,仅描述问题域
DSL 与通用编程语言的区别
- DSL 供非程序员使用,供领域专家使用
- DSL 有更高级的抽象,不涉及类似数据结构的细节
- DSL 表现力有限,其只能描述该领域的模型,而通用编程语言能够描述任意的模型
DSL 分类
根据是否从宿主语言构建而来,DSL 分为:
- 内部 DSL(从一种宿主语言构建而来)
- 外部 DSL(从零开始构建的语言,需要实现语法分析器等)
还有一种属于外部DSL的“非文本DSL”,即尽量使用图形化表述。比如 JetBrains 的 MPS。
我们通常所用的框架实际上就是一种内部 DSL。比如 Rails 框架就是基于 Ruby 的用于 Web 开发领域的内部 DSL。
如何构建 DSL
构建DSL 要满足三个原则:
- 能够完整描述领域
- 简单易用
- 隐藏实现细节
何时使用 DSL
DSL 的构建难度比较大,从零构建不合适。建议使用比较完善的构建。
背后的概念
DSL 是在需求分析阶段中为了解决需求收集过程中需求描述方(遇到问题方/问题描述者[注意:遇到问题方通常是客户或者用户,而描述方通常是出现该问题的所在行业的专家,这两个角色可能是同一个人,也可能是不同的人])与解决方案提供方(构建者)间互相理解困难而设计的专门工具。在需求收集中,首先需要理解问题方遇到的问题,然后将其映射到解决方案提供方的解决技术上。用术语描述的话,问题描述者(描述领域活动的背景和问题)称为“领域专家”,其使用“行话”来说明;解决方案提供者称为“模型构建者”,其通过对领域活动及其问题的理解,加上对技术解决方案的理解,提出解决方案模型。该模型最终映射到技术方案中。这个过程中的活动成为“领域分析/领域建模”。其目的是确定并理解领域中的重要元素、过程以及其间的关系。
简单的领域建模
参考
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202469.html原文链接:https://javaforall.net
