领域驱动设计

2023-07-10 23:01:57 阅读:977 评论:0 点赞:0
所属分类: 编程词典

领域驱动设计(Domain-Driven Design,简称:DDD)是程序员 Eric Evans 于 2004 在他的《领域驱动设计:解决软件核心中的复杂性》一书中提出的一个概念,这是一种自顶向下的软件设计方法。

1. 什么是领域?

在软件开发的上下文中,“域” 指的是业务。在应用程序开发过程中,通常使用术语域逻辑或业务逻辑。基本上,业务逻辑是应用程序逻辑所围绕的知识领域。 应用程序的业务逻辑是一组规则和指导原则,用于解释业务对象应如何相互交互以处理建模数据。

2. 领域驱动设计

领域驱动设计涉及两种工具:战略设计工具、战术设计工具。

提示

程序员或开发人员通常处理战术设计工具,但如果我们有战略设计工具的知识和良好的理解,它将帮助我们构建好的软件。

2.1 战略设计

战略设计工具帮助我们解决所有与软件建模相关的问题,它是一种类似于面向对象设计的设计方法,在面向对象设计中,我们被迫从对象的角度思考问题。在战略设计方面,我们被迫从环境的角度来思考。

上下文(Context)
上下文指某一事件、事件、陈述或想法的情况,它的意思可以根据这些情况来确定。
除了上下文之外,战略设计还讨论了模型、泛在语言和边界语境。这些是领域驱动设计的战略设计中常用的术语。

  • 模型:充当核心逻辑并描述领域的选定方面。它用于解决与该业务有关的问题。
  • 通用语言:所有团队成员使用的一种公共语言,用于连接团队围绕领域模型的所有活动。与领域专家和团队成员交谈时,可以将其视为对类、方法、服务和对象使用通用动词和名词。
  • 边界上下文:指的是上下文的边界条件。它是对边界的描述,并充当一个阈值,在这个阈值中定义并适用于特定的域模型。

2.2 战术设计

战术设计讨论实现细节,即建模领域。它通常会处理有界上下文中的组件。我们可能听说过或使用过诸如服务、实体、存储库和工厂之类的东西。它们都是通过域驱动设计创造并流行的。战术设计过程发生在产品开发阶段。

战术设计工具是高级概念,可用于创建和修改域模型。
实体
面向对象原则工作的程序员可能知道类和对象的概念。在这里,实体是具有某些属性的类。这些类的实例具有全局标识,并且在整个生命周期中都保持相同的标识。请记住,属性状态可能会发生变化,但身份永远不会改变。简而言之,实体可以实现一些业务逻辑,并且可以使用 ID 进行唯一标识。在编程的上下文中,它通常在 DB 中作为行持久保存,并且由值对象组成。

值对象
不可变的轻量级对象,没有任何标识。值对象通过执行复杂的计算,将繁重的计算逻辑与实体隔离开来,从而降低了复杂性。

服务
服务是无状态的类,可以适合实体或值对象以外的其他地方。简而言之,服务是一种功能,存在于实体和值对象之间的某个位置,但它既不与实体相关,也不与值对象相关。

聚合
当我们有更大的项目时,对象图也变得更大,更大的对象图更难维护。聚合是位于单个事务边界下的实体和值的集合。基本上是聚合控制变化,有一个根实体叫做聚合根,根实体以聚合的方式管理其他实体的生命周期。

工厂和存储库
工厂和存储库用于处理聚合。工厂帮助管理聚合生命周期的开始,而存储库帮助管理聚合生命周期的中间和末端。工厂帮助创建聚合,而存储库帮助持久化聚合。我们应该总是为每个聚合根创建存储库,而不是为所有实体创建存储库。

总结

领域驱动设计时虽然需要一个具有很强领域专业知识的专业人员,但是其带来的好处不言而喻。

永不言弃

职业:后端开发工程师
学校:重庆师范大学
城市:重庆
文章:169
好吧,不知道说点什么...

登录逐梦笔记

注册逐梦笔记

已有账号?