【发布时间】:2010-11-16 09:10:07
【问题描述】:
我不断看到 DDD(域驱动设计)在文章中被大量使用 - 我已经阅读了有关 DDD 的 Wikipedia 条目,但仍然无法弄清楚它实际上是什么以及我将如何在创建我的网站时实施它?
【问题讨论】:
我不断看到 DDD(域驱动设计)在文章中被大量使用 - 我已经阅读了有关 DDD 的 Wikipedia 条目,但仍然无法弄清楚它实际上是什么以及我将如何在创建我的网站时实施它?
【问题讨论】:
首先,如果您不知道自己需要它,那么您可能不需要它。如果您不认识 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 的讨论)。
【讨论】:
以 StackOverflow 为例。与其开始设计一些 Web 表单,不如先集中精力对问题域中的实体进行面向对象的建模,例如用户、问题、答案、投票、评论等。因为设计是由问题的细节驱动的领域它被称为领域驱动设计。
您可以在Eric Evans' book阅读更多内容。
【讨论】: