Files
vue-desktop/.qoder/quests/system-business-decoupling-design.md
2025-10-10 10:37:11 +08:00

17 KiB
Raw Blame History

系统与业务解耦架构设计

概述

本设计旨在构建一个高性能的类Windows桌面前端系统实现系统框架与业务应用的完全解耦。系统提供统一的桌面环境、窗体管理和资源访问控制而业务应用通过标准化的SDK接口进行开发确保双方独立演进且相互不影响。

核心设计原则

  • 完全隔离:系统与应用在运行时完全隔离,应用无法直接访问系统资源
  • 标准化接口通过统一的SDK提供标准化的系统服务接口
  • 性能优先:采用微前端沙箱、虚拟化渲染等技术确保高性能
  • 框架无关:支持任意前端框架开发的第三方应用
  • 安全可控:严格的权限控制和安全沙箱机制

整体架构

系统分层架构

graph TB
    subgraph "用户界面层"
        Desktop[桌面容器]
        WindowManager[窗体管理器]
        TaskBar[任务栏]
        SystemUI[系统UI组件]
    end

    subgraph "系统服务层"
        WindowFormService[窗体服务]
        ResourceService[资源服务]
        EventService[事件服务]
        SecurityService[安全服务]
        StorageService[存储服务]
    end

    subgraph "应用运行时层"
        AppContainer[应用容器]
        SandboxEngine[沙箱引擎]
        SDKBridge[SDK桥接层]
        AppLifecycle[应用生命周期]
    end

    subgraph "第三方应用"
        App1[业务应用A]
        App2[业务应用B]
        App3[业务应用C]
    end

    Desktop --> WindowManager
    WindowManager --> WindowFormService
    AppContainer --> SandboxEngine
    SDKBridge --> SystemService[系统服务层]
    App1 --> AppContainer
    App2 --> AppContainer
    App3 --> AppContainer

核心组件职责

组件 职责 接口类型
桌面容器 管理应用图标、布局和交互 系统内部
窗体管理器 窗体创建、管理、切换和销毁 系统内部
应用容器 第三方应用运行环境隔离 对外SDK
沙箱引擎 安全隔离和权限控制 系统内部
SDK桥接层 系统服务的标准化接口 对外SDK

系统核心服务

窗体管理服务

窗体管理服务负责所有窗体的生命周期管理,提供统一的窗体操作接口。

窗体生命周期

stateDiagram-v2
    [*] --> Creating: 创建窗体
    Creating --> Loading: 加载应用
    Loading --> Active: 激活显示
    Active --> Minimized: 最小化
    Minimized --> Active: 恢复显示
    Active --> Maximized: 最大化
    Maximized --> Active: 还原
    Active --> Closing: 关闭请求
    Closing --> Destroyed: 销毁完成
    Destroyed --> [*]

    Loading --> Error: 加载失败
    Error --> Destroyed: 错误处理

窗体服务接口规范

服务方法 参数 返回值 描述
createWindow appId, config WindowInstance 创建新窗体
destroyWindow windowId boolean 销毁指定窗体
minimizeWindow windowId boolean 最小化窗体
maximizeWindow windowId boolean 最大化窗体
restoreWindow windowId boolean 还原窗体
setWindowTitle windowId, title boolean 设置窗体标题
setWindowSize windowId, width, height boolean 设置窗体尺寸

资源管理服务

资源管理服务提供统一的系统资源访问控制,确保应用只能通过授权访问系统资源。

资源访问控制矩阵

资源类型 默认权限 申请方式 审批流程
本地存储 应用独立空间 配置声明 自动授权
网络请求 白名单域名 动态申请 用户确认
文件系统 禁止访问 动态申请 用户确认
系统通知 禁止发送 动态申请 用户确认
剪贴板 禁止访问 动态申请 用户确认
摄像头麦克风 禁止访问 动态申请 用户确认

事件通信服务

提供系统级别的事件通信机制,支持应用间消息传递和系统事件监听。

事件分类与权限

