Android 当中的 MVC 和 MVP 究竟是如何区分的?

最近在看架构方面的资料,对于 MVC 和 MVP 有些搞不明白。

MVC:
M 层就是用户自己编写的类,页面的逻辑都在这里实现(譬如访问数据库、访问网络、以及各种逻辑操作算法等等),可以总结归纳为 M 层的作用就是“这个页面的功能”
V 层就是各种控件,用来接受用户信息(譬如各种按钮、各种编辑框)和展示信息给用户(类如TextView ImageView 等)
C 层的概念我有些模糊,看一些博客上讲,它是沟通 M 和 V 的桥梁。我有些搞不懂。

我是这么理解的,我们需要在C 层当中创建 M 层的对象然后调用其相关方法:譬如访问网络方法、存储数据方法,而这些方法所用到的参数就通过V层来获取,同时如果M层有数据返回,那么V层可以直接操作这个返回的数据。

总感觉哪里不太对,请问大家,我这个理解有问题吗?

MVP:
在这个模式里,是将Activity或者Fragment作为V层,而将原本 MVC 当中 C 层的沟通逻辑放到了新定义的 P 层当中。

是这样吗?

----------大年二十八update--------------
我举个例子,譬如实现一个功能,用户输入一个id(数字),然后匹配数据库当中是否有这个id,如果有,就在页面上显示这个id对象的message,如果没有,就显示没有

在 MVC 当中
M 层自然有一个 String search(int id)方法,方法体就是通过id去执行查询
V 层就是获取用户输入的id,以及获取用户的点击查询输入,还有显示查询结果
C 层就是 Activity或者Fragment,我们在 Activity当中创建model对象并调用search方法,并且将V层输入的id作为参数传入。

所谓的M层和V层耦合,就是search方法返回的数据,可以直接调用 V 层的 text.settext(message )来将内容显示出来

我这么理解有问题吗?

8个回答

mvc模式,是吧m和v层写在一起,通过c来处理逻辑关系,简单的页面还好,越大,逻辑越复杂,就会越乱,你可能经常会写出一个上千行的activity,过段时间再去自己都看不懂,mvp是吧m和v分离出来,不直接交互,通过p层实现数据传递显示,大量的m只管模型内容,v只负责显示,p层负责数据传递

XiaoShou111
log4lgb 我似乎有点儿明白你说的了,但还不太清晰,待我仔细捋一捋,多谢多谢
2 年多之前 回复
lifeifei1245
脱裤儿任风吹 回复脱裤儿任风吹: 你想,这样是不是除了你的M可以说有点脱离 activity或者fragment, 你的V和C全在activity或者fragment里,全混在一起的
2 年多之前 回复
lifeifei1245
脱裤儿任风吹 回复log4lgb: 你这样想,你在activity或者fragment里调用search方法,在在activity或者fragment里创建model对象,在在activity或者fragment里获取用户输入,所有的一切都是在activity或者fragment里完成的,C不是指activity或者fragment,是controller,控制器,理解应该是你写代码的逻辑
2 年多之前 回复
XiaoShou111
log4lgb 回复脱裤儿任风吹: 刚学,有点儿模糊,我在主贴里面更新了一个小例子,麻烦您帮忙看看,我的理解有没有错误
2 年多之前 回复
lifeifei1245
脱裤儿任风吹 兄弟,你理解有错,mvc中的c,不算能算一个层,理解为控制器,就理解为你写的逻辑,当中会到处是用模型和视图
2 年多之前 回复
XiaoShou111
log4lgb 你的意思是,MVC 当中一些页面逻辑(譬如数据存储、网络访问)是放在C层的?好像和我看的资料不太一样唉?
2 年多之前 回复

http://blog.csdn.net/chen364567628/article/details/76068793 看这个MVP图解,普通写的在activity或者fragment中处理逻辑的都是MVC,就这么简单。

p层指的是所有的逻辑以及数据的请求都在这里面。而M层其就是一个接口这里面有很多的方法,M层的方法是需要V层去继承实现的里面的方法的,在实例化是需要把M层传给p层,p处理完逻辑或者数据请求直接调用M层里面的方法就可以修改V层XMl文件各种控件。

