MVC和MVP —以及两者间的区别
来源:互联网 发布:四知文言文翻译注解 编辑:程序博客网 时间:2024/06/06 15:00
MVC(model-view-controller)
MVC是Android开发中用到最多的基本框架,Android本身也是有很多使用这种项目框架。因为看起来特别直观,但是缺点,但是代码耦合度相对来说较高。
步骤清晰:用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。
MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而核心是观察者模式。
简而言之,框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。
1.MVC的优点
(1)首先就是理解比较容易,技术含量不高,这对开发和维护来说成本较低也易于维护与修改。
(2)耦合性不高,表现层与业务层分离各司其职,对开发来说很有利。
2.MVC的缺点
(1)完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。
(2)对于小项目,MVC反而会带来更大的工作量以及复杂性。
3.MVC在Android中的应用
Android中对MVC的应用很经典,在android中视图View层一般采用XML文件进行界面的描述。如下例子:
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/list_item_text" android:textSize="16sp" android:gravity="left|center_vertical" android:padding="10dp" />
而对于模型Model部分则大多对应于本地的数据文件或网络获取的数据体,很多情况下我们对这些数据的处理也会在这一层中进行。
最后的控制器Controller则当之无愧的是右Activity承担。
MVP(model-view-presenter)
MVP模式是MVC模式的一个演化版本,MVP全称Model-View-Presenter。目前MVP在Android应用开发中越来越重要了。
在Android中,业务逻辑和数据存取是紧紧耦合的,很多缺乏经验的开发者很可能会将各种各样的业务逻辑塞进某个Activity、Fragment或者自定义View中,
这样会使得这些组件的单个类型臃肿不堪。如果不将具体的业务逻辑抽离出来,当UI变化时,你就需要去原来的View中抽离具体业务逻辑,这必然会很麻烦并且易出错。
1.MVP优点:
(1)MVP模式会解除View与Model的耦合,有效的降低View的复杂性。同时又带来了良好的可扩展性、可测试性,保证系统的整洁性和灵活性。
(2)MVP模式可以分离显示层与逻辑层,它们之间通过接口进行通信,降低耦合。理想化的MVP模式可以实现同一份逻辑代码搭配不同的显示界面,
因为它们之间并不依赖与具体,而是依赖于抽象。这使得Presenter可以运用于任何实现了View逻辑接口的UI,使之具有更广泛的适用性,保证了灵活度。
2.MVP缺点
尽管已经有了大量的应用,但不可否认该模式的还是存在一些问题,这些问题在携程的使用过程中也得到了体现。
比如,上下文丢失问题,生命周期问题,内存泄露问题以及大量的自定义接口,回调链变长等问题。可以归纳为:
1.业务复杂时,可能使得Activity变成更加复杂,比如要实现N个IView,然后写更多个模版方法。
2.业务复杂时,各个角色之间通信会变得很冗长和复杂,回调链过长。
3.Presenter处理业务,让业务变得很分散,不能全局掌握业务,很难去回答某个业务究竟是在哪里处理的。
4.用Presenter替代Controller是一个危险的做法,可能出现内存泄漏,生命周期不同步,上下文丢失等问题。
(1)Presenter – 交互中间人:Presenter主要作为沟通View与Model的桥梁,它从Model层检索数据后,返回给View层,使得View与Model之间没有耦合,也将业务逻辑从View角色上抽离出来。
(3)Model – 数据的存取:Model 角色主要是提供数据的存取功能。Presenter 需要通过Model层存储、获取数据,Model就像一个数据仓库。
MVC和MVP区别
从上图可以看出:MVC的耦合性还是较高的,View可以直接访问Model,导致3者之间构成了回路。
所以两者的主要区别是,MVP中View不能直接访问Model,需要通过Presenter发出请求,View与Model不能直接通信。
其实最明显的区别就是,MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。
还有一点就是Presenter与View之间的交互是通过接口的(代码中会体现)
- MVC和MVP —以及两者间的区别
- 进程和线程以及两者的区别
- MVC和MVP的区别
- MVC和MVP的区别
- MVC和MVP的区别
- MVC和MVP的区别
- MVC和MVP的区别
- MVP和MVC的区别
- MVC和MVP的区别
- MVC和MVP的区别
- Android---MVP模式介绍,以及MVP与MVC的区别
- MVC和MVVM以及MVP的介绍
- MVC和MVP和MVVM的区别
- MVC中DbContext 和ObjectContext两者的区别!
- MVC中DbContext 和ObjectContext两者的区别!
- MVC,MVP 和 MVVM 的图示区别
- mvp,mvc和mvvm的区别
- MVC,MVP 和 MVVM 的区别
- φ(1)=1 [Sdoi2008]沙拉公主的困惑
- 一个简单的php站点配置
- 网购秒杀系统架构案例分析
- mybatis在xml文件中处理大于号小于号的方法
- 深入理解Java垃圾回收机制
- MVC和MVP —以及两者间的区别
- 你必须收藏的Github技巧
- 栈的应用Ⅰ--后缀表达式 括号匹配
- CAS实现单点登录(SSO)经典完整教程
- 【数学建模】CUMCM-2011B model5 围捕方案确定
- Ubuntu的一些shell命令
- android上开源的酷炫的交互动画和视觉效果
- 深入理解Java的Annotation系列-第一部分 注解基础
- 某安全岗模拟笔试题的个人作答