Skip to content

Refactor: 架构分层重构 — 提取 AuthService、UseCase 层并统一依赖注入方式 #62

Merged
sky130 merged 3 commits into
masterfrom
feat-update-architecture
May 1, 2026
Merged

Refactor: 架构分层重构 — 提取 AuthService、UseCase 层并统一依赖注入方式 #62
sky130 merged 3 commits into
masterfrom
feat-update-architecture

Conversation

@sky130
Copy link
Copy Markdown
Owner

@sky130 sky130 commented May 1, 2026

对核心架构进行系统性重构,解决 Repository 层职责过重、UseCase 层使用不一致、依赖注入方式不统一等问题。

  • 提取 AuthService 封装认证/会话管理,MiotRepositoryImpl 不再承担 token 校验与刷新逻辑
  • 提取 ConvertHomeDataUseCase 封装数据组装业务逻辑,Repository 只负责原始数据获取
  • 引入 LoginUseCase 封装登录网络操作,LoginViewModel 不再直接调用 MiotLoginProvider
  • 将 DeviceTileService.refresh() 从 LocalRepositoryImpl 移至 DeviceTileRefreshService,消除 Repository 中的 UI 副作用
  • 所有 Repository 实现从 KoinComponent + by inject() 改为构造函数注入,提升可测试性与依赖透明度
  • 为 SplashActivity 创建 SplashViewModel,路由决策不再直接写在 Activity 中
  • MainViewModel 移除 MiotUserDataStore 直接暴露,登出逻辑封装到 logout() 方法
  • AboutViewModel 从全局静态 context 改为注入 Application

sky130 added 3 commits May 1, 2026 20:51
- **新增 UseCase 层**:
    - 引入 `useCaseModule` 并使用 Koin 进行依赖注入。
    - 新增 `GetSortedDevicesUseCase`:封装设备获取与排序逻辑,并集成 Mock 设备注入。
    - 新增 `GetSortedRoomsUseCase`:按名称排序获取当前家庭的房间列表。
    - 新增 `GetHomeScenesUseCase`:获取当前家庭的场景列表。
    - 新增 `RefreshHomeDataUseCase`:封装家庭数据刷新逻辑。
    - 新增 `MapFragmentStateUseCase`:将数据加载结果转换为 `FragmentState`(Loading/Error/Empty/Normal)。
- **重构 ViewModel 与 Fragment 交互**:
    - 简化 `SceneFragment`、`MiWuFragment` 和 `DeviceFragment`,将直接访问 `miotRepository` 的逻辑改为调用 `viewModel` 封装的方法或属性。
    - `MainViewModel` 现在通过 UseCase 处理业务逻辑,不再直接暴露 Repository 内部状态。
- **清理与修正**:
    - 在 `MainActivity` 中修正拼写错误:`checkLoginStatue` -> `checkLoginStatus`。
    - 统一通过 `viewModel` 获取登录状态和用户信息。
- **重构登录逻辑**:
    - 引入 `LoginUseCase` 统一处理密码登录、二维码生成及扫码登录流程。
    - 引入 `AuthService` 负责用户会话管理、Token 刷新及登出逻辑,解耦 `MiotRepositoryImpl`。
    - 简化 `LoginViewModel`,将业务逻辑委托给 `LoginUseCase`。
- **优化 Repository 层**:
    - 重构 `MiotRepositoryImpl`,移除非核心逻辑(如数据转换、场景映射),并支持通过构造函数注入依赖以替代 `inject()`。
    - 新增 `ConvertHomeDataUseCase` 负责家庭、设备、房间及场景的数据转换与关联逻辑。
    - `LocalRepositoryImpl` 和 `CacheRepositoryImpl` 改为构造函数注入。
- **增强 UI 与导航**:
    - 新增 `SplashViewModel` 及 `SplashState`,优化启动页的跳转逻辑(崩溃页、主页、登录页)。
    - 统一 `MainViewModel` 和 `RoomViewModel` 的刷新逻辑,移除冗余的 `RefreshHomeDataUseCase`。
    - 优化 `SceneFragment` 和 `RoomFragment` 的点击事件处理,增加安全性检查。
- **代码清理与依赖优化**:
    - 移除 `GetSortedDevicesUseCase` 中的 Mock 设备硬编码。
    - 修复 `AboutViewModel` 对全局上下文的依赖,改用注入 `Application`。
    - 更新 `viewModelModule` 和 `repositoryModule` 以匹配新的构造函数。
    - 修正 `appModule` 中 Koin 模块的包含顺序。
- **EditFavoriteActivity**:
    - 将数据保存逻辑从 `onDestroy` 迁移至 `onPause`,确保排序更改能更及时地持久化。
    - 将 `adapter` 和 `list` 属性设为私有(`private`)。
    - 优化 `TouchCallback` 内部代码结构,简化 `getMovementFlags` 表达并微调 `onSelectedChanged` 的空安全处理。
    - 调整了 `TouchCallback` 内部方法的定义顺序。
- **EditFavoriteViewModel**:
    - 移除 `devices` 数据流中不必要的 `.take(1)` 限制,确保设备列表能持续响应更新。
    - 清理未使用的 `kotlinx.coroutines.flow.take` 导入。
@sky130 sky130 merged commit 0ec3ca1 into master May 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant