This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -531,9 +531,9 @@ function hide_canvas() {
<p>领域驱动设计通过<strong>上下文映射Context Map</strong> 来讨论限界上下文之间的协作问题上下文映射是一种设计手段Eric Evans 总结了诸如共享内核Shared Kernel、防腐层Anticorruption Layer、开放主机服务Open Host Service等多种模式。由于上下文映射本质上是与限界上下文一脉相承的因此要掌握这些协作模式应该从限界上下文的角度进行理解着眼点还是在于“<strong>边界</strong>”。领域驱动设计认为:上下文映射是用于将限界上下文边界变得更清晰的重要工具。所以当我们正在为一些限界上下文的边界划分而左右为难时,不妨先放一放,在定下初步的限界上下文后,通过绘制上下文映射来检验,或许会有意外收获。</p>
<p>限界上下文的一个核心价值,就是利用边界来约束不同上下文的领域模型,以保证模型的一致性。然而,每个限界上下文都不是独立存在的,多数时候,都需要多个限界上下文通力协作,才能完成一个完整的用例场景。例如,客户之于商品、商品之于订单、订单之于支付,贯穿起来才能完成“购买商品”的核心流程。</p>
<p>两个限界上下文之间的关系是有方向的领域驱动设计使用两个专门的术语来表述它们“上游Upstream”和“下游Downstream在上下文映射图中以 U 代表上游D 代表下游,理解它们之间的关系,正如理解该术语隐喻的河流,自然是上游产生的变化会影响到下游,反之则不然。故而从上游到下游的关系方向,代表了影响产生的作用力,影响作用力的方向与程序员惯常理解的依赖方向恰恰相反,上游影响了下游,意味着下游依赖于上游。</p>
<p><img src="assets/7e532f30-ab34-11e8-807c-2dcb8b265ca8" alt="enter image description here" /></p>
<p><img src="assets/7e532f30-ab34-11e8-807c-2dcb8b265ca8" alt="png" /></p>
<p>在划分限界上下文的业务边界时,我们常常从“语义相关性”与“功能相关性”两个角度去判别职责划分的合理性。在上下文映射中,我发现之所以两个业务边界的限界上下文能产生上下游协作关系,皆源于二者的功能相关性,这种功能相关存在主次之分,往往是上游限界上下文作为下游限界上下文的功能支撑,这就意味着在当前的协作关系下,下游限界上下文中的用例才是核心领域。例如,订单与支付,下订单用例才是核心功能,支付功能作为支撑的公开服务而被调用;例如,邮件与文件共享,写邮件用例才是核心功能,上传附件作为支撑的公开服务而被调用;例如,项目管理与通知,分配任务用例才是核心功能,通知功能作为支撑的公开服务而被调用。巧的是,这种主次功能的调用关系,几乎对应的就是用例图中的包含用例或扩展用例。</p>
<p><img src="assets/0b204cd0-ab36-11e8-bd17-d5905bbd0c49" alt="enter image description here" /></p>
<p><img src="assets/0b204cd0-ab36-11e8-bd17-d5905bbd0c49" alt="png" /></p>
<p>如果我们通过用例图来帮助识别限界上下文,那么,<strong>用例图中的包含用例或扩展用例或许是一个不错的判断上下文协作关系的切入点</strong>。选择从包含或扩展关系切入,既可能确定了职责分离的逻辑边界,又可以确定协作关系的方向,这就是用例对领域驱动设计的价值所在了。</p>
<p>那么如何将上下文映射运用到领域驱动的战略设计阶段Eric Evans 为我们总结了常用的上下文映射模式。为了更好地理解这些模式,结合限界上下文对边界的控制力,再根据这些模式的本质,我将这些上下文映射模式分为了两大类:团队协作模式与通信集成模式。前者对应的其实是团队合作的工作边界,后者则从应用边界的角度分析了限界上下文之间应该如何进行通信才能提升设计质量。针对通信集成模式,结合领域驱动设计社区的技术发展,在原有上下文映射模式基础上,增加了发布/订阅事件模式。</p>
</div>