DDD中如何破解上下文划分难点?

DDD中如何破解上下文划分难点?

💡 原文中文,约6900字,阅读约需17分钟。
📝

内容提要

领域驱动设计(DDD)整合精心设计的领域模型到软件系统中,为解决复杂业务问题提供框架。有界上下文(BC)是定制模型,使用共享通用语言。残差理论提供实用和科学的方法设计有界上下文,应对未知变化。有边界的上下文是为解决特定用户/业务问题而设计的模型,以通用语言为边界。残差理论通过理解压力源和残差行为,设计弹性和反脆弱的软件系统。压力源分析可用于识别压力源、了解其影响、确定观察方法和缓解措施。

🔎

延伸解读

有界上下文的核心是语言与协作边界

文章强调,有界上下文并非简单的代码模块划分,而是以通用语言为边界的模型。如果领域专家没有参与设计,或者团队没有与专家协作定义模型和术语,那么这就不是真正的有界上下文。这意味着划分上下文时,技术团队不能闭门造车,必须确保模型和语言反映业务专家的共识,否则模型将失去价值。

残差理论为应对未知变化提供方法

残差理论指出,软件系统运行在无序的组织环境中,未来变化不可预测。设计有界上下文时,应通过压力源分析识别潜在冲击,并观察系统可能产生的残差状态。这有助于设计出更具弹性和反脆弱性的架构。文章建议不要只关注当前问题,还要考虑那些看似不可能发生的压力源,以扩大设计的适应范围。

压力源分析可指导上下文拆分与合并

通过协作压力源分析,团队可以识别反复出现的缓解模式。例如,在食品配送案例中,如果多种缓解措施经常同时出现,可能意味着需要创建一个新的有界上下文来统一处理。这种分析还能揭示拆分单体的必要性,但文章提醒,不应立即实施所有缓解措施,而应先通过指标矩阵评估架构是否达到临界状态。

❓

Q&A

什么是领域驱动设计中的有界上下文?

有界上下文是针对特定用户或业务问题而设计的模型,它以通用语言为边界,旨在隔离模型的复杂性,避免不同模型交互时产生混乱或不一致。它必须与领域专家合作设计,否则就不是真正的有界上下文。

为什么设计有界上下文很困难?

设计有界上下文困难是因为复杂问题往往存在多种建模方式,且因果关系只能在事后确定,需要探索和实验。此外,设计者常依赖经验、直觉和启发式方法,这些方法不科学且容易出错,同时认知偏差(如功能固定性和框架偏见)会限制思维,导致设计缺乏弹性。

残差理论如何帮助设计有界上下文?

残差理论通过压力源分析来识别潜在压力源、了解其影响、确定观察和缓解方法,从而设计出具有弹性和反脆弱性的有界上下文。它强调考虑未知的未来变化,通过模拟随机压力源观察残差行为,帮助架构师在有序系统与无序组织环境之间转换,增强设计的适应性。

在在线食品配送案例中,有界上下文是如何划分的?

案例中划分了两个有界上下文:针对订餐者的“订餐者外卖订单”和针对厨师的“菜肴交付订单”。两者都使用“订单”术语,但含义不同:前者关注订餐者所下订单的信息及取消规则,后者关注厨师准备订单所需的产品和饮食限制。这两个上下文通过上下文映射相互连接。

压力源分析的具体步骤是什么?

压力源分析有两种方法:一是集思广益列出尽可能多的潜在压力源,然后逐一评估影响、观察方法和缓解措施;二是从单一压力源入手,逐步发现更多压力源。分析时需绘制压力地图,找出反复出现的缓解模式,并据此设计或完善有界上下文。

残差理论中的“超极限”和“临界度”是什么意思?

超极限指无序系统中的有序系统:软件系统是有序、可预测的,而组织环境是无序、不可预测的,架构师需在两者间转换。临界度指系统在不可预见情况下重塑自身的能力,可通过组件数量及连接数量量化,达到临界点是残差理论的目标,使系统能在不同吸引子中生存。

🏷️

标签

➡️

继续阅读