子域
1.介绍
子域是整体业务领域中相对完整的子业务,通常由一组相关的业务概念,规则和流程组成
2.为什么需要
聚焦核心业务
通过将大业务划分为核心子域,通用子域和支撑子域,使组织能够将注意力集中在核心业务
降低复杂度
随着业务需求的增加,领域模型的复杂度也会增加。如果将整个领域模型作为一个整体进行设计和实现,将会面临许多挑战,如代码复杂度增加,维护成本增加,测试难度加大等
通过对子域进行划分,可以将庞大复杂的领域模型分解成多个小型的子领域模型,从而降低系统的复杂度,使系统更易于理解,设计和实现
提高可扩展性
随着业务需求的变化和扩展,原有的领域模型通常需要进行修改和扩展。如果整个领域模型作为一个整体进行设计和实现,每次修改和扩展都需要对整个系统进行修改,这将带来很大的风险和成本
通过进行子域划分,可以将不同的业务需求实现到不同的子领域模型中,每个子领域模型相对独立,可以独立进行修改和扩展
实现团队间的协作
大型系统通常需要多个团队协同开发。如果不对业务进行细分,直接给业务作为一个整体进行设计和实现,可能导致所有团队都基于一套领域模型进行开发,这给不同团队之间的协作带来很多挑战,如代码冲突,接口不一致等
通过进行子域划分,可以根据团队职责,将不同的子领域模型分配给不同的团队进行开发和维护。团队之间相互独立,专注于各自的业务,独立进行开发和测试,减少了沟通成本和冲突的可能性,更有利于团队间的协作
差异化子域投入
将更多的资源投入核心子域中,聚焦在企业战略领域,避免资源浪费,提高投资收益率
3.与限界上下文的关系
子域由一个到多个限界上下文组成。与限界上下文相比,子域的概念更完整,描述的业务更宏观,往往涉及多个限界上下文之间的协作。以视频直播子域为例,该子域内部包括主播上下文,直播间上下文等。单独的主播上下文和直播间上下文都无法完成视频直播业务,只有这些上下文互相协作,才能形成完整的视频直播业务
4.类型
- 核心子域:对于一个电商领域而言,用于完成用户购物这个核心需求,所需要具备的一些核心的子域,就是属于核心子域,商品子域,订单子域,支付子域,履约子域,会员子域,营销子域
- 支撑子域:业务领域中扮演支撑角色的子域,严格来说除了核心子域都是支撑子域,和通用子域的区别就是通用子域已经有成熟和通用的解决方案,不需要重新构建。支撑子域通常无法以采购的方式获取
- 通用子域:在多个业务领域中都存在的一些通用概念或者通用业务流程,这些通用的东西可以抽取出来,将其作为一个独立的模块进行设计和实现,形成一个子域,其他业务领域都可以使用这个子域。比如认证子域,通知子域
5.划分方法
划分切入点 | 划分方法 | 示例 |
---|---|---|
业务流程 | 对系统的核心业务流程进行分阶段划分并形成子域 | 电商系统中的下单、支付、仓储、配送、售后等 |
业务职能 | 根据职能部门划分目标系统子域 | 了解企业的组织结构,如人事、财务、供应链等 |
业务产品 | 按照产品的内容和业务方向进行子域划分 | 金融系统下的储蓄卡业务、外汇业务、保险业务等 |
业务概念 | 根据系统中客观存在的业务概念划分子域 | 医疗健康系统中的问诊、开方、购药、随访等 |
6.注意
某个子域有可能被定义为核心子域,支撑子域和通用子域,这种定义不是静止的,有可能随着业务的发展而发生变化