我一直看到DDD(领域驱动设计)在文章中被大量使用-我已经阅读了关于DDD的维基百科条目,但仍然不知道它到底是什么,以及我将如何在创建我的网站时实现它?
以StackOverflow为例。而不是开始设计一些web表单,你首先集中在做面向对象的建模的实体在你的问题领域,例如用户,问题,答案,投票,评论等。由于设计是由问题域的细节驱动的,所以它被称为领域驱动设计。
你可以在埃里克·埃文斯的书中阅读更多。
首先,如果你不知道你需要它,那么你可能不需要它。如果你没有意识到DDD解决的问题,那么你可能就没有这些问题。甚至DDD的倡导者也会经常指出DDD仅适用于大型(>6个月)项目。
假设你还在阅读这篇文章,我对DDD的看法是:
DDD是关于尝试使您的软件成为现实世界系统或过程的模型。在使用DDD时,你必须与能够解释真实系统如何工作的域专家密切合作。例如,如果您正在开发一个处理赛马投注的系统,您的领域专家可能是一位经验丰富的庄家。
在您和领域专家之间,您构建了一个无处不在的语言 (UL),它基本上是系统的概念描述。其思想是,您应该能够以领域专家能够阅读并验证其正确性的方式写下系统所做的事情。在我们的博彩例子中,无处不在的语言将包括诸如“种族”、“赌注”、“赔率”等词的定义。
UL描述的概念将构成面向对象设计的基础。DDD提供了一些关于对象应该如何交互的明确指导,并帮助您将对象划分为以下类别:
DDD还推荐了几种模式:
现在,在这一点上,我不得不说,如果您以前没有听说过这些东西,那么您不应该在任何有最后期限的项目上尝试使用DDD。在尝试DDD之前,你应该熟悉设计模式和企业设计模式。知道这些会使DDD更容易掌握。而且,如上所述,InfoQ提供了DDD免费介绍(在那里您还可以找到关于DDD的讨论)。