MDS 和 DSL
2008 年 7 月 14 日
模型驱动软件开发 (MDSD) 和 领域特定语言 (DSL) 之间有什么联系?
在 MDSD 的背景下,看到“DSL”这个词很常见。事实上,一些 MDSD 人似乎认为 DSL 只能存在于 MDSD 世界中。我最近为我的书写了很多关于 DSL 的内容,但到目前为止,我还没有真正触及 MDSD 的角度。相反,我专注于 DSL 在更传统的编程中的作用。DSL 存在于文本语言和 MDSD 世界中,并且在两者中都扮演着几乎相同的作用。
在 MDSD 上下文中,DSL 再次成为针对特定类型问题的语言,而不是像 UML 这样的通用语言。因此,它们可以具有相同的关系:在通用建模语言中构建系统,并使用 DSL 来处理各种特定方面。然而,由于 MDSD 还没有流行起来,因此您还会看到另一种方法,即在传统语言环境中使用建模 DSL。在这里,您可能会使用几种生成 Java 代码的建模 DSL,这些代码将在 Java 项目中组合在一起。在这种情况下,没有通用的 MDSD 模型 - 您相对独立地为每个 DSL 使用 MDSD。
为了使用面向模型的 DSL,您需要一种不同的、投影编辑 的工具方法。这带来了很多实际问题,因为这种工具的通用支持环境还没有建立起来。为了定义您自己的 DSL,您需要更专业的工具 - 我称之为 语言工作台。
DSL 在 MDSD 世界中的比重似乎比在主流编程世界中要高。愤世嫉俗者认为这是 MDSD 社区拼命寻找保持相关性的方法的结果,MDSD 的粉丝将其视为 MDSD 优越复杂性的标志。我认为这主要是因为 MDSD 社区规模较小,并且在已建立的实践方面远远不足。
MDSD 的一个特别可见的子社区围绕着模型驱动架构 (MDA) 为中心。我个人不太喜欢 MDA,但我对 MDA DSL 尤其持怀疑态度。
面向模型的 DSL 与文本 DSL 有很多共同之处。在文本 DSL 中,我非常强调将工作建立在 语义模型 之上。正如其名称所示,MDSD 非常关注从这种模型驱动系统。不同之处在于,大多数 MDSD 人员假设您希望从该模型生成代码,而不是直接执行该模型。
当我写这篇文章时,我不确定我将在我的书中涵盖多少关于语言工作台的内容。当然,我至少会讨论它们背后的总体概念,但覆盖范围可能不会那么深。这部分是由于我在文本 DSL 上似乎产生了大量材料,部分是由于语言工作台更新得多,因此更不稳定,也更不成熟。