graph LR
    subgraph "系统事件"
        SE1[窗体状态变化]
        SE2[主题切换]
        SE3[网络状态变化]
        SE4[系统资源变化]
    end

    subgraph "应用事件"
        AE1[应用间消息]
        AE2[应用状态同步]
        AE3[数据共享请求]
    end

    subgraph "用户事件"
        UE1[用户交互]
        UE2[快捷键触发]
        UE3[拖拽操作]
    end

    SE1 --> 只读监听
    SE2 --> 只读监听
    AE1 --> 权限验证
    AE2 --> 权限验证
    UE1 --> 应用内处理

应用沙箱机制

沙箱隔离策略

应用运行在完全隔离的沙箱环境中,通过多重隔离机制确保安全性。

沙箱隔离层次

graph TD
    subgraph "物理隔离层"
        IFrame[IFrame容器]
        ShadowDOM[Shadow DOM]
        CSP[内容安全策略]
    end

    subgraph "逻辑隔离层"
        Namespace[命名空间隔离]
        Memory[内存隔离]
        Storage[存储隔离]
    end

    subgraph "网络隔离层"
        CORS[跨域限制]
        Proxy[代理拦截]
        Whitelist[白名单过滤]
    end

    subgraph "API隔离层"
        SDKProxy[SDK代理]
        Permission[权限验证]
        Audit[审计日志]
    end

    IFrame --> Namespace
    ShadowDOM --> Memory
    CSP --> Storage
    Namespace --> SDKProxy
    Memory --> Permission
    Storage --> Audit

沙箱性能优化

虚拟化渲染机制

flowchart TD
    Start[应用启动] --> CheckCache{检查缓存}
    CheckCache -->|存在| LoadCache[加载缓存实例]
    CheckCache -->|不存在| CreateSandbox[创建沙箱]

    CreateSandbox --> PreloadResources[预加载资源]
    PreloadResources --> InitSDK[初始化SDK]
    InitSDK --> MountApp[挂载应用]

    LoadCache --> ValidateCache{验证缓存有效性}
    ValidateCache -->|有效| RestoreApp[恢复应用状态]
    ValidateCache -->|无效| CreateSandbox

    MountApp --> AppReady[应用就绪]
    RestoreApp --> AppReady

    AppReady --> Monitor[性能监控]
    Monitor --> OptimizeMemory[内存优化]
    OptimizeMemory --> CheckIdle{检查空闲状态}
    CheckIdle -->|空闲| SuspendApp[挂起应用]
    CheckIdle -->|活跃| Monitor

    SuspendApp --> CheckActivate{检查激活请求}
    CheckActivate -->|激活| RestoreApp
    CheckActivate -->|继续空闲| SuspendApp

SDK接口设计

SDK架构组成

SDK作为应用与系统间的唯一通信桥梁提供完整的系统服务接口。

SDK模块划分

模块名称 功能描述 主要接口
WindowSDK 窗体操作 setTitle, resize, minimize, maximize
StorageSDK 数据存储 get, set, remove, clear
EventSDK 事件通信 emit, on, off, broadcast
UISDK UI组件 showDialog, showNotification, showToast
NetworkSDK 网络请求 request, upload, download
ResourceSDK 资源访问 getFile, saveFile, getClipboard

SDK使用示例

窗体操作SDK

// 应用中使用窗体SDK的示例
interface WindowSDK {
  // 设置窗体标题
  setTitle(title: string): Promise<boolean>

  // 调整窗体尺寸
  resize(width: number, height: number): Promise<boolean>

  // 最小化窗体
  minimize(): Promise<boolean>

  // 最大化窗体
  maximize(): Promise<boolean>

  // 监听窗体状态变化
  onStateChange(callback: (state: WindowState) => void): void
}

存储服务SDK

// 应用存储SDK接口定义
interface StorageSDK {
  // 存储数据
  set(key: string, value: any): Promise<boolean>

  // 获取数据
  get(key: string): Promise<any>

  // 删除数据
  remove(key: string): Promise<boolean>

  // 清空存储
  clear(): Promise<boolean>

  // 监听存储变化
  onChanged(callback: (key: string, newValue: any, oldValue: any) => void): void
}

SDK权限控制机制

权限申请流程

