总结 android MVP和MVC设计模式和面向接口编程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shu_quan/article/details/74561205

一、概述

MVP设计模式的前身是MVC,这个无需再议

在安卓工程中MVC对应关系如下:

Layout->View : 对应布局文件
Activity->Controller,View (其中activity分的并不是特别清楚)
各种业务逻辑实体类->Model 

MVP的基本概念是:

MVP 指的是Model,View,Presenter(交互器/表示器),是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

二、MVP和MVC的区别

MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

给个图最能提现区别:

图的上半部分是MVP模式 -- 可以看出 View 和Model 并不直接交互, 而是通过presenter作为中间人去 协调工作。这么做的好处是使得代码更加清晰明了,分工明确。

图的下半部分是MVC模式 -- 控制器controller(Activity)直接操作了 view 以及Model,也就是说运行View 和Model直接通信了。

总结MVP和MVC的优缺点如下:

1:MVC允许 View 和 Model 直接通讯。
2:MVP 中,View和 Model 的交互都在Presenter 内部来完成
3:MVP 中,View 通常会抽象化出来一系列的接口。(面向接口编程)
4:MVP 相对于 MVC 而言,大大降低了耦合度(Activity 不再进行复杂的操作),层级更明显,更利于单元测试。
5:MVP 的缺点:类文件会爆炸(极具增加),有一定的学习成本。


三、MVP的设计原则 -- 怎么实现一个MVP设计模式?

1:一个 Activity对应一个 View (把activity当成MPV的view进行操作)
2:通常情况下,一个 View对应一个 Presenter,在业务复杂时,一个 View可对应多个 Presenter.
3.通常情况下将 View 与 Presenter抽象成接口。

Mvp面向协议编程架构运用

mvp是一种架构模式,我们通常可以将安卓当中的视图和数据分离,采用presenter来进行管理,数据和模型是无法直接通信的,这和mvc的根本区别就是视图和模型无任何交集。

但是在庞大的安卓源码中可能并不是只是一个视图和数据模型的分离,也有可能是众多presenter的分离,这将会产生功能之间的mvp架构模式,rootPresener来管理众多的childPresenter, 那么这种面像协议的编程就来了 我们可以看看安卓某些某块的源码(ViewManger)

这里写图片描述

面向协议编程好处

  1. 增加扩展功能,也更容易保障具体实现类代码的安全
  2. 增加新的传参方式(代码块)
  3. 更容易实现低耦合的思想
  4. 将具体的实现者进行和执行者分离

展开阅读全文

没有更多推荐了,返回首页