You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

领域驱动设计(DDD):基于网关监控领域模型定义边界与聚合咨询

领域模型示意图

边界划分方案

先按业务能力拆分限界上下文作为一级逻辑边界,不同上下文之间仅通过ID关联,禁止直接依赖内部实现:

  • 组织管理上下文:负责公司、项目的基础信息维护,属于全局基础数据域,和网关、采集的业务逻辑完全解耦
  • 网关配置上下文:负责所有类型网关的定义、实例管理、专属子资源配置,不同网关类型的实现逻辑在上下文内部通过多态隔离
  • 变量管理上下文:负责变量的配置、下发、生效校验,是独立的业务域,和网关配置的变更流程解耦
  • 数据采集上下文:负责上报数据的接收、解析、存储,和配置类逻辑完全隔离

聚合设计方案

不需要把所有对象都设计为独立聚合。聚合的核心作用是保证边界内的业务规则强一致,只有具备独立生命周期、不需要和其他对象在同一事务内保证一致性的对象,才适合作为独立聚合的根实体。从属对象如果生命周期完全绑定某个根实体,且变更需要和根实体保持强一致,直接作为对应聚合内的子实体即可,不需要单独拆分聚合。

各上下文内的具体聚合设计如下:

  1. 组织管理上下文
    • 公司聚合:根实体为Company,包含公司基础属性,独立聚合
    • 项目聚合:根实体为Project,关联所属company_id,独立聚合,项目的生命周期不依赖公司的实时变更,无需和公司放在同一个聚合
  2. 网关配置上下文
    • 网关聚合:根实体为Gateway,是上下文内唯一的聚合根,不同网关类型用多态实现,内部包含对应类型的专属子实体:
      • Field-Device-Gateway类型:内部包含FieldDevice子实体集合,每个FieldDevice下包含关联的Source集合
      • HTTP-Client-Gateway类型:内部包含HttpClient子实体集合,每个HttpClient下包含关联的Route集合
        子实体的生命周期完全绑定网关,网关删除时子实体同步删除,强一致要求符合同聚合的设计原则,无需拆分为独立聚合。
  3. 变量管理上下文
    • 变量聚合:根实体为Variable,独立聚合,关联字段包含company_id、project_id、gateway_id,以及对应网关类型所需的配置字段(如关联的field device ID、source ID等)
      变量的配置、下发是独立的业务流程,不需要和网关的其他变更放在同一个事务中处理,拆分为独立聚合可大幅降低网关聚合的复杂度,避免并发冲突。

跨聚合业务规则校验实现

针对「变量必须关联存在的公司、项目、网关才可创建/生效」的业务规则,采用「前置强校验+最终一致性兜底」的方案实现,无需破坏聚合边界:

  • 创建/更新变量时的实时校验:变量的创建/更新接口在参数校验阶段,分别调用组织管理上下文、网关配置上下文的公共查询接口,校验传入的company_id、project_id、gateway_id对应的实体均存在且处于可用状态,校验不通过直接拒绝请求
  • 关联资源删除后的兜底处理:如果出现公司、项目、网关被删除的场景,通过领域事件异步处理关联变量的清理:
    • 公司/项目/网关删除时,对应上下文发布CompanyDeleted/ProjectDeleted/GatewayDeleted领域事件
    • 变量管理上下文订阅上述事件,接收到事件后批量失效/删除关联对应ID的所有变量,保证业务规则的最终一致性

扩展优化建议

后续新增网关类型时,仅需要在网关配置上下文的网关聚合下新增对应类型的子类实现,无需修改其他上下文的逻辑,符合开闭原则。


内容的提问来源于stack exchange,提问作者Luuk Wuijster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:06:01