前言
限界上下文,基本上也是 DDD 中最难理解的概念之一了。本篇文章将对限界上下文的本质使用简单的语言进行一个说明。
限界上下文是什么?
一句话:限界上下文是语义一致性的边界。在这个边界之内,所有的领域模型,都有且只有唯一且精准的含义。 注意,讨论限界上下文,千万不要和代码产生什么联系。这玩意纯粹就是领域建模中,进行领域模型含义精准化的一种手段。
毕竟,模型在含义上不含糊,那么沟通的时候就不含糊。那么代码落地的时候,自然也是脑子清晰。
衔接上下文之间能重叠吗?
不能。
一旦重叠,那么交集中的领域模型,就会有多个含义。这就会造成统一语言不再统一,进一步造成团队成员之间理解上的混乱,进一步带来沟通上的低效率。
限界上下文是否可以跨子域?
可以。
在一个领域内部,限界上下文可以根据自己的需要进行划分。只要,内部的领域模型的含义是精准的,没有二义性即可。
一般来说,一个领域一定有一个自己的限界上下文。因为一个领域内部出现一个具有二义性的领域模型,那么就说明领域模型在抽象的过程中出现了问题。
但是建议,一个子域最好是有自己的限界上下文,同时不要跨子域。这并不是要求,而是对 代码的落地 过程有好处。
限界上下文的边界 和 领域的边界的区别是什么?
完全不是一个维度的事情。
领域是面向业务的范围概念,表示一个组织需要做的事情。在领域内部,有明确的问题域(就是要解决的问题,或者说业务),有明确的问题解(及业务流程),以及解决问题所需要的所有资源。
限界上下文,目的是统一语言。所以每个领域对象的含义都是精准且唯一,那么自然就不会出现 GAP,自然就统一语言了。但是定义含义,总得需要一个背景一个标准一个依据嘛,所以就整出了限界上下文这样一个概念。
限界上下文 应该如何进行代码映射?
Application 层即可。 因为可以跨领域嘛。
代码落地的时候,两个 Application 调用了同一个 DomainService,这是不是限界上下文有重合???
不是。
在强调一次,代码落地是代码落地,限界上下文是限界上下文。
只要在限界上下文中,语义精准即可。至于代码是不是复用,和限界上下文没啥关系。
但是建议,不要复用,虽然会带来一部分工作量。