一、什么是限界上下文?

限界上下文是某种类别的一系列业务服务的组合,这种类别与其他类别有很明显的业务区别。比如在通信平台中,有短信、5G消息、视频短信等,那么根据业务类别,可以划分为短信上下文、5G消息上下文和视频短信上下文;在电商平台中,有购物车、订单、支付、物流等,那么可以划分为购物车上下文、订单上下文、支付上下文和物流上下文。

限界上下文是一种分治的思想,把一个大的系统切分成若干个小的单元,就好像一个国家有多个不同行政省份。

二、限界上下文有哪些特征?

① 领域模型的知识语境

同一个概念在不同的语境中所关注的点是不同的,比如商品,在采购环节,关注的是商品的进价、折扣、供应商等;在库存环节,关注的是商品的质量、高度、数量等;在运输环节关注的是商品的包装高度、重量等;因此不同的限界上下文代表着有不同的知识语境。

② 业务能力的纵向拆分

一个完整的业务能力包含了多个业务服务,比如电商平台的购物,就包括购物车、订单、支付、物流等多个业务服务,限界上下文就是在这一个完整的业务能力中,某种类别的业务服务,比如购物车上下文,它提供的业务服务包括加入购物车、购物车列表、删除购物车等等,如果把一个完整的业务能力根据不同的服务类别进行划分,则每个类别就对应一个限界上下文。

③ 自治的架构单元

一个限界上下文等同于一个独立运行的微型服务系统,它是一个可以独立演进的自治单元。在微服务架构中,一个限界上下文就等同于一个微服务。

三、如何识别限界上下文?

image
在业务需求分析阶段,我们采用自顶向下的方式对每个业务流程根据时间分解成多个业务场景,再根据不同角色对每个业务场景进一步分解成多个业务服务。在业务需求分析阶段,这个过程很重要,因此识别限界上下文就是从这些最细粒度的业务服务进行的,采用自底向上的方式,对每个业务服务进行归纳和归类到同一个业务主体下,再根据业务主体的亲密度和知识语境、业务能力等划分到不同的限界上下文,从而完成从问题空间到解空间的映射过程。

① 业务服务的归类与归纳
业务服务是表达业务知识的最基本单位,对业务服务进行归类是为了更好的归纳出业务主体,通常从两个方面进行归类:
(1)语义相关性
(2)功能相关性

这里我们以通信平台为例子,如下面业务服务具有“短信”的语义,可以归类为同一个类别,具体如下:
(1)创建短信模板
(2)审核短信模板
(3)根据模板下发短信

此外,也可以根据功能相关性,识别出“短信发送”这一个类别,具体如下:
(1)单发
(2)群发
(3)组发

我们在对业务服务进行分类之后,再进行归纳到业务主体,比如上面的“短信”和“短信发送”这两种类别,都属于短信业务主体。

② 对业务主体进一步归纳

在通信平台中,对外提供发送5G消息的业务能力,客户想要发送5G消息,首先需要创建通道、上传素材、创建模板,最后才能发送5G消息,在业务能力的归类和归纳环节,识别出[通道]、[素材]、[模板]等业务主体,然后对业务主体进一步归纳到[5G消息]这个限界上下文中。

③ 验证限界上下文的合理性

在我们获取限界上下文之后,这些限界上下文的划分是否合理,需要进一步验证,可以从以下几个原则进行验证:

(1)正交原则

正交性要求:如果两个或者更多事物中的一个发送变化,不会影响到其他事物,这些事物就是正交的。在软件领域,服务之间的调用,都是通过对外暴露的API进行的话,那么API接口发生变化,势必会影响调用方,这是合理的。那么在限界上下文中的正交原则具体是除对外暴露的API接口之外,内部的变化不会影响到其他限界上下文,也就是变化控制在限界上下文内部,体现其独立性。

(2)单一抽象层次原则

对于识别出来的限界上下文需要在同一个层次,比如在通信平台,有短信上下文、5G消息上下文,但是不能出现素材上下文,因为素材是5G消息上下文中的一个业务能力,单独抽离出来跟其他上下文不是在同一个层次上。

(3)奥卡姆剃刀原则

“如无必要,勿增实体”,我们在识别上下文时,需要把握好粗粒度,不要划分得太细,当我们没有寻找到切分限界上下文的必要证据时,就不要新增限界上下文。

④ 管理和技术因素

通常我们识别出来的限界上下文,需要贴合团队情况,不能出现一个限界上下文由多个团队共同维护的情况,这会导致增加大量的沟通成本,一般情况下一个团队单独负责1-N个限界上下文。

而对于一些有特殊技术要求的业务能力,可以单独划分限界上下文,比如秒杀服务,可以独立划分到秒杀上下文,而不是把它分散到其他上下文中,因为秒杀上下文的高并发会影响到其他的正常业务,需要做特殊处理。

打赏
支付宝 微信
上一篇 下一篇