我一直看到 DDD(域驱动设计)在文章中被大量使用 - 我已经阅读了关于 DDD 的维基百科条目,但仍然无法弄清楚它实际上是什么以及我将如何在创建我的网站时实现它?
首先,如果您不知道自己需要它,那么您可能不需要它。如果您不认识 DDD 解决的问题,那么您可能没有这些问题。甚至 DDD 的拥护者也会经常指出 DDD 仅适用于大型(>6 个月)项目。
假设您此时仍在阅读,我对 DDD 的看法是:
DDD 旨在使您的软件成为现实世界系统或流程的模型。在使用 DDD 时,您需要与能够解释实际系统如何工作的 领域专家密切合作。 例如,如果您正在开发一个处理赛马投注的系统,那么您的领域专家可能是一位经验丰富的博彩公司。
在您和领域专家之间,您构建了一种 通用语言 (UL),它基本上是对系统的概念描述。这个想法是,您应该能够以领域专家可以阅读并验证其正确性的方式写下系统所做的事情。在我们的投注示例中,普遍存在的语言将包括诸如“种族”、“赌注”、“赔率”等词语的定义。
UL 描述的概念将构成您的面向对象设计的基础。DDD 为您的对象应如何交互提供了一些明确的指导,并帮助您将对象分为以下几类:
DDD 还推荐了几种模式:
现在,在这一点上,我不得不说,如果您以前没有听说过这些事情,那么您不应该尝试在任何有截止日期的项目中使用 DDD。在尝试 DDD 之前,您应该熟悉设计模式和企业设计模式。了解这些让 DDD 更容易掌握。而且,如上所述, InfoQ 提供了关于 DDD 的免费介绍(您还可以在其中找到有关 DDD 的讨论)。