知识卡片
同一实体在不同业务阶段有不同表现形式:限界上下文存在的必要性
内容
语言离不开语义环境,同一句话脱离上下文可能有完全不同的理解(如”能穿多少就穿多少”在寒冬和盛夏含义相反)。DDD的通用语言也离不开它所在的业务上下文边界,书中用保险和电商两个例子说明这一点:保险业务里,客户投保时产生投保单实体,缴费完成后投保单转为保单实体(与投保单关联),客户修改保单信息时保单变为批单实体(与保单关联),发生理赔则生成赔案实体(与保单或批单关联)——投保单、保单、批单虽然都跟同一份保单业务相关,但因为处于不同业务阶段、表现形式不同,被赋予了不同的业务含义,不能笼统地用”保单”这一个术语覆盖保险的全业务流程。电商场景同理:同一件商品在销售阶段叫”商品”,销售结束进入运输阶段就变成了”货物”,业务领域边界不同,同一个实体对应的通用语言术语也随之不同。这说明限界上下文存在的必要性不是为了制造复杂性,而是因为现实业务本身就存在”同一个东西在不同阶段有不同身份和含义”这个客观现象,如果不用边界把这些阶段区分开、用不同的术语和领域对象分别建模,反而会人为制造出术语覆盖不准确、模型混乱的问题。
参考来源
- 位置:第6章《限界上下文:定义领域边界的利器》"6.3 进一步理解限界上下文"(源文件:_epub-src/OEBPS/Text/chapter3-2-3.xhtml)
- 结论依据:原文说明"投保单、保单和批单等这些保险术语虽然都跟保单有关,但由于它们在不同的业务阶段,表现形式不一样,也被赋予了特殊的业务含义……商品在销售阶段是商品……在销售阶段结束后,商品就进入了运输阶段,这时商品就变成了货物。可见,同样的一件商品,由于业务领域边界的不同,这些通用语言的术语就有了不同的含义",直接支撑本卡片结论。
- 原始内容:投保单、保单和批单等这些保险术语虽然都跟保单有关,但由于它们在不同的业务阶段,表现形式不一样,也被赋予了特殊的业务含义,我们需要针对不同的业务阶段加以区分,避免出现歧义。因此我们不能简单地用"保单"这个术语作用在保险的全业务领域。