sequenceDiagram
    participant App as 第三方应用
    participant SDK as SDK桥接层
    participant Security as 安全服务
    participant User as 用户界面
    participant System as 系统服务

    App->>SDK: 调用需权限的API
    SDK->>Security: 检查权限状态

    alt 已授权
        Security->>SDK: 返回已授权
        SDK->>System: 调用系统服务
        System->>SDK: 返回执行结果
        SDK->>App: 返回结果
    else 未授权
        Security->>User: 显示权限申请弹窗
        User->>Security: 用户确认/拒绝
        alt 用户同意
            Security->>SDK: 授权通过
            SDK->>System: 调用系统服务
            System->>SDK: 返回执行结果
            SDK->>App: 返回结果
        else 用户拒绝
            Security->>SDK: 权限被拒绝
            SDK->>App: 返回权限错误
        end
    end

应用生命周期管理

应用状态管理

应用在系统中具有完整的生命周期管理,确保资源的合理分配和回收。

应用状态转换图

stateDiagram-v2
    [*] --> Installing: 安装应用
    Installing --> Installed: 安装完成
    Installing --> InstallFailed: 安装失败
    InstallFailed --> [*]

    Installed --> Starting: 启动应用
    Starting --> Running: 运行中
    Starting --> StartFailed: 启动失败
    StartFailed --> Installed

    Running --> Suspended: 挂起
    Suspended --> Running: 恢复
    Running --> Stopping: 停止
    Stopping --> Installed: 已停止

    Installed --> Uninstalling: 卸载应用
    Uninstalling --> [*]: 卸载完成

应用资源管理

内存管理策略

应用状态 内存策略 清理时机 恢复方式
Running 完整内存保持 不清理 无需恢复
Suspended 压缩非关键数据 5分钟后 延迟加载
Background 最小化内存占用 立即清理 重新初始化
Stopped 完全释放内存 立即清理 完整重启

性能监控指标

graph LR
    subgraph "性能指标"
        CPU[CPU使用率]
        Memory[内存占用]
        Network[网络请求]
        Render[渲染性能]
    end

    subgraph "监控阈值"
        CPULimit[CPU < 30%]
        MemoryLimit[内存 < 100MB]
        NetworkLimit[请求 < 10/s]
        RenderLimit[FPS > 30]
    end

    subgraph "优化策略"
        Throttle[请求节流]
        Cache[智能缓存]
        Lazy[懒加载]
        Virtual[虚拟滚动]
    end

    CPU --> CPULimit
    Memory --> MemoryLimit
    Network --> NetworkLimit
    Render --> RenderLimit

    CPULimit --> Throttle
    MemoryLimit --> Cache
    NetworkLimit --> Throttle
    RenderLimit --> Virtual

数据流架构

系统数据流

系统采用单向数据流架构,确保数据的一致性和可追踪性。

数据流向图

flowchart TD
    subgraph "系统层"
        SystemStore[系统状态存储]
        SystemEvents[系统事件总线]
        SystemServices[系统服务]
    end

    subgraph "应用层"
        AppState[应用状态]
        AppEvents[应用事件]
        AppSDK[应用SDK]
    end

    subgraph "界面层"
        SystemUI[系统界面]
        AppUI[应用界面]
    end

    SystemStore --> SystemUI
    SystemEvents --> SystemUI
    SystemServices --> AppSDK
    AppSDK --> AppState
    AppState --> AppUI
    AppEvents --> SystemEvents

    SystemUI --> SystemEvents
    AppUI --> AppEvents

跨应用数据共享

数据共享权限模型

graph TB
    subgraph "数据提供者"
        ProviderApp[应用A]
        DataExport[导出数据接口]
        Permission[权限配置]
    end

    subgraph "系统中介"
        DataBroker[数据代理服务]
        PermissionCheck[权限验证]
        DataTransform[数据转换]
    end

    subgraph "数据消费者"
        ConsumerApp[应用B]
        DataImport[导入数据接口]
        DataValidation[数据验证]
    end

    ProviderApp --> DataExport
    DataExport --> DataBroker
    Permission --> PermissionCheck
    DataBroker --> PermissionCheck
    PermissionCheck --> DataTransform
    DataTransform --> DataImport
    DataImport --> ConsumerApp
    DataImport --> DataValidation

