基于DDD的MCP网关设计

354 阅读2分钟

MCP网关的设计

参考

领域驱动设计DDD在B端营销系统的实践 - 美团技术团队 (meituan.com)

大模型服务平台百炼控制台 (aliyun.com)

领域驱动设计在互联网业务开发中的实践 - 美团技术团队 (meituan.com)

 

战略设计实践

将业务映射为概念模型,采用DDD的方法论

确定用例

使用用例图表达业务是怎么玩的,表达用户与系统的交互 image.png

统一语言

抽取概念

明确概念,统一语言 去伪存真,抽象合并 image.png

明确含义

image.png

厘清关系(生成概念模型)

 image.png

划分边界

image.png

整体上下文关系

image.png

核心业务逻辑

image.png  

战术设计实践

将概念模型映射为代码模型,采用面向对象范式

┌─────────────────────────────────────────────────────────────────┐
│                      表现层 (Presentation Layer)                 │
│  ┌───────────────┐  ┌───────────────┐  ┌─────────────────────┐  │
│  │  McpController │  │SubscriptionCtrl│  │  GatewayController  │  │  # 对外API接口
│  └───────────────┘  └───────────────┘  └─────────────────────┘  │
│  ┌───────────────┐  ┌───────────────┐  ┌─────────────────────┐  │
│  │ProtocolConvCtrl│  │  DTO 转换器   │  │  请求参数校验器     │  │  # 协议转换接口/辅助组件
│  └───────────────┘  └───────────────┘  └─────────────────────┘  │
│  ┌───────────────┐  ┌───────────────┐  ┌─────────────────────┐  │
│  │  全局异常处理  │  │  接口文档生成  │  │  限流拦截器         │  │  # 横切辅助组件
│  └───────────────┘  └───────────────┘  └─────────────────────┘  │
└───────────────────────────────┬─────────────────────────────────┘
                                │
┌───────────────────────────────▼─────────────────────────────────┐
│                      应用层 (Application Layer)                  │
│  ┌───────────────┐  ┌───────────────┐  ┌─────────────────────┐  │
│  │ McpAppService │  │SubscriptionSvc│  │  GatewayAppService  │  │  # 子域用例编排
│  └───────────────┘  └───────────────┘  └─────────────────────┘  │
│  ┌───────────────┐  ┌───────────────┐  ┌─────────────────────┐  │
│  │ProtocolConvSvc│  │  事务管理器   │  │  操作日志记录器     │  │  # 协议转换服务/横切关注点
│  └───────────────┘  └───────────────┘  └─────────────────────┘  │
│  ┌───────────────┐  ┌───────────────┐  ┌─────────────────────┐  │
│  │  权限校验器   │  │  分布式锁     │  │  配置加载器         │  │  # 通用服务组件
│  └───────────────┘  └───────────────┘  └─────────────────────┘  │
└───────────────────────────────┬─────────────────────────────────┘
                                │
┌───────────────────────────────▼─────────────────────────────────┐
│                      领域层 (Domain Layer)                       │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  实体 (Entity)                                              ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││
│  │  │   Mcp   │  │Subscription│  │Invocation│  │  AuthPolicy  │ ││  # 核心业务实体
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  │  ┌─────────┐                                                ││
│  │  │ProtocolDef│  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││  # 协议转换实体
│  │  └─────────┘  │ConvRule    │  │PayloadMap│  │              │ ││
│  │               └───────────┘  └─────────┘  └───────────────┘ ││
│  └─────────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  值对象 (Value Object)                                      ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││
│  │  │McpUrl   │  │SubMode    │  │AuthType │  │  Credentials  │ ││  # 基础值对象
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││  # 协议转换值对象
│  │  │ProtocolType│  │PayloadType│  │ConvStatus│  │  RuleId      │ ││
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  └─────────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  领域服务 (Domain Service)                                  ││
│  │  ┌─────────────────┐  ┌────────────────┐  ┌──────────────┐ ││  # 核心领域服务
│  │  │ AuthenticationSvc │  │  GatewaySvc   │  │  DeploySvc   │ ││
│  │  └─────────────────┘  └────────────────┘  └──────────────┘ ││
│  │  ┌─────────────────┐  ┌────────────────┐  ┌──────────────┐ ││  # 协议转换领域服务
│  │  │ProtocolConvSvc  │  │  RuleManager   │  │PayloadTransSvc│ ││
│  │  └─────────────────┘  └────────────────┘  └──────────────┘ ││
│  └─────────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  仓储接口 (Repository Interface)                            ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││  # 基础仓储接口
│  │  │McpRepo  │  │SubRepo    │  │InvocRepo│  │AuthPolicyRepo │ ││
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││  # 协议转换仓储接口
│  │  │ProtocolRepo│  │ConvRuleRepo│  │PayloadMapRepo│  │      │ ││
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  └─────────────────────────────────────────────────────────────┘│
└───────────────────────────────┬─────────────────────────────────┘
                                │
┌───────────────────────────────▼─────────────────────────────────┐
│                  基础设施层 (Infrastructure Layer)              │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  仓储实现 (Repository Impl)                                 ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││  # 基础仓储实现
│  │  │McpRepoImpl│  │SubRepoImpl│  │InvocRepoImpl│AuthPolicyRepoImpl││
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  │  ┌─────────┐  ┌───────────┐  ┌─────────┐  ┌───────────────┐ ││  # 协议转换仓储实现
│  │  │ProtocolRepoImpl│ConvRuleRepoImpl│PayloadMapRepoImpl│      │ ││
│  │  └─────────┘  └───────────┘  └─────────┘  └───────────────┘ ││
│  └─────────────────────────────────────────────────────────────┘│
│  ┌────────────────────────