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的缺点
- XML文作为View层,控制能力太弱,如果要动态的隐藏或显示一个按钮,布局文件显然是做不到的,所以只能写在Activity中,造成了Activity属于Controller层,同时又包含部分View层的逻辑。
- 从图中可以看出,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的区别
- 模块职责划分明显 : MVC中,Activity职责不清,作为Controller层同时有包含View层的逻辑,在MVP中,Activity作为View层。
- 降低耦合度:View和Model完全解耦 ,MVP中 View不直接与Model发生联系,他们之间的通信通过Presenter传递,MVC中View和Model相互可知。
- 代码复用:Presenter与具体的View没有直接的联系,而是通过定义好的接口进行交互。从而使得变更View的时候,可以保持Presenter不变。
- 利于测试:可以脱离用户接口来测试逻辑 我们可以在Model和View都没有完成的时候,来测试Presenter的逻辑(单元测试)。
MVP的缺点
- 对View的渲染都放在Presenter中,所以视图和Presenter的交互会过于频繁,往往会使Presenter与特定的视图的联系过于紧密,一旦视图需要变更,那么Presenter也需要变更了。
- 代码量增加,文件增加。
阅读全文
0 0
- Android进阶之路------1.了解MVC和MVP
- Android之MVC和MVP的区别
- Android MVC 和 MVP
- Android之MVC MVP框架
- Android中的MVC和MVP
- Android之mvp和mvc对比分析以及实际应用
- 【Android 进阶】MVP 实战演练之深入浅出
- 区分了解MVP, MVC, MVVM
- Android框架模式之MVC与MVP
- Android架构之MVC,MVP与MVVM
- Android之MVC、MVP、MVVM(Data Binding)
- [Android]对MVC和MVP的总结
- android MVC && MVP && MVVM分析和对比
- 认清Android框架 MVC,MVP和MVVM
- 认清Android框架 MVC,MVP和MVVM
- Android中的MVC和MVP(分析+实例)
- 认清Android框架 MVC,MVP和MVVM
- 认清Android框架 MVC,MVP和MVVM
- 蓝桥杯 ALGO-98 算法训练 数位分离
- POJ
- RocketMQ架构模块解析
- tomcat404问题
- Qt Creator功能快捷键
- Android进阶之路------1.了解MVC和MVP
- 整理linux 常用基础命令
- 【转载】---Myeclipse 10/2014 配置插件(svn、maven、properties、velocity)的方法
- Magenta
- 蓝桥杯 ALGO-34 算法训练 纪念品分组
- RocketMQ高并发读写
- Android 音频 OpenSL ES 录音 采集
- 零基础入门深度学习(6)
- Oracle_3th_多行函数