有人能简单地解释一下什么是领域驱动设计吗?我经常看到这个词,但真的不明白它是什么或它看起来像什么。它与无领域驱动设计有何不同?

还有,谁能解释一下什么是域对象?域与普通对象有何不同?


当前回答

这是另一篇关于领域驱动设计的好文章。如果你申请的不是大学作业。基本前提是围绕实体构建所有内容,并拥有强大的领域模型。区分提供基础设施相关服务(如发送电子邮件、持久化数据)和实际处理核心业务需求的服务。

希望这能有所帮助。

其他回答

编辑:

因为这似乎是谷歌上的一个顶级结果,而我下面的答案不是,请参考这个更好的答案:

https://stackoverflow.com/a/1222488/1240557

旧答案(不太完整:))

为了创建好的软件,你必须知道这个软件是什么 都是关于。您不能创建一个银行软件系统,除非您 有一个很好的理解银行业是关于什么的,一个人必须 了解银行领域。

摘自:Eric Evans的领域驱动设计。

这本书很好地描述了DDD。

注册下载这本书的摘要。

DDD(领域驱动设计)是一个用于分析项目需求和处理这些需求复杂性的有用概念。在此之前,人们通过考虑类和表之间的关系来分析这些需求,事实上他们的设计是基于数据库表关系的,它并不老,但它有一些问题:

在需求复杂的大项目中,这种方法并不有用,尽管这是一种设计小项目的好方法。 当你与没有技术概念的非技术人员打交道时,这种冲突可能会给我们的项目带来一些巨大的问题。

因此,DDD处理第一个问题时,将主项目视为一个域,并将项目的每个部分分割成小块,我们称之为有界上下文(Bounded Context),其中每个部分对其他部分没有任何影响。 第二个问题已经通过一种通用语言解决了,这种语言是技术团队成员和产品负责人之间的通用语言,产品负责人不是技术人员,但对自己的需求有足够的了解

一般来说,域的简单定义是为所有者和其他团队赚钱的主要项目。

这是另一篇关于领域驱动设计的好文章。如果你申请的不是大学作业。基本前提是围绕实体构建所有内容,并拥有强大的领域模型。区分提供基础设施相关服务(如发送电子邮件、持久化数据)和实际处理核心业务需求的服务。

希望这能有所帮助。

我相信下面的pdf会给你更大的图景。Eric Evans的领域驱动设计

注意:想一个你可以从事的项目,应用你了解的小事情,并看到最佳实践。它还将帮助您提高微服务架构设计方法的能力。

在TDD和BDD中,你/团队最关注的是系统的测试和行为,而不是代码实现。

类似地,当系统分析师、产品负责人、开发团队,当然还有代码实体/类、变量、函数、用户界面流程使用相同的语言进行交流时,它被称为领域驱动设计

DDD是一个思维过程。在软件设计建模时,您需要将业务领域/流程置于关注的中心,而不是数据结构、数据流、技术、内部和外部依赖关系。

使用DDD建模系统的方法有很多

事件来源(使用事件作为唯一的真相来源) 关系数据库 图形数据库 使用函数式语言

域对象:

用非常朴素的话来说,一个物体

名称是否基于业务流程/流 完全控制其内部状态,即公开方法来操作状态。 始终在使用上下文中满足所有业务不变量/业务规则。 遵循单一责任原则