手机版

领域的意思是什么(领域驱动设计:什么是领域?)

时间:2024-12-05 20:15:14

2 什么是领域?

2.1 什么是领域?

领域,通俗地讲是指一个范围,且在这个范围之内包含的所有事物。类比到国家领域,包含领土领海领空以及在其所属范围内的所有人、事、物。在业务上一般指在一个业务系统边界内所包含的业务实体和功能。

什么是子域?子域是整个业务领域的一部分,代表一个单一的、有逻辑的领域模型。按类型划分为通用子域、核心子域、支撑子域。

子域如何划分?通过“语境”划分,即通过限界上下文划分,不同的子域通过不同的“统一语言UL”划分,如“营销领域”中“优惠券”在不同团队(系统)中代表的含义不一样,由此也划分出不同的系统。

核心域:它是一个唯一的、定义明确的领域模型,要对它进行战略投资,并在一个明确的限界上下文中投入大量的资源去精心打磨通用语言。

  • 公司的核心竞争力和业务成功关键因素,如营销中的活动和权益,需要重点投入资源进行代码开发。
  • “核心域是组织中最重要的软件模型,因为它是组织取得巨大成就的手段,需要把最好的资源投入到核心域中。”--《领域驱动设计精粹》

支撑子域:需要定制但不包含决定产品和公司核心竞争力的功能,如一些认证、权限等系统。

通用子域:不需要定制,不需要投入额外资源研发的系统,如ERP系统。

2.2 问题空间和解决方案空间

在问题空间中,我们思考的是业务所面临的挑战,而在解决方案空间中,我们思考如何实现软件以解决这些业务挑战。

问题空间:在一定约束条件下,存在于需求中的各个需要实现和解决的问题,以及对此进行的分析与设计的各个步骤所在的地方。在实践中,使用限界上下文映射图可以很好地区分问题域。

问题空间是领域的一部分,对问题空间的评估将产生一个新的核心域,对问题空间的评估应该同时考虑已有子域和额外所需子域。因此,问题空间是核心域和其他子域的组合

如何评估问题空间?回答以下问题:

• 这个战略核心域的名字是什么,它的目标是什么?

• 这个战略核心域中包含哪些概念?

• 这个核心域的支撑子域和通用子域是什么?

• 如何安排项目人员?

• 你能组建出一支合适的团队吗?--《实现领域驱动设计-DDD入门》

解决方案空间:基于问题空间实施的解决方案,这些解决方案在问题空间讨论中被识别为核心域。

解决方案空间包括一个或多个限界上下文,即一组特定的软件模型。这是因为限界上下文即是一个特定的解决方案,它通过软件的方式来实现解决方案。

总之,DDD = 领域模型 + 问题空间 + 解决方案空间。

2.3 什么是限界上下文?

首先,“限界上下文是语义和语境上的边界”--《领域驱动设计精粹》。这个边界就指的是语言边界,是相对概念化的抽象。

其次,限界上下文可以理解为问题空间的一部分,但随着业务模型的发展和更清晰的含义,限界上下文就会演变为解决方案空间的一部分,是子域对应的空间概念。

例如,营销域,通过业务语言定义出活动和权益概念的划分,进而定义出业务模型,对应两个子域,同时对应不同的团队,使用的git仓库等各个物理资源也划分开。

一个团队应该在一个限界上下文中工作。每个限界上下文应该拥有一个独立的源代码库。”--《领域驱动设计精粹》

总之,一个限界上下文≈一个子域≈一个系统