领域特定语言(DSL)和域驱动设计(DDD)
-
05-07-2019 - |
题
域特定语言(DSL)和域驱动设计(DDD)之间的差异和相似之处是什么?
解决方案
域驱动设计(DDD)是一种思考和沟通问题及其解决方案的方式。
域特定语言(DSL)是一种编写代码的方式。
他们是相似的,因为他们都以单词“domain”开头。就是这样,我想。 : - )
其他提示
领域驱动设计在为正在设计的系统创建基本词汇表,概念和对象模型时强调问题域的作用。
领域特定语言是用于指定或实现系统的特定部分的符号,其面向该领域的从业者的需要(即,最小化大多数编程或规范语言的“程序化”方面)。 p>
我认为它们在某种程度上是相关的,而不仅仅是“域”这个词。一旦你有一个良好的(域驱动)设计,它肯定有助于创建一个坚实的DSL。
“DDD并不特别要求使用DSL,尽管它可以用于帮助定义DSL。” - 维基百科
我猜两者都有减少编程噪音的主要焦点,DDD在句法噪音中作用于语义噪音和DSL。
这些可能有助于理解我的观点:
DDD的一个要素可以被看作是开发无处不在的语言以与利益相关者讨论域名的能力。对于那些既明确又可能可执行的UL的子集,您可以选择使用内部或外部DSL实现它们。
以下是我在DomainDriven网站上讨论此内容的视频:
http://domaindrivendesign.org/library/bell_gitlevich_2009
祝福, 彼得
维基百科对 DSL 有一个非常明确的定义:
术语特定于域的语言 (DSL)最近变得流行 多年的软件开发到 表示编程语言或 专用于a的规范语言 特别是问题领域, 特别的问题表示 技术,和/或特定的 解决方案技术。
这可以作为一组类实现,遵循一些一致的模式,一些奇特的C ++模板魔术,或者解释自由文本输入以执行您想要的编译器/解析器。
我认为它们在某种程度上是相关的(正如Christophe所说),但两个完全不同的方面。我甚至不会驳回jop的陈述。
有关DSL的书面信息,请参阅 Martin Fowler关于DSL的页面集(正在进行中) ),您可以从示例或定义。另一个很好的解读是他的 QandA 。
DDD基于域模型,通常至少比DSL高一个抽象级别。两者都可以不存在,而Christophe已经说过,它们都可以在同一个项目中使用。
差异,一种是使用域特定语言语言(DSL)而不是通用语言构建系统的方法,另一种是用于设计和构建系统的架构方法(DDD)。
相似之处在于它们都专注于特定领域。
维基百科( https://en.wikipedia.org/wiki/Domain-driven_design)有一个很好的答案:
DDD并不特别要求使用DSL,尽管可能如此 用于帮助定义DSL并支持特定于域的方法 multimodeling。