领域特定语言 (DSL) 和 领域驱动设计 (DDD) 有什么异同之处?
领域驱动设计(DDD)是一种思考和沟通问题及其解决方案的方式。
领域特定语言(DSL)是一种编写代码的方式。
它们相似,因为它们都以“领域”一词开头。就这样,我想。 :-)
领域驱动设计强调在创建系统的基本词汇、概念和对象模型时,问题领域的作用。
领域特定语言是一种用于指定或实现系统特定部分的符号表示法,其针对该领域从业者的需求进行优化(即最小化大多数编程或规范语言中的“程序员术语”方面)。
http://fragmental.tw/2009/03/12/expessive-design-slides/
http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/
DDD 的一个要素可以被视为开发普遍语言以便与利益相关者谈论领域的能力。对于那些既不含糊又可能可执行的 UL 子集,您可以选择使用内部或外部 DSL 来实现它们。
这是我在 DomainDriven 网站上讨论此问题的视频:
http://domaindrivendesign.org/library/bell_gitlevich_2009
祝一切顺利, 彼得
维基百科(https://en.wikipedia.org/wiki/Domain-driven_design)有一个很好的回答:
DDD并不特别要求使用DSL,尽管它可以用于帮助定义DSL并支持诸如领域特定多模型等方法。
这两种方法的不同之处在于,一种是使用特定领域语言(DSL)而非通用编程语言来构建系统的方法,另一种则是一种设计和构建系统的架构方法(DDD)。
它们的相似之处在于它们都专注于特定领域。
维基百科对DSL有一个非常明确的定义:
近年来,“领域特定语言”(DSL)一词在软件开发中变得流行,它表示专门用于解决特定问题领域、特定问题表示技术和/或特定解决方案技术的编程语言或规范语言。
这可以通过实现一组遵循某种一致模式的类来实现,也可以通过一些花哨的C++模板魔法或解析器/编译器,将自由文本输入解释为你想要的内容。
我认为它们在某种程度上是相关的(正如Christophe所说),但是两个完全不同的方面。我甚至不会驳回jop的陈述。
关于DSL的非常好的信息,请参考Martin Fowler有关DSL的一系列页面(正在进行中),您可以从示例或定义开始。另一个很好的阅读材料是他的问答。
DDD基于领域模型,通常比DSL高至少一个抽象级别。两者都可以独立存在,正如Christophe已经说过的,它们都可以在同一个项目中使用。