SDK_APP/README_REFACTOR.md

4.1 KiB
Raw Blame History

代码重构说明

重构目标

将原本堆在一个MainActivity.kt文件中的所有逻辑分解为多个职责明确的Kotlin文件提高代码的可读性和可维护性。

重构后的文件结构

1. MainActivity.kt - 主界面控制器

职责: 主界面逻辑和生命周期管理

  • 初始化各个管理器
  • 处理按钮点击事件
  • 管理Activity生命周期
  • 协调各个管理器之间的交互

主要方法:

  • onCreate(): 初始化UI和管理器
  • onBleNotify(): 蓝牙数据通知处理
  • resetData(): 重置数据
  • reloadData(): 重新加载数据

2. Constants.kt - 常量定义

职责: 集中管理应用中的所有常量

  • UI更新间隔
  • 数据分块大小
  • 缓冲区管理阈值
  • 显示限制参数

主要常量:

  • UPDATE_INTERVAL: UI更新间隔500ms
  • CHUNK_SIZE: 数据分块大小64字节
  • BUFFER_CLEANUP_THRESHOLD: 缓冲区清理阈值50
  • BUFFER_KEEP_COUNT: 缓冲区保留数量30

3. DeviceTypeHelper.kt - 设备类型工具

职责: 设备类型相关的工具方法

  • 设备类型名称映射
  • 通道数据详情构建

主要方法:

  • getDeviceName(): 根据数据类型获取设备名称
  • buildChannelDetails(): 构建通道数据详情字符串

4. DataManager.kt - 数据管理器

职责: 数据解析、缓冲管理和原生方法调用

  • 管理流式解析器
  • 处理数据块
  • 管理数据缓冲区
  • 调用原生C++方法

主要方法:

  • ensureParser(): 确保解析器已创建
  • onBleNotify(): 处理蓝牙通知数据块
  • processFileData(): 处理文件数据
  • cleanupBuffer(): 智能清理缓冲区
  • resetData(): 重置所有数据

原生方法:

  • createStreamParser(): 创建流式解析器
  • streamParserAppend(): 向解析器追加数据
  • streamParserDrainPackets(): 从解析器拉取数据包
  • destroyStreamParser(): 销毁解析器

5. UiManager.kt - UI管理器

职责: UI更新、统计信息构建和显示逻辑

  • 管理UI更新调度
  • 构建统计信息
  • 构建显示内容
  • 触发UI更新

主要方法:

  • scheduleUiUpdate(): 计划UI更新避免频繁刷新
  • buildStatisticsString(): 构建统计信息字符串
  • buildDisplayContent(): 构建完整的显示内容
  • updateDisplay(): 更新UI显示内容

6. FileHelper.kt - 文件帮助类

职责: 文件读取操作

  • 从assets文件夹读取文件

主要方法:

  • readAssetFile(): 读取assets文件到字节数组

重构优势

1. 职责分离

  • 每个类都有明确的单一职责
  • 降低了类之间的耦合度
  • 提高了代码的可测试性

2. 代码复用

  • 工具方法可以在多个地方复用
  • 减少了重复代码
  • 提高了开发效率

3. 维护性提升

  • 修改某个功能只需要修改对应的类
  • 代码结构更清晰,易于理解
  • 降低了修改的风险

4. 可扩展性

  • 新增功能可以创建新的类
  • 现有类可以独立扩展
  • 支持团队协作开发

数据流向

MainActivity → DataManager → 原生解析器
     ↓
UiManager ← DataManager ← 数据缓冲区
     ↓
   UI更新

使用说明

  1. MainActivity: 作为入口点,协调各个管理器
  2. DataManager: 处理所有数据相关的操作
  3. UiManager: 负责所有UI相关的更新
  4. DeviceTypeHelper: 提供设备类型相关的工具方法
  5. Constants: 集中管理所有常量
  6. FileHelper: 处理文件读取操作

注意事项

  1. 原生方法: 所有原生C++方法现在都在DataManager中声明
  2. 依赖关系: 各个类之间有明确的依赖关系,避免循环依赖
  3. 线程安全: UI更新始终在主线程进行数据操作在后台线程进行
  4. 错误处理: 每个类都有适当的错误处理和日志记录

后续优化建议

  1. 依赖注入: 可以考虑使用Dagger或Koin进行依赖注入
  2. 响应式编程: 可以考虑使用RxJava或Flow进行数据流处理
  3. 单元测试: 重构后的代码更容易进行单元测试
  4. 文档完善: 可以添加更详细的API文档和示例代码