首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是领域驱动设计(DDD)?

什么是领域驱动设计(DDD)?
EN

Stack Overflow用户
提问于 2009-08-03 13:33:52
回答 2查看 75.9K关注 0票数 301

我一直在文章中看到DDD (领域驱动设计)被大量使用-我读过关于DDD的维基百科条目,但仍然不能弄清楚它到底是什么,以及我如何在创建我的网站时实现它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-03 13:54:32

首先,如果你不知道你需要它,那么你就有可能不需要它。如果您没有认识到DDD解决的问题,那么您可能就没有这些问题。甚至DDD的拥护者也会经常指出,DDD只适用于大型(>6个月)的项目。

假设你现在还在阅读,我对DDD的看法是:

DDD是关于尝试使您的软件成为真实系统或过程的模型。在使用DDD时,您需要与能够解释实际系统如何工作的密切合作。例如,如果您正在开发一个处理赛马下注的系统,那么您的领域专家可能是一位经验丰富的博彩公司。

在您和领域专家之间,您构建了一种普遍存在的语言(UL),它基本上是对系统的概念性描述。这个想法是,您应该能够以领域专家可以阅读并验证其正确性的方式来记录系统所做的工作。在我们的打赌示例中,无处不在的语言将包括诸如“种族”、“打赌”、“赔率”等词的定义。

UL所描述的概念将构成您面向对象设计的基础。DDD为您的对象应该如何交互提供了一些明确的指导,并帮助您将对象划分为以下类别:

date date value对象,表示可能具有子部分的值(例如,日期可能具有、month和year)

  • Entities,,它们都是具有标识的对象。例如,每个Customer对象都有自己的标识,因此我们知道两个同名的Customer不是相同的customer
  • Aggregate根是拥有其他对象的对象。这是一个复杂的概念,它的工作基础是,有些对象除非有所有者,否则就没有意义。例如,如果没有' Order‘所属的'Order’,‘Order Line’对象就没有意义,所以我们说Order是聚合根,并且Order Line对象只能通过Order object

中的方法操作

DDD还推荐了几种模式:

用于持久化的模式(保存和加载数据,通常是在database)

  • Factory,中保存和加载数据对象的模式creation

  • Service,用于创建操作主域对象的对象的模式,而不是域本身的一部分)

现在,在这一点上,我必须说,如果你以前没有听说过这些事情,你不应该在任何有最后期限的项目上尝试使用DDD。在尝试DDD之前,您应该熟悉design patternsenterprise design patterns。了解这些使得DDD更容易掌握。如上所述,InfoQ提供了一个free introduction to DDD (您也可以在那里找到关于DDD的讨论)。

票数 658
EN

Stack Overflow用户

发布于 2009-08-03 13:38:25

以StackOverflow为例。不是开始设计一些web表单,而是首先专注于对问题域中的实体进行面向对象的建模,例如用户、问题、答案、投票、评论等。由于设计是由问题域的细节驱动的,因此称为域驱动设计。

您可以在Eric Evans' book中阅读更多内容。

票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1222392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档