Android进阶之路------1.了解MVC和MVP

来源:互联网 发布:php 教程 编辑:程序博客网 时间:2024/06/05 06:33

MVC概述

MVC的简单介绍

MVC是模型(model)-视图(view)-控制器(controller)的缩写,是用一种将业务逻辑,数据,界面显示分离的方法组织代码。
Model 主要的任务是数据的业务处理逻辑,对应JavaBean,数据获取。View 主要任务是控件的显示以及传递用户的交互指令,对应XML文件。Controller 起到桥梁的作用,来控制View和Model的通信来达到分离视图显示和业务逻辑,使得View和Model解耦。对应Activity和Fragment。

MVC的工作原理

View传送指令到Controller,Controller完成业务逻辑后,通知 Model改变状态,Model将更新后的数据发送到View,View显示新的数据

MVC的优点

实现了View和Model的解耦,使得项目维护起来更容易。

MVC的缺点

  1. XML文作为View层,控制能力太弱,如果要动态的隐藏或显示一个按钮,布局文件显然是做不到的,所以只能写在Activity中,造成了Activity属于Controller层,同时又包含部分View层的逻辑。
  2. 从图中可以看出,View和Model是相互可知的,View可以直接通过Model读取数据而不是通过Controller,这意味着两层之间仍存在耦合。

MVP概述

MVP的简单介绍

把activity中UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model还是原来的Model,这就是MVP。

View 对应Activity和Fragment,负责View的绘制以及用户交互。
Model依然是业务逻辑和实体模型。
Presenter负责完成View和Model之间的交互。

MVP的工作原理

       在MVP中,Activity作为View层,View层并不与Model层直接交互,而是使用Presenter作为View和Model的桥梁,Presenter中持有View层以及Model层interface的引用, View层持有Presenter层的引用。View层某个界面需要展示数据时,首先会调用Presenter层的某个接口,然后Presenter层会调用Model层请求数据,当Model层数据加载成功之后再调用Presenter层的回调方法通知Presenter数据加载完成,最后Presenter层再调用View层的接口加载后的数据展示给用户。

MVP与MVC的区别

  1.  模块职责划分明显 :  MVC中,Activity职责不清,作为Controller层同时有包含View层的逻辑,在MVP中,Activity作为View层。
  2.  降低耦合度:View和Model完全解耦 ,MVP中 View不直接与Model发生联系,他们之间的通信通过Presenter传递,MVC中View和Model相互可知。
  3. 代码复用:Presenter与具体的View没有直接的联系,而是通过定义好的接口进行交互。从而使得变更View的时候,可以保持Presenter不变。
  4. 利于测试:可以脱离用户接口来测试逻辑  我们可以在Model和View都没有完成的时候,来测试Presenter的逻辑(单元测试)。

MVP的缺点

  1. 对View的渲染都放在Presenter中,所以视图和Presenter的交互会过于频繁,往往会使Presenter与特定的视图的联系过于紧密,一旦视图需要变更,那么Presenter也需要变更了。
  2. 代码量增加,文件增加。
原创粉丝点击