之前一直使用 MVC 模式开发 Android 应用,而 MVP 模式也出现了好久,可能之前还是太菜了吧,看网上博客,Google 官方的例子,总是不懂,不过最近又开始看,多少有了些理解,写出来与大家分享一下。
一开始的 MVC 模式,Activity 其实承担了 V 和 C 的职责。负责 View 相关的绘制以及加载功能。我们也会在 Activity 中直接做一些数据加载相关的工作,最简单的,比如直接 new Thread 去请求数据了,数据请求回来,直接用 handler 传送到 UI Thread 中,进行 View 的更新。当然,这样做在当时是很方便的。
在学习了 Google 的 to-do-mvp App 后,一开始觉得好多接口,各种不懂。跟着 Google 的思路梳理了一下逻辑后,发现 MVP 模式并没有那么复杂,下面是我的一点理解。
- 抽象了一个 View 的接口,抽象出各个 show 方法,对布局中的 view 的不同操作都有,非常的细
- 抽象一个 Presenter 接口,简单来说是通过网络也好,本地也好,获取数据。它持有 View 对象的引用,可以调用 view 相关的显示方法。Presenter 执行完数据处理后,把数据传给 view 相关的方法中,或者调用 view 相关的方法。
- Activity 现在的职责很简单,至少从代码来看,只有 findViewById,初始化 presenter,把二者关联起来,implement View 的接口,实现 View 中的 show 方法,把数据展示在相关的 view 中。
- 不过我发现,以前用 MVC 模式时,应用类分包时,挺适合同一类放在一个包下,比如各个 Fragment 都放在 fragment 包下。而 MVP 适合按功能分,比如 [个人],就把 [个人] 这个功能模块的 Activity,Presenter,View 接口全部放到 person 这个包下。当然一些通用的 utils 类就放到 utils 包下即可。
简单来看就是将 Activity 原来臃肿的代码进行了一次分离,让 Activity 单单去显示数据。数据请求等操作放到 Presenter 中去了。
这仅仅是个人的部分见解,希望能对大家理解 MVP 时带来一点帮助,也欢迎大家有自己的想法可以在评论区交流。