承接上一篇《MVC 在 Android 的落地:Activity 的双重身份问题》,那一篇指出了 Activity 职责混杂的问题,这一篇给出第一种解法:MVP。MVP 的价值不在于「多了一个 Presenter 类」,而在于它第一次把「可测试的纯逻辑」从 Android 框架里分离出来。
结论先行:MVP 的核心不是分层,而是「Presenter 能不能不碰任何 Android 类地被单测」。如果你的 Presenter 里 import 了android.content.Context、用到了Handler或者需要Activity才能创建,那 MVP 只是换了个文件放代码,分层的收益并没有拿到。
一、Presenter 的职责边界
MVP 里 Presenter 的职责可以用一句话概括:接收 View 转发的用户意图,调用 Model,把结果翻译成 View 能执行的动作。
这个职责可以拆成三件明确的事:
| Presenter 该做 | Presenter 不该做 |
|---|---|
| 判断与分支(是否可以提交、错误怎么提示) | 操作具体控件(setText、setVisibility) |