2. 架构视角引入:4+1视图模型简介、逻辑视图与资源模型的关系、开发视图与资源模型的关系

在开始设计IDP自助门户的资源模型之前,必须建立统一的架构视角。Philippe Kruchten提出的4+1视图模型是软件架构领域最经典的视角划分方法,它从不同利益相关者的关注点出发,将复杂系统拆解为五个相互关联的视图。对于IDP资源模型设计而言,逻辑视图与开发视图是核心切入点。

2.1 4+1视图模型简介

4+1视图模型通过五个视角描述软件架构,每个视图对应一组特定的关注点与受众:

视图名称 关注点 主要受众 IDP场景示例
逻辑视图 系统功能、业务抽象、实体关系 领域专家、架构师 环境、组件、配额、模板的抽象模型
开发视图 模块组织、代码结构、依赖关系 开发人员、模块负责人 资源模型在代码中的包结构、接口定义
进程视图 运行时并发、同步、通信 系统工程师、性能分析师 资源创建请求的异步编排、事件驱动
部署视图 物理拓扑、网络、节点映射 运维人员、基础设施团队 IDP服务在Kubernetes集群中的部署拓扑
场景视图(+1) 用例、用户交互、端到端流程 所有利益相关者 开发者通过门户自助创建环境的完整流程
架构视角选择建议:在IDP资源模型设计初期,优先聚焦逻辑视图(定义资源是什么、有哪些关系)和开发视图(定义资源模型如何被实现和引用)。进程视图与部署视图通常在模型稳定后,作为运行时保障手段引入。

下图展示了4+1视图模型的结构关系,以及逻辑视图与开发视图在IDP资源模型设计中的核心位置:

4+1 视图模型与IDP资源模型设计焦点 场景视图 (+1) 自助创建环境用例 逻辑视图 资源抽象 · 实体关系 ★ 核心设计视图 开发视图 模块 · 接口 · 依赖 ★ 核心实现视图 进程视图 异步编排 · 事件驱动 部署视图 K8s拓扑 · 节点映射 本章聚焦:逻辑视图 + 开发视图

2.2 逻辑视图与资源模型的关系

逻辑视图关注系统的功能抽象与领域实体关系,它不关心具体的技术实现,而是回答“系统应该提供哪些资源?这些资源之间如何关联?”。在IDP自助门户中,逻辑视图直接决定了资源模型的语义结构。

2.2.1 逻辑视图的核心产出:领域概念模型

从逻辑视图出发,IDP资源模型首先被抽象为一组核心领域实体及其关系:

  • 环境(Environment):开发者可用的隔离工作空间,包含计算、存储、网络等资源组合。
  • 组件(Component):构成应用的最小部署单元,如微服务、数据库、缓存。
  • 模板(Template):预定义的资源组合蓝图,用于快速创建标准化环境。
  • 配额(Quota):资源使用的上限约束,关联到团队或项目。
  • 策略(Policy):资源创建、变更、销毁的规则与审批流程。
逻辑视图设计原则:资源模型中的每个实体都应具有明确的业务含义,避免将技术实现细节(如Pod名称、存储卷ID)直接暴露在逻辑层。逻辑视图是面向人的模型,不是面向机器的模型。

下图展示了IDP资源模型在逻辑视图中的核心实体关系:

逻辑视图:IDP资源模型领域实体关系 环境 (Environment) 隔离工作空间 组件 (Component) 微服务/DB/缓存 模板 (Template) 资源组合蓝图 配额 (Quota) 资源上限约束 策略 (Policy) 规则与审批流程 包含 基于 受限于 执行

2.3 开发视图与资源模型的关系

开发视图将逻辑视图中的领域概念映射为具体的代码模块、接口定义和依赖关系。它回答的是“资源模型在代码中如何组织?开发者如何引用和扩展这些模型?”。开发视图是逻辑模型走向可执行实现的桥梁。

2.3.1 从逻辑实体到代码结构

在IDP自助门户的开发视图中,资源模型通常遵循以下代码组织模式:

逻辑实体 开发视图代码结构 关键接口/类
环境 (Environment) idp-core/src/main/java/.../model/Environment.java EnvironmentService, EnvironmentRepository
组件 (Component) idp-core/src/main/java/.../model/Component.java ComponentFactory, ComponentLifecycle
模板 (Template) idp-template/src/main/java/.../model/Template.java TemplateEngine, TemplateValidator
配额 (Quota) idp-governance/src/main/java/.../model/Quota.java QuotaManager, QuotaEnforcer
策略 (Policy) idp-governance/src/main/java/.../model/Policy.java PolicyEngine, PolicyEvaluator

2.3.2 资源模型的接口契约

开发视图强调模块间的依赖关系与接口契约。资源模型在开发视图中通常表现为一组POJO(Plain Old Java Object)或数据传输对象(DTO),并通过以下方式对外暴露:

// 资源模型核心接口示例
public interface ResourceModel {
    String getResourceType();        // 资源类型标识
    String getResourceId();          // 全局唯一ID
    Map<String, Object> getSpec();   // 资源规格定义
    Map<String, String> getMetadata(); // 元数据标签
}

// 环境资源的具体实现
public class Environment implements ResourceModel {
    private String environmentId;
    private String name;
    private String namespace;
    private List<Component> components;
    private Quota quota;
    private Policy policy;

    // getters, setters, builders...
}
开发视图常见陷阱:将逻辑视图中的实体关系直接照搬到代码依赖中,导致模块间耦合度过高。例如,让Environment直接依赖Component的内部实现类,而不是依赖Component接口。正确的做法是在开发视图中引入依赖倒置,让高层模块依赖抽象接口。

2.3.3 逻辑视图与开发视图的映射关系总结

下表总结了两个视图在IDP资源模型设计中的核心差异与协作方式:

对比维度 逻辑视图 开发视图
关注点 业务语义、实体关系 代码结构、模块依赖
产出物 领域概念模型、实体关系图 包结构、接口定义、类图
受众 领域专家、产品经理、架构师 开发人员、模块负责人
变化频率 低(业务稳定后很少变动) 中(随技术选型迭代调整)
IDP资源模型示例 环境包含组件,组件受配额约束 Environment.java 引用 Component接口
设计原则 高内聚、低耦合的业务抽象 接口隔离、依赖倒置、模块化
实践建议:在IDP自助门户项目中,建议先完成逻辑视图的领域建模(产出实体关系图),再基于逻辑模型推导开发视图的模块划分与接口设计。逻辑视图的稳定性决定了开发视图的扩展性——逻辑模型越清晰,代码重构的成本越低。