MVC与MVP

来源:互联网 发布:刀路仿真软件 编辑:程序博客网 时间:2024/04/29 04:02

MVC与MVP

1、MVC

1)、简介:

MVC全称是Model-View-Controller,也就是模型---视图---控制器,目的就是为了将数据模型和视图分离开来,并以控制器作为连接两者的桥梁以实现解耦。


MVC的优点:

①、理解起来比较容易,技术含量并不高,这对开发和维护来说成本较低也易于维护和修改

②、耦合性不高,表现层与业务层分离实现各司其职,对开发来说也很有利。

缺点:

①、没有明确定义,完全理解MVC模式并不是很容易。

2)、在Android中的应用

Android中对MVC的应用很经典,因为对Android来说,其界面部分的开发就涉及了模型--视图--控制器3者的交互。在Android的UI系统中,控制器Activity主要起到的作用就是解耦,将视图View和模型Model进行分离,两者在Activity中进行绑定或完成其他逻辑。

①、在Android中View层一般采用XML文件进行界面的描述、或者自定义View;

②、模型Model部分则大多对应于本地的数据文件或者网络获取的数据,很多情况下我们对这些数据对的处理会在这一层中进行;

③、Controller部分由Activity承担,一般情况下会在Activity中获取数据以及界面元素,并将两者绑定。

2、MVP

1)简介:

MVP全称是Model---View---Presenter,MVP在Android应用开发中越来越重要。


MVP能够有效地降低View复杂度,避免业务逻辑被塞进View中,使得View变成一个混乱的“大泥坑”。MVP模型会接触View与Model的耦合,同时又带来了良好的可扩展性、可测试性,保证了系统的整洁性、灵活性。对于复杂的应用来说,MVP模式是一种良好的架构模式,它能够非常好地组织应用结构,使得应用变得灵活,拥抱变化。

MVP模式可以分离显示层(View)和逻辑层(Controller),它们之间通过接口进行通信,降低耦合。理想化的MVP模式可以实现同一份逻辑代码搭配不同的显示界面,因为它们之间并不依赖于具体,而是依赖于抽象。

在Android中,业务逻辑和数据存储是紧耦合的,很多缺乏经验的工程师很可能会将各种各样的业务逻辑塞进某个Activity、Fragment或者自定义的View类中,使得这些组件的单个类型臃肿不堪。

对于一个可扩展性、稳定的应用来说,我们需要定义分离各个层,主要是UI层、业务逻辑层和数据层。毕竟,我们不知道以后要加入什么逻辑,是从本地数据获取数据还是从服务器中获取;我们的UI、数据库是否会被替换。例如:随着产品的升级,我们的UI可能会被重新设计,若UI可能会被重新设计,若UI发生了变化,此时由于业务逻辑紧耦合在View中,UI变化导致我们修改新的View控件,此时你就需要把原来View中抽取具体的业务逻辑,这将是一件非常折磨人也易于出错的事,到最终你还是需要将业务逻辑抽离开来。

MVP模式可以让UI界面和数据分类,至少分三层,这样可以对这三层进行独立的单元测试。MVP模式可以让我们从Activity、Fragment等View角色中分离大部分代码,使得每个类型的代码量大幅度减少,职责单一,易于维护。

MVP并不是一个标准化的模式,它有很多实现方式,我们也可以根据自己的需求和自己认为对的方式去修改MVP的实现方式,它可以随着Presenter的复杂程度变化。只要保证我们是通过Presenter将View和Model解耦合、降低类型复杂度、各大模块可以独立测试、独立变化,这就是正确的方向。

2)、MVP角色介绍

①、Presenter----交互中间人

Presenter主要作为沟通View和Model的桥梁,它从Model层检索数据后,返回给View层,使得View和Model之间没有耦合,也将业务逻辑从View角色上抽离出来。

②、View----用户界面

View通常是指Activity、Fragment或者某个View控件,它含有一个Presenter成员变量。通常View需要实现一个逻辑接口,将View上的操作通过转交给Presenter进行实现,最后,Presenter调用View逻辑接口将结果返回给View元素。

③、Model----数据的存取

对于结构化的App来说,Model角色主要是提供数据的存取功能。Presenter需要通过Model层存储、获取数据、Model就像一个数据仓库。更直白地说,Model是封装了数据库DAO或者网络获取数据的角色,或者两种数据获取方式的集合。

3)、MVP、MVC、MVVM的区别

可以看到,MVC的耦合性还是相对比较高的,View可以直接访问Model,导致3者之间构成回路。因此,MVP与MVC的主要区别是,MVP中的View不能直接访问Model,需要通过Presenter发出请求,View和Model不直接通信。

MVVM的特点,MVVM与MVP非常高类似,唯一的区别是View和Model进行双向绑定(data-binding),两者之间有一方发生变化则会反应到另一方上。

MVP与MVVM的主要区别则是,MVP中的View更新需要通过Presenter,而MVVM则不需要,因为View和Model进行了双向绑定,数据的修改会直接反应到View角色上,而View的修改也会导致数据的变更。

源码地址:MVPDemo

0 0
原创粉丝点击