在很多 Android 项目中,我们经常能看到各种 Manager:

这些类似乎什么都能做:
- 管理数据
- 协调业务
- 调用网络
- 操作数据库
- 维护状态
于是一个 Manager 很容易变成这样:

看起来似乎没什么问题,但随着业务增长,这些 Manager 往往会逐渐变成:

业务逻辑、数据逻辑、状态管理全部混在一起。
但问题是:
Manager 从来不是一种架构。
在现代软件架构中,例如 Clean Architecture, 业务逻辑应该被清晰地拆分为:

这篇文章我们就来聊聊:
为什么是时候告别 Manager 了,以及如何用 UseCase + Repository 重建 Android 架构。
一、为什么 Android 项目到处都是 Manager
Android 项目大量使用 Manager,其实是历史原因。
早期 Android Framework 就大量使用这种命名:

例如 Android SDK 中的系统服务几乎都是 Manager。
于是很多开发者也沿用了这种模式:

但这些类在实际项目中通常会承担多种职责:

这就违背了软件架构中最重要的原则:

二、Manager 架构的三个核心问题
随着项目变大,Manager 模式通常会出现三个问题。
1 Manager 会变成"上帝类"
例如:

随着业务增长:
变成一个难以维护的类。
2 业务逻辑和数据逻辑混在一起
例如:

这里其实混合了两种职责:

架构层级被打乱。
3 无法形成清晰的业务边界
当所有逻辑都写在 Manager 里:

ViewModel 直接调用各种方法:

但你很难知道:

代码结构会越来越混乱。
三、Clean Architecture 的解决方案
在 Clean Architecture 中,系统被拆成清晰的层:

在 Android 中通常对应:

职责变得非常清晰:

四、UseCase:业务逻辑的唯一入口
UseCase 的职责只有一个:

例如:

代码示例:

UseCase 的特点:

这就是 业务边界(Business Boundary)。
五、Repository:数据边界
Repository 负责:

例如:

实现类:

Repository 的职责:

例如:

六、最终的 Android 架构
当我们用 UseCase + Repository 重新组织代码时,架构会变成:

每一层职责非常清晰:

七、Manager → Clean Architecture
很多项目其实可以这样迁移:
旧结构:

新结构:

Manager 被自然拆解成:

架构会清晰很多。
八、什么时候 Manager 仍然是合理的
虽然业务代码不推荐使用 Manager,但有两种情况仍然合理:
1 系统能力封装
例如:

这是 系统 API 适配层。
2 第三方 SDK 封装
例如:

用于隔离第三方 SDK。
九、总结
Manager 在 Android 项目中非常常见,但它并不是一种架构模式。
随着业务复杂度增加,Manager 很容易变成:

而在现代 Android 架构中,更推荐使用:
来建立清晰的业务边界和数据边界。
简单来说:

当你开始这样组织代码时,架构会变得更加清晰、可维护。
所以:
结尾:是时候告别什么都往 Manager 里塞的习惯了。