吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1271|回复: 8
收起左侧

[讨论] 怎么理解mvvm mvp mvc等概念

  [复制链接]
fragilebanana16 发表于 2022-12-1 23:22
是否有这样一本书或者几篇博客能全面介绍下,还是说只能从项目入手去理解求答疑解惑

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

my52pojie110 发表于 2022-12-2 00:07
可以百度搜索一下,有很多介绍的,只不过要自己筛选一下,适合自己能理解看懂的就好
michaelgao 发表于 2022-12-2 06:53
抛砖引玉,一点陋见:这几个概念,主要体现编程思想的发展、变化。
MVC
Model(数据层):负责处理数据逻辑,比如保存、更新、删除数据库数据记录等。Model是又体现面向对象编程思想:每个Model和数据库表相对应,就是类;每个Model实体和一条表记录对应,即对象。
View(视图层):负责处理视图显示,用户交互的UI。比如用户登录界面,可以输入自己的用户名、密码,点击登录按钮进入系统。
Controller(控制层):负责处理业务逻辑。比如要更新用户密码,就要判别操作者的是否具有更改密码的权限等。
MVC体现一个分层思想软件架构思想,每层各司其职。从操作者角度看,应该是VCM。之所以称MVC,是从程序设计、编写的先后顺序而言的。

MVP(Model-View-Presenter)是MVC进一步演化出来的,主要为瘦客户端服务的。
Model(数据层):负责处理数据逻辑。
View(视图层):负责处理视图显示
Presenter:负责连接Model层和View层,是这两层的中间纽带,负责处理业务逻辑。
MVP中,Model层和View层之间不能直接交互,要通过中间Presenter层进行联系,其中View层和Presenter层是通过接口进行交互(有点像编写微服务)。这些接口定义,是要事先设计、约定好的,View\Presenter的code人员都理解并遵循,即指定View层和Presenter之间的契约(Contract)。
MVP中,View层没有任何的业务逻辑,从而比较薄。Presenter层让它如何展示,它就如何展示,即被动视图(Passive View),意思是它没有任何的主动性。
缺点是:减少了View层代码,但随着业务的复杂度不断提高,Presenter层代码也会变得越来越复杂臃肿。


MVVM(Model-View-ViewModel)是MVP进一步演化出来的,产生双向绑定的概念,减少胶水代码,使得代码维护更加轻松。
Model(数据层):负责处理数据逻辑。
View(视图层):负责处理视图显示。
ViewModel:是连接Model层和View层中间纽带,负责处理业务逻辑。View层和ViewModel层是双向绑定的,View层的变动会自动反映在ViewModel层,ViewModel层的变动也会自动反映在View层。

顺祝:楼主学习进步、工作顺利。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
学习爱好者qaq + 1 + 1 热心回复!
RemMai + 1 + 1 很专业的回复。牛逼大佬

查看全部评分

头像被屏蔽
88868 发表于 2022-12-2 09:15
d199212 发表于 2022-12-2 09:34
michaelgao 发表于 2022-12-2 06:53
抛砖引玉,一点陋见:这几个概念,主要体现编程思想的发展、变化。
MVC
Model(数据层):负责处理数据逻 ...

