一、简介
领域驱动设计顾名思义是一种设计思想,由领域来驱动设计的进行。这里的领域可以简单理解为我们常说的“业务”。也即是,由对业务的深入分析来驱动软件设计工作。
领域驱动设计从层次上分为战略设计和战术设计,我们可以这么想,战略设计就是从上层进行抽象性设计,而战术设计就是将这些上层抽象作为下层具体实现进行的设计工作。
本文涉及的领域、子域、限界上下文就是属于战略设计。
二、概念
什么是领域?
我们可以把领域当作一个大的问题域来理解,如果对一个企业来说,那么就是这个企业要做的所有事情。
什么是子域?
子域是相对于领域的一个概念,顾名思义就是领域被细化以后分成了不同的子域。这个应该相对比较好理解,因为我们人习惯性的会将大的东西进行分割,然后逐个击破。比如“分层思想”,“模块化思想”等。
那么子域就是将一个大的问题域拆分成了很多小的问题域。
并且根据子域的重要性以及作用范围将子域分成了:
1、核心域:重要性最强
2、支撑子域:重要性较低,辅助核心域
3、通用子域:给所有域提供辅助
什么是限界上下文?
开发软件的目的就是为了解决问题,领域定义了问题域,子域细分了问题域。那么我们需要考虑如何根据这些问题域来设计解决方案。
我们说的解决方案就是“领域模型”,领域驱动设计即根据问题域来进行建模。
可是我们想一下,如果我们对整个领域建立一个模型是不是太可怕了,如果系统过于庞大,那么这个模型也将非常庞大,牵一发动全身。
既然模型不好建得太庞大,那么我们可以根据细分的子域来建模型。
比较理想的情况是我们根据一个子域单独建立一个模型,也就是一个问题有一个解决方案。这是比较理想化,有时候我们会遇到一个模型能会对应多个子域,或者多个模型对应一个子域的情况。就是说我们可能需要多个解决方案一起来合作把一个问题解决,或者一个解决方案能够解决多个问题。
那,限界上下文在子域和模型这里起到什么作用呢?
事实上,限界上下文包含的不只是一个领域模型,还有通用语言,领域服务...等不少东西,这里不去讨论这些内容。
三、总结
本文不求甚解,将领域和子域映射为问题域的确定和细分,将领域模型作为问题域的解决方案,将限界上下文认为是为领域模型框定了一个范围表示领域模型解决了那些问题。
在进行战略设计的过程中,主要在于如何确定问题,以及确定要构建哪些模型来解决什么问题。
你根据问题域去设计解决方案的过程也即是领域如何驱动设计的过程。