# 软总线架构重构总结 ## 已完成的工作 ### 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`): ```cpp // 旧代码 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中) ```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 ```cpp // 在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组件