2008-10-07 77 views

回答

10

域驱动设计(DDD)是一种思考和沟通有关问题及其解决方案的方式。

域特定语言(DSL)是一种编写代码的方法。

它们很相似,因为它们都以“domain”开头。就是这样,我猜。 :-)

+7

虽然好笑,我觉得这个答案有些不准确。一个DSL会使用相同的无处不在的语言,当你为相同的领域练习DDD时,他们并不完全无关。 – 2010-10-08 09:42:57

2

我会争辩说,它们在某种程度上是相关的,而不仅仅是“域”这个词。一旦你有一个好的(域驱动的)设计,它肯定会帮助你创建一个可靠的DSL。

“DDD并不特别要求使用DSL,尽管它可以用来帮助定义DSL。” - 维基百科

0

维基百科有DSL一个非常明确的定义:

术语领域特定语言 (DSL)已经成为流行在最近 年以上软件开发 表示编程语言或 规范专用于特定问题域, 特定问题表示 技术和/或特定 解决方案技术的语言。

这可以作为一组类遵循一些一致的模式,一些奇特的C++模板魔法,或解释自由文本输入来做你想做的事情的编译器/解析器来实现。

0

我认为它们有某种相关性(正如Christophe所说),但两个完全不同的方面。我甚至不会驳回乔普的说法。

对于写得很好的关于DSL的信息,请参阅Martin Fowler's set of pages on DSLs(正在进行中),您可以从exampledefinition开始。另一个很好的阅读是他的QandA

DDD基于域模型,并且通常至少比DSL高一个抽象级别。两者都可以没有另一个存在,正如Christophe已经说过的,它们都可以用于同一个项目。

6

当您为正在设计的系统创建基本词汇表,概念和对象模型时,域驱动设计强调问题域的作用。

特定领域语言是用于指定或实现系统特定部分的符号,面向该领域从业者的需求(即最小化大多数编程或规范语言的“程序清理”方面)。

0

不同之处在于,一种是使用域特定语言(DSL)而不是通用语言构建系统的方法,另一种是用于设计和构建系统的架构方法(DDD)。

相似之处在于它们都专注于特定的域。

1

DDD的一个元素可以被视为能够开发无处不在的语言,与利益相关者讨论域。对于那些既明确又可能可执行的UL子集,您可以选择使用内部或外部DSL来实现它们。

下面是对DomainDriven网站我的视频讨论这样的:

http://domaindrivendesign.org/library/bell_gitlevich_2009

最良好的祝愿, 彼得