我一直看到DDD(领域驱动设计)在文章中被大量使用 - 我已经阅读了关于DDD的维基百科条目,但仍然无法弄清楚它究竟是什么以及如何在创建我的网站时实现它?
答案 0 :(得分:489)
首先,如果您不知道自己需要它,那么您可能不需要它。如果您没有意识到DDD解决的问题,那么您可能没有遇到这些问题。即使DDD倡导者也经常指出DDD仅适用于大型(> 6个月)项目。
假设你现在还在阅读,我对DDD的看法是:
DDD旨在让您的软件成为真实世界系统或流程的典范。在使用DDD时,您需要与 domain expert 密切合作,后者可以解释现实世界系统的工作原理。例如,如果您正在开发一个处理在赛马上下注的系统,那么您的域名专家可能是一位经验丰富的博彩公司。
在您和域专家之间,您构建了一个无所不在的语言(UL),它基本上是对系统的概念性描述。我们的想法是,您应该能够以域专家可以读取它并验证它是否正确的方式记下系统的功能。在我们的投注示例中,无处不在的语言将包括诸如“种族”,“赌注”,“赔率”等词语的定义。
UL描述的概念将构成面向对象设计的基础。 DDD为您的对象如何交互提供了一些明确的指导,并帮助您将对象划分为以下类别:
DDD还推荐了几种模式:
现在,在这一点上,我必须说,如果您之前没有听说过任何这些事情,那么您不应该尝试在任何有截止日期的项目中使用DDD。在尝试DDD之前,您应该熟悉design patterns和enterprise design patterns。了解这些使DDD更容易掌握。而且,如上所述,InfoQ提供了free introduction to DDD(您还可以在其中找到有关DDD的说明)。
答案 1 :(得分:32)
以StackOverflow为例。您不必开始设计某些Web表单,而是首先集中精力对问题域中的实体进行面向对象的建模,例如用户,问题,答案,投票,评论等。因为设计是由问题的细节驱动的域称为域驱动设计。
您可以在Eric Evans' book中阅读更多内容。