强,学习了
ppgjx 发表于 2022-12-2 11:46
以前我也纠结这些 多做几个项目你就明白了 总结一下就是一切为了解耦 原本一个方法能解决的问题 按业务需求给他拆分多个层次(你也可以理解为一个方法拆分成多个方法 比如登录需求 原始的逻辑是 从请求中获取账号密码-计算加盐后的md5-查询数据库-对比是否正确-发放token  这几个步骤写在一个方法里面 但是我可以拆分成三个方法  (控制层) 从请求中获取账号密码  (数据层)从数据库查询账号的信息 (业务层)计算加盐后的md5并判断账号是否正确 这三个方法控制层调用业务层,业务层调用数据层 也可以完成这个登录需求 拆分的好处是 如果其他地方需要用到可以直接用 不用再写相同的业务逻辑代码 各司其职 和你写的工具类一样 封装一下 至于你说的只是一种编程思想和规范 这样你看别人代码也方便 当然如果你一个人做开发 想怎么写就怎么写
bhl 发表于 2022-12-2 13:31
先是由前后端分离后的架构演变才产生MVC、MVP和MVVM模式,因为之前是前端没有Ajax,用jsp搞
MVC模式
M是指业务模型    V是指用户界面    C则是控制器
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
C存在的目的则是确保M和V的同步,因为一旦M改变,V也会同步更新
因为在复杂的程序中会有多个m和v,c接受到v的需求数据会决定哪个m来处理数据,让哪个v来读取来自m的数据来显示
前端的MVC
Model:负责保存应用数据,与后端数据进行同步(用来封装和处理数据)
模型拥有最多的处理任务。例如来对数据库的操作,被模型返回的数据是中立的,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
View:负责视图展示,将model中的数据可视化出来。
Controller:负责业务逻辑,根据用户行为对Model数据进行修改
控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。更好的调节M和V的搭配。C层可以做的事情在M或者V层中都可以做。只是为了更好的分层。
好处:强调责任分离,方便维护代码

这样的模型,在理论上是可行的。但往往在实际开发中,并不会这样操作。因为开发过程并不灵活。
例如,一个小小的事件操作,都必须经过这样的一个流程,那么开发就不再便捷了。
在实际场景中,我们往往会看到另一种模式,如图:

但是,这种灵活可能导致严重的问题:
1.数据流混乱
2.View比较庞大而Controller比较单薄:很多开发者会在view中写一些逻辑代码,逐渐的就导致view中的内容越来越庞大,而controller变得越来越单薄。
MVP模式
数据层、视图层、发布层(presenter(中间人)相当于mvc中的Controller)

presenter负责和Model进行双向交互,还和View进行双向交互。这种交互方式,相对于MVC来说少了一些灵活,View变成了被动视图,并且本身变得很小。虽然它分离了View和Model。但是应用逐渐变大之后导致presenter的体积增大,难以维护。
视图通常由表示器初始化,它负责呈现用户界面(UI),并接收用户所发出的命令,但不对用户的输入做任何逻辑处理,而仅仅是将用户输入转发给表示器。通常每一个视图对应一个表示器,但是也可能一个拥有较复杂业务逻辑的视图会对应多个表示器,每个表示器完成该视图的一部分业务处理工作,降低了单个表示器的复杂程度;一个表示器也能被多个有着相同业务需求的视图复用,增加单个表示器的复用度。表示器包含大多数表示逻辑,用以处理视图,与模型交互以获取或更新数据等。模型描述了系统的处理逻辑,但对于表示器和视图一无所知。
MVP模式与MVC模式的区别
在MVP中View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部;而在MVC中View会直接从Model中读取数据,而不是通过Controller。View中会包含Model信息,不可避免地还要包括一些业务逻辑。
在MVC模式中,更关注Model的不变,而同时有多个对Model的不同显示及View。所以在MVC模式中,Model不依赖于View,但View是依赖于Model的。不仅如此,因为有一些业务逻辑在View中实现,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的,代码复用率低。
MVP模式的优点体现在以下三个方面。
(1)View与Model完全隔离。Model和View之间具有良好解耦性的设计,这就意味着,如果Model或View中的一方发生变化,只要交互接口不发生变化,另一方就无须对上述变化做出相应的变化,这使得Model层的业务逻辑具有很好的灵活性和可重用性。
(2)Presenter与View的具体实现技术无关。也就是说,采用诸如Windows表单、WPF(Windows Presentation Foundation)框架、Web表单等用户界面构建技术中的任意一种来实现View层,都无须改变系统的其他部分。甚至为了使B/S、C/S部署架构能够被同时支持,应用程序可以用同一个Model层适配多种技术构建的View层。
(3)可以进行View的模拟测试。由于View和Model之间的紧耦合,在Model和View同时开发完成前对其中一方进行测试是不可能的。出于同样的原因,对View或Model进行单元测试很困难。MVP模式解决了上述所有的问题。在MVP模式中,View和Model之间没有直接依赖,开发者能够借助模拟对象注入测试两者中的任意一方。
MVVM
MWVM可以分解成(Model-View-VlewModel)。ViewModel可以理解为在presenter基础上的进阶版。

ViewModel通过实现一套数据响应式机制自动响应Model中数据变化;
同时Viewmodel会实现一套更新策略自动将数据变化转换为视图更新;
通过事件监听响应View中用户交互修改Model中数据。
这样在ViewModel中就减少了大量DOM操作代码。
MVVM在保持View和Model松耦合的同时,还减少了维护它们关系的代码,使用户专注于业务逻辑,兼顾开发效率和可维护性。

总结
这三者都是框架模式,它们设计的目标都是为了解决Model和View的耦合问题。
MVC模式出现较早主要应用在后端,如Spring MVC、ASP.NET MVC等,在前端领域的早期也有应用,如Backbone.js。
它的优点是分层清晰,缺点是数据流混乱,灵活性带来的维护性问题。
MVP模式在是MVC的进化形式,Presenter作为中间层负责MV通信,解决了两者耦合问题,但P层过于臃肿会导致维护问题。
MWVM模式在前端领域有广泛应用,它不仅解决MV耦合问题,还同时解决了维护两者映射关系的大量繁杂代码和DOM操作代码,在提高开发效率、可读性同时还保持了优越的性能表现。
笔记地址https://note.youdao.com/s/GZBHF9vO
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 15:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表