REFACTORING_SUMMARY.md 5.3 KB

软总线架构重构总结

已完成的工作

1. 目录结构创建 ✅

已创建新的分层目录结构:

  • src/common/dom/ - DOM模型定义
  • src/common/types.h - 公共类型定义
  • src/core/pal/ - 协议适配层
  • src/core/dal/ - 数据抽象层
  • src/core/sbl/ - 服务总线层
  • src/api/ - 统一接口层

2. 核心组件实现 ✅

DOM模型 (src/common/dom/DomBase.h)

  • ✅ DomBase 基类
  • ✅ ProcessData (过程数据)
  • ✅ ControlCommand (控制指令)
  • ✅ MonitorData (监控数据)
  • ✅ ManagementData (管理数据)

协议适配层 (src/core/pal/)

  • ✅ IProtocolAdapter 接口
  • ✅ SerialProtocolAdapter 实现(包装现有SerialManager)

数据抽象层 (src/core/dal/)

  • ✅ DataMapper (地址映射、工程量转换、死区过滤)
  • ✅ DataProcessor (数据质量标记、限值检查)

服务总线层 (src/core/sbl/)

  • ✅ MessageDispatcher (优先级队列、消息路由)
  • ✅ TopicTree (主题树、通配符订阅)

核心单例 (src/core/SoftBusCore.h/cpp)

  • ✅ 管理所有核心模块的生命周期
  • ✅ 协议适配器注册和管理
  • ✅ 协调各层交互

统一接口层 (src/api/SoftBusAPI.h/cpp)

  • ✅ 单例模式
  • ✅ 统一查询接口 (getValue)
  • ✅ 控制指令发送 (sendCommand)
  • ✅ 数据订阅 (subscribe)
  • ✅ 数据变化信号 (dataChanged)

3. CMakeLists.txt 更新 ✅

已将所有新文件添加到CMakeLists.txt中。

4. 文档创建 ✅

  • docs/ARCHITECTURE.md - 架构说明文档
  • docs/REFACTORING_GUIDE.md - 重构指南

待完成的工作

1. UI层重构 ⏳

需要重构以下UI组件,移除直接Manager依赖:

  • SerialDockPage - 移除SerialManager成员,改用API
  • SerialDataWidget - 移除setSerialManager,改用API
  • ViewCan - 移除CanManager成员,改用API
  • 其他直接使用Manager的Widget

示例重构(见 docs/REFACTORING_GUIDE.md):

// 旧代码
connect(m_serialManager, &SerialManager::dataReceived, ...);

// 新代码
connect(SoftBusAPI::instance(), &SoftBusAPI::dataChanged, ...);

2. 数据映射配置 ⏳

需要创建映射配置文件:

  • 创建 config/tag_mapping.json 示例文件
  • 在初始化时加载映射配置
  • 为现有设备创建映射关系

3. 主程序初始化 ⏳

需要更新 main.cpp

  • 初始化 SoftBusAPI
  • 创建并注册协议适配器
  • 加载映射配置
  • 保持向后兼容(旧的SoftBusCore用于数据库)

4. 测试和验证 ⏳

  • 测试数据流:串口 -> 适配器 -> 调度器 -> API -> UI
  • 测试控制指令:UI -> API -> 调度器 -> 适配器 -> 串口
  • 验证数据映射功能
  • 验证死区过滤功能
  • 验证优先级队列

5. 扩展功能(可选)⏳

  • CAN协议适配器(类似SerialProtocolAdapter)
  • 共享内存传输(零拷贝)
  • 数据存储模块(PostgreSQL集成)
  • 分布式发现和通信

使用新架构的步骤

Step 1: 初始化(在main.cpp中)

#include "api/SoftBusAPI.h"
#include "core/SoftBusCore.h"
#include "core/pal/serial/SerialProtocolAdapter.h"
#include "serial_manager/serial_manager.h"
#include "soft_bus_core/soft_bus_core.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 1. 初始化新的软总线API
    SoftBusAPI* api = SoftBusAPI::instance();
    api->initialize();

    // 2. 创建旧的SoftBusCore(用于数据库兼容)
    SoftBusCore* oldBusCore = new SoftBusCore();
    oldBusCore->initDB("soft_bus_db");

    // 3. 创建SerialManager(保持向后兼容)
    SerialManager* serialManager = new SerialManager(oldBusCore);

    // 4. 创建协议适配器并注册
    SerialProtocolAdapter* serialAdapter = new SerialProtocolAdapter();
    serialAdapter->setSerialManager(serialManager);
    SoftBusCore::instance()->registerProtocolAdapter(serialAdapter);

    // 5. 加载映射配置
    SoftBusCore::instance()->getDataMapper()->loadProfile("config/tag_mapping.json");

    // 6. 创建主窗口
    MainWindow window;
    window.show();

    return app.exec();
}

Step 2: UI组件使用API

// 在UI组件中
#include "api/SoftBusAPI.h"

// 订阅数据
SoftBusAPI::instance()->subscribe("*");
connect(SoftBusAPI::instance(), &SoftBusAPI::dataChanged,
        this, &MyWidget::onDataChanged);

// 发送控制指令
SoftBusAPI::instance()->sendCommand("Pump.Main.Control", 1);

架构优势

  1. 解耦: UI层不再直接依赖Manager,只依赖API
  2. 可测试: 核心层可以独立测试,无需UI
  3. 可扩展: 添加新协议只需实现IProtocolAdapter接口
  4. 可维护: 清晰的分层结构,职责明确
  5. 可复用: 核心层可以在无头模式下运行

注意事项

  1. 向后兼容: 旧的SoftBusCore和SerialManager仍然保留,用于数据库等功能
  2. 逐步迁移: 建议先重构一个模块验证流程,再逐步迁移其他模块
  3. 数据映射: 确保所有物理地址都有对应的逻辑点名映射
  4. 线程安全: 使用Qt::QueuedConnection确保信号槽的线程安全

下一步行动

  1. 选择一个UI组件(如SerialDockPage)进行重构试点
  2. 创建映射配置文件
  3. 更新main.cpp初始化新架构
  4. 测试验证数据流
  5. 逐步迁移其他UI组件