MVP

367 阅读1分钟

1. MVC模式

MVC流程.png

  • View: 负责展示视图
  • Model: 负责数据存储(网络请求)
  • Controller:
    • 对于View: 负责响应交互, 刷新视图
    • 对于Model: 负责发起请求, 接收数据

2. MVP模式

MVP流程.png

可能发现MVP与MVC从流程上并没有多大的区别, 那么MVP的意义是什么呢?

上边我们讨论的都是对于单一业务中, MVC/MVP的场景, 下边我们看下对于多业务的场景

3. 多业务场景的MVC/MVP

  • 多业务组合的MVC 多业务组合的MVC.png
  • 多业务组合的MVP

多业务下的MVP.png

我们可以看到, 当一个页面的业务模块变多时, Controller要将每个业务的逻辑处理, 数据等都写在一起, 这样Controller的代码量就会成倍增长, 这也就是 *胖VC*的原因

那么对于MVP, 每个模块的业务处理都有对应的Persenter来处理, 每个模块都互不相关(理想状态下), 我们的ViewController只负责在生命周期中调度View或Presenter

4. MVP的优劣势

  • 优势
  1. 每个模块的业务逻辑分离开来, 更清晰
  2. 模块的复用性高, 可以拿走即用
  3. 便于单元测试
  4. 面向协议编程的思想, 通过协议约定让代码更健壮
  • 劣势
  1. 文件, 协议数量会增加
  2. 模块的划分需要清晰的思路, 如果划分的不合理将会事倍功半
  3. 模块间的关系处理变得复杂