域特定语言(DSL)和域驱动设计(DDD)之间的区别和相似之处是什么?域特定语言(DSL)和域驱动设计(DDD)
回答
域驱动设计(DDD)是一种思考和沟通有关问题及其解决方案的方式。
域特定语言(DSL)是一种编写代码的方法。
它们很相似,因为它们都以“domain”开头。就是这样,我猜。 :-)
我会争辩说,它们在某种程度上是相关的,而不仅仅是“域”这个词。一旦你有一个好的(域驱动的)设计,它肯定会帮助你创建一个可靠的DSL。
“DDD并不特别要求使用DSL,尽管它可以用来帮助定义DSL。” - 维基百科
维基百科有DSL一个非常明确的定义:
术语领域特定语言 (DSL)已经成为流行在最近 年以上软件开发 表示编程语言或 规范专用于特定问题域, 特定问题表示 技术和/或特定 解决方案技术的语言。
这可以作为一组类遵循一些一致的模式,一些奇特的C++模板魔法,或解释自由文本输入来做你想做的事情的编译器/解析器来实现。
我认为它们有某种相关性(正如Christophe所说),但两个完全不同的方面。我甚至不会驳回乔普的说法。
对于写得很好的关于DSL的信息,请参阅Martin Fowler's set of pages on DSLs(正在进行中),您可以从example或definition开始。另一个很好的阅读是他的QandA。
DDD基于域模型,并且通常至少比DSL高一个抽象级别。两者都可以没有另一个存在,正如Christophe已经说过的,它们都可以用于同一个项目。
当您为正在设计的系统创建基本词汇表,概念和对象模型时,域驱动设计强调问题域的作用。
特定领域语言是用于指定或实现系统特定部分的符号,面向该领域从业者的需求(即最小化大多数编程或规范语言的“程序清理”方面)。
不同之处在于,一种是使用域特定语言(DSL)而不是通用语言构建系统的方法,另一种是用于设计和构建系统的架构方法(DDD)。
相似之处在于它们都专注于特定的域。
DDD的一个元素可以被视为能够开发无处不在的语言,与利益相关者讨论域。对于那些既明确又可能可执行的UL子集,您可以选择使用内部或外部DSL来实现它们。
下面是对DomainDriven网站我的视频讨论这样的:
http://domaindrivendesign.org/library/bell_gitlevich_2009
最良好的祝愿, 彼得
我想都有其重点降低编程噪声,DDD行为语义噪声和语法噪声中的DSL。
这些可以帮助理解我的观点:
http://fragmental.tw/2009/03/12/expessive-design-slides/
http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/
- 1. DDD:域驱动设计。域名在DDD中意味着什么?
- 2. 域驱动设计(DDD)陷阱
- 3. 域驱动设计(DDD)中的POCO
- 4. Django和域驱动设计
- 5. 域驱动设计和域事件
- 6. 域驱动设计
- 7. 域驱动设计:定义业务的域和子域
- 8. 双语泛在语言与领域驱动设计项目
- 9. 动态语言中的域驱动设计工作?
- 10. 域特定语言IDE
- 11. F# - 领域特定语言
- 12. 针对领域特定语言(DSL)的软件产品线(SPL)
- 13. Ruby DSL(域特定语言)存储库,示例
- 14. 实施域驱动设计
- 15. 域驱动设计服务
- 16. 域驱动设计isDirty,isNew
- 17. 域驱动设计聚合
- 18. 域驱动设计问题
- 19. 域驱动设计映射
- 20. 域名驱动设计
- 21. 域驱动设计验证
- 22. 滥用域驱动设计
- 23. 是什么让我的代码DDD(域驱动设计)合格?
- 24. DDD用户域特定设置
- 25. 域驱动设计中的绑定DropdownList
- 26. 行为驱动开发(BDD)如何与域驱动设计(DDD)协同工作
- 27. .NET域驱动设计和CSLA.NET
- 28. 域驱动设计和聚合
- 29. 域名驱动的设计和安全
- 30. IoC容器和域驱动设计
虽然好笑,我觉得这个答案有些不准确。一个DSL会使用相同的无处不在的语言,当你为相同的领域练习DDD时,他们并不完全无关。 – 2010-10-08 09:42:57