mvp简介与Mvc对比:

相信大家对MVC都是比较熟悉了:M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。 从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色,起着控制各业务流程的作用。而 MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控 View与Model之间的间接交互。在 Android中很重要的一点就是对UI的操作基本上需要异步进行也就是在MainThread中才能操作UI,所以对View与Model的切断分离是 合理的。此外Presenter与View、Model的交互使用接口定义交互操作可以进一步达到松耦合也可以通过接口更加方便地进行单元测试。所以也就有了这张图片(MVP和MVC的对比)

 

 

Mvp代码实现(使用Kotlin代码编写)

 

首先在Activity中继承View接口实现视图层交互并初始化Presenter把自身传入与P的联系

View层中负责显示数据、提供友好界面跟用户交互就行。MVPActivityFragment以及View的子类体现在了这一 层,Activity一般也就做加载UI视图、设置监听再交由Presenter处理的一些工作,所以也就需要持有相应Presenter的引用。本层所需要做的操作就是在每一次有相应交互的时候,调用presenter的相关方法就行

 

然后再model中声明登陆要做的方法

提供我们想要展示在view层的数据和具体登陆业务逻辑处理的实现

 

最后利用Presenter去做处理

Activity做了一些UI初始化的东西并需要实例化对应P的引用和实现View的接口,监听界面动作
登陆按钮按下后即接收到登陆的事件,在onClick里接收到即通过P的引用把它交给P处理。p接收到了登陆的逻辑就知道要登陆了
然后p显示进度条并且把逻辑交给我们的Model去处理,也就是这里面的mode

同时会把登陆监听也就是p自身传递给我们的Model
mode处理完逻辑之后,结果通过登陆监听回调通知p
p再把结果返回给view层的Activity,最后activity显示结果

最后总结下:

MVP的优点

1、模型与视图完全分离,我们可以修改视图而不影响模型

2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部

3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

MVP模式MVP的缺点

由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现HtmlPresenter现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。

 

 

更多相关文章

  1. android背景优化
  2. Android开发笔记(一百七十一)使用Glide加载网络图片
  3. Android开发指南-用户界面-创建菜单 .
  4. Android小项目之四 自动更新检查的逻辑
  5. android用户界面编程技巧——如何使用Adapter
  6. 深入浅出谈Android(安卓)几种布局方式
  7. Android(安卓)scrollview控件无法定位顶部问题
  8. Android组件相关概念总结
  9. Android动画框架(一)----视图动画&帧动画

随机推荐

  1. 大型团队 Jenkins 实践分享
  2. 何勉:第一性原理和精益敏捷的规模化实施
  3. 预生产环境数量的统计和分析
  4. CONUTIF函数经典用法,全了
  5. 一看就会,一用就废?八个实用技巧请拿好
  6. 五个常用公式,效率提高一点点
  7. 五分钟,学会一对多、多对多查询经典公式
  8. DevSecOps 三问:Why?What?How?
  9. 一对多、多对多查询,最简单的方法请拿好
  10. C数组实现静态链表及常用操作(模拟无指针