部署与运维

应用分发机制

系统支持多种应用分发方式,确保第三方应用的便捷接入。

应用打包规范

文件类型 必需性 描述 示例
manifest.json 必需 应用清单文件 包含应用基本信息、权限需求
index.html 必需 应用入口文件 应用主页面
assets/ 可选 静态资源目录 CSS、图片、字体等
sdk/ 可选 SDK依赖文件 如需离线使用SDK

应用安装流程

flowchart TD
    Upload[上传应用包] --> Validate[验证应用包]
    Validate --> Extract[解压应用文件]
    Extract --> ScanSecurity[安全扫描]
    ScanSecurity --> CheckPermission[权限检查]
    CheckPermission --> RegisterApp[注册应用]
    RegisterApp --> CreateSandbox[创建沙箱环境]
    CreateSandbox --> InstallComplete[安装完成]

    Validate -->|验证失败| InstallFailed[安装失败]
    ScanSecurity -->|安全风险| InstallFailed
    CheckPermission -->|权限过度| UserConfirm[用户确认]
    UserConfirm -->|同意| RegisterApp
    UserConfirm -->|拒绝| InstallFailed

系统监控与日志

监控体系架构

graph TB
    subgraph "数据采集层"
        AppMetrics[应用性能指标]
        SystemMetrics[系统性能指标]
        UserActions[用户行为数据]
        ErrorLogs[错误日志]
    end

    subgraph "数据处理层"
        DataAggregator[数据聚合器]
        AlertEngine[告警引擎]
        Analytics[分析引擎]
    end

    subgraph "展示层"
        Dashboard[监控面板]
        Reports[性能报告]
        Alerts[告警通知]
    end

    AppMetrics --> DataAggregator
    SystemMetrics --> DataAggregator
    UserActions --> Analytics
    ErrorLogs --> AlertEngine

    DataAggregator --> Dashboard
    Analytics --> Reports
    AlertEngine --> Alerts

安全机制

多层安全防护

系统采用多层安全防护机制,确保系统和应用的安全运行。

安全防护体系

防护层级 防护措施 防护目标
网络层 HTTPS强制、CSP策略 传输安全
应用层 沙箱隔离、权限控制 运行安全
数据层 加密存储、访问控制 数据安全
用户层 身份验证、操作审计 使用安全

权限管理系统

权限分级模型

graph TD
    subgraph "系统权限"
        SysAdmin[系统管理员]
        SysOperator[系统操作员]
        SysUser[系统用户]
    end

    subgraph "应用权限"
        AppOwner[应用所有者]
        AppUser[应用用户]
        AppGuest[应用访客]
    end

    subgraph "资源权限"
        ReadOnly[只读权限]
        ReadWrite[读写权限]
        FullControl[完全控制]
    end

    SysAdmin --> FullControl
    SysOperator --> ReadWrite
    SysUser --> ReadOnly

    AppOwner --> FullControl
    AppUser --> ReadWrite
    AppGuest --> ReadOnly

性能优化策略

渲染性能优化

虚拟化渲染机制

flowchart TD
    ViewportDetection[视口检测] --> VisibilityCheck{可见性检查}
    VisibilityCheck -->|可见| RenderApp[渲染应用]
    VisibilityCheck -->|不可见| SuspendRender[暂停渲染]

    RenderApp --> FrameOptimization[帧率优化]
    FrameOptimization --> RequestAnimationFrame[RAF调度]
    RequestAnimationFrame --> RenderComplete[渲染完成]

    SuspendRender --> MemoryCleanup[内存清理]
    MemoryCleanup --> LowPowerMode[低功耗模式]

    RenderComplete --> ViewportDetection
    LowPowerMode --> ViewportDetection

内存管理优化

智能内存回收策略

回收时机 回收对象 回收策略 恢复方式
应用切换时 非活跃应用DOM 延迟5秒回收 重新渲染
内存告警时 缓存数据 LRU算法清理 重新请求
长时间空闲 应用实例 序列化存储 反序列化恢复
系统重启时 所有临时数据 立即清理 重新初始化