MVP\MVC本身是一种软件结构模式。与具体实施的技术没有关系,就像汽车悬挂系统一样。这样的结构不一定非要安装在指定的汽车上。mvp\mvc这种结构
也可以应用在web、desk系统中。是一种解耦方法。目前,Android、wpf、包括微信的小程序。界面设计基本采用xaml方式。这也是更好的解决传统开发
中UI逻辑混乱。就跟当初的asp一样,页面中嵌入业务逻辑。随着计算机技术的迅速发展,在mvc\mvp的基础之上,业界精英有发展出了mvvm结构。

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
数据关系
•View 接受用户交互请求
•View 将请求转交给Controller
•Controller 操作Model进行数据更新
•数据更新之后,Model通知View更新数据变化
•View 更新变化数据

mvp的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
数据关系
•View 接收用户交互请求
•View 将请求转交给 Presenter
•Presenter 操作Model进行数据更新
•Model 通知Presenter数据发生变化
•Presenter 更新View数据

MVC和MVP关系
MVP:是MVC模式的变种。
项目开发中,UI是容易变化的,且是多样的,一样的数据会有N种显示方式;业务逻辑也是比较容易变化的。为了使得应用具有较大的弹性,我们期望将UI、逻辑(UI的逻辑和业务逻辑)和数据隔离开来,而MVP是一个很好的选择。
Presenter代替了Controller,它比Controller担当更多的任务,也更加复杂。Presenter处理事件,执行相应的逻辑,这些逻辑映射到Model操作Model。那些处理UI如何工作的代码基本上都位于Presenter。
MVC中的Model和View使用Observer模式进行沟通;MPV中的Presenter和View则使用Mediator模式进行通信;Presenter操作Model则使用Command模式来进行。基本设计和MVC相同:Model存储数据,View对Model的表现,Presenter协调两者之间的通信。在 MVP 中 View 接收到事件,然后会将它们传递到 Presenter, 如何具体处理这些事件,将由Presenter来完成。
如果要实现的UI比较复杂,而且相关的显示逻辑还跟Model有关系,就可以在View和 Presenter之间放置一个Adapter。由这个 Adapter来访问Model和View,避免两者之间的关联。而同时,因为Adapter实现了View的接口,从而可以保证与Presenter之 间接口的不变。这样就可以保证View和Presenter之间接口的简洁,又不失去UI的灵活性。

MVP\MVC本身是一种软件结构模式。与具体实施的技术没有关系,就像汽车悬挂系统一样。这样的结构不一定非要安装在指定的汽车上。mvp\mvc这种结构
也可以应用在web、desk系统中。是一种解耦方法。目前,Android、wpf、包括微信的小程序。界面设计基本采用xaml方式。这也是更好的解决传统开发
中UI逻辑混乱。就跟当初的asp一样,页面中嵌入业务逻辑。随着计算机技术的迅速发展,在mvc\mvp的基础之上,业界精英有发展出了mvvm结构。

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
数据关系
•View 接受用户交互请求
•View 将请求转交给Controller
•Controller 操作Model进行数据更新
•数据更新之后,Model通知View更新数据变化
•View 更新变化数据

mvp的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
数据关系
•View 接收用户交互请求
•View 将请求转交给 Presenter
•Presenter 操作Model进行数据更新
•Model 通知Presenter数据发生变化
•Presenter 更新View数据

MVC和MVP关系
MVP:是MVC模式的变种。
项目开发中,UI是容易变化的,且是多样的,一样的数据会有N种显示方式;业务逻辑也是比较容易变化的。为了使得应用具有较大的弹性,我们期望将UI、逻辑(UI的逻辑和业务逻辑)和数据隔离开来,而MVP是一个很好的选择。
Presenter代替了Controller,它比Controller担当更多的任务,也更加复杂。Presenter处理事件,执行相应的逻辑,这些逻辑映射到Model操作Model。那些处理UI如何工作的代码基本上都位于Presenter。
MVC中的Model和View使用Observer模式进行沟通;MPV中的Presenter和View则使用Mediator模式进行通信;Presenter操作Model则使用Command模式来进行。基本设计和MVC相同:Model存储数据,View对Model的表现,Presenter协调两者之间的通信。在 MVP 中 View 接收到事件,然后会将它们传递到 Presenter, 如何具体处理这些事件,将由Presenter来完成。
如果要实现的UI比较复杂,而且相关的显示逻辑还跟Model有关系,就可以在View和 Presenter之间放置一个Adapter。由这个 Adapter来访问Model和View,避免两者之间的关联。而同时,因为Adapter实现了View的接口,从而可以保证与Presenter之 间接口的不变。这样就可以保证View和Presenter之间接口的简洁,又不失去UI的灵活性。

MVC里M与V之间还是有直接调用

MVP里M与V之间只可能通过P来调用

MVC是数据与界面分离,有控制器的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