ios MVP的分析和理解
2019-02-22 本文已影响12人
小飞飞啊阿飞
![](https://img.haomeiwen.com/i2878464/0f08ada2bbde4492.png)
Present:中间层负责UI改变及时更新数据;数据的改变及时的更新UI
单独的看图可能太抽象了项目地址:Demo
项目总体框架:
![](https://img.haomeiwen.com/i2878464/716d3591d4e9a20a.png)
实现的主要思想是业务逻辑与试图层的分离;
UI改变时对应的数据的更新:
![](https://img.haomeiwen.com/i2878464/250aac3e0d358e3f.png)
view层改变num
![](https://img.haomeiwen.com/i2878464/467bcee8c176836d.png)
响应的p层数据改变
![](https://img.haomeiwen.com/i2878464/0f44566c0cf18f9a.png)
P层数据改变时对应的UI的更新
p层数据改变
![](https://img.haomeiwen.com/i2878464/748b2990b7d3ea3a.png)
UI试图层的更新
![](https://img.haomeiwen.com/i2878464/f09407496efebdc6.png)
到了这里基本上实现了MVP的面向协议式的编程思想,没有很难的理解的地方;简单说一下mvp优缺点:
优点:
1. 任务均摊 -- 我们将最主要的任务划分到 Presenter 和 Model,而 View 的功能较少;
2.可测试性 -- 非常好,由于一个功能简单的 View 层,所以测试大多数业务逻辑也变得简单;
3.易用性 -- 代码量比 MVC 模式的大,但同时 MVP 的概念却非常清晰。
4.模型与视图完全分离,我们可以修改视图而不影响模型;
5.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;
6.我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;
7.如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
缺点:
视图和Presenter的交互会过于频繁,使得他们的联系过于紧密。也就是说,一旦视图变更了,presenter也要变更。
本文纯属个人见解:希望这篇文章对您有帮助。当然如果您发现有可以优化的地方,希望您能批评指正。
最后要谢谢此文章的作者:iOS mvc到mvp