mvvm模式和mvc的区别

mvvm模式和mvc的区别,第1张

mvvm模式和mvc的区别是:

MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图 *** 作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。

MVC中Controller演变成MVVM中的ViewModel。

MVVM通过数据来显示视图层而不是节点 *** 作。

MVVM主要解决了MVC中大量的dom *** 作使页面渲染性能降低,加载速度变慢,影响用户体验等问题。

mvvm模式和mvc模式解耦视图和模型的区别是:

在模式中,每一个视图都有对应的一个ViewModel,同时ViewModel与模型建立联系。当接收到用户请求后,ViewModel获取模型响应数据,并通过数据绑定将相应的视图页面重新渲染。

模型层的数据只需要传入ViewModel即可实现视图的同步更新,从而实现了视图和模型之间的松散耦合。

于MVC不同的是,MVC是系统架构级别的,而MVVM只用于单页面上的。因此,MVVM的灵活型号要远大于MVC。如果将这里的M抛开,只看VVM的话,那就是一个组件(如treeview)的设计模式。所以MVVM模式也是组件开发的最佳实践。

SpringWebMVC处理>Model 模型层 (javaBean组件 = 领域模型(javaBean) + 业务层 + 持久层)

View 视图层( html、jsp…)

Controller 控制层(委托模型层进行数据处理)

springmvc是一个web层mvc框架,类似struts2。

springmvc是spring的部分,其实就是spring在原有基础上,又提供了web应用的mvc模块。

实现机制:

struts2是基于过滤器实现的。

springmvc是基于servlet实现的。

运行速度:

因为过滤器底层是servlet,所以springmvc的运行速度会稍微比structs2快。

struts2是多例的

springmvc单例的

参数封装:

struts2参数封装是基于属性进行封装。

springmvc是基于方法封装。颗粒度更细。

⑴ 用户发送请求至DispatcherServlet。

⑵ DispatcherServlet收到请求调用HandlerMapping查询具体的Handler。

⑶ HandlerMapping找到具体的处理器(具体配置的是哪个处理器的实现类),生成处理器对象及处理器拦截器(HandlerExcutorChain包含了Handler以及拦截器集合)返回给DispatcherServlet。

⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain后,调用HandlerAdapter请求执行具体的Handler(Controller)。

⑸ HandlerAdapter经过适配调用具体的Handler(Controller即后端控制器)。

⑹ Controller执行完成返回ModelAndView(其中包含逻辑视图和数据)给HandlerAdaptor。

⑺ HandlerAdaptor再将ModelAndView返回给DispatcherServlet。

⑻ DispatcherServlet请求视图解析器ViewReslover解析ModelAndView。

⑼ ViewReslover解析后返回具体View(物理视图)到DispatcherServlet。

⑽ DispatcherServlet请求渲染视图(即将模型数据填充至视图中) 根据View进行渲染视图。

⑾ 将渲染后的视图返回给DispatcherServlet。

⑿ DispatcherServlet将响应结果返回给用户。

(1)前端控制器DispatcherServlet(配置即可)

功能:中央处理器,接收请求,自己不做任何处理,而是将请求发送给其他组件进行处理。DispatcherServlet 是整个流程的控制中心。

(2)处理器映射器HandlerMapping(配置即可)

功能:根据DispatcherServlet发送的url请求路径查找Handler

常见的处理器映射器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

ControllerClassNameHandlerMapping,DefaultAnnotationHandlerMapping(不建议使用)

(3)处理器适配器HandlerAdapter(配置即可)

功能:按照特定规则(HandlerAdapter要求的规则)去执行Handler。

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展多个适配器对更多类型的处理器进行执行。

常见的处理器适配器:>    关于昨天mvc说到是框架,但是不知道你们发现没有这里说的框架和我们平时说的框架比如spring框架,sturts框架等等,感觉有什么不对劲。可以在知乎里面看一下,mvc是否是设计模式。

  这里不过多讨论,毕竟笔主目前也没有参加过什么项目,只是自己做几个不入流小系统。《设计模式》那本书,我也还没有看。所以我妄下结论。

    虽然没有学过这么多更深层次的东西,但是毕竟我们还是要继续学习,马士兵老师也说了一些,不要往一个点深究(当然有时间,想这些还是有很多好处的)。因为这样学习,进度会十分缓慢。

  借视频里面的图让我们来说一说mvc在bs系统下的运行过程
1用户发出请求到控制器(如果有过滤器另说~废话真多23333)。

2控制器接收到请求以后,控制器会请求模型让它去处理。

3模型处理完数据以后,就会将请求结果响应回控制器。

4控制器接受到模型处理后的数据,就会将数据渲染到视图里面。

5然后将视图响应给用户。

这就是比较传统的步骤。当然如果前端用的是静态页面,用ajax请求,响应给浏览器,那怎么渲染?我就不清楚(毕竟前端学的还是不行),懂得可以在讨论区说一下,还有怎么测试ajax请求?
springmvc的运行原理

  视频截屏截不完,所以我在网上找了一张图。
这图将步骤过程描述了出来。

我在重新整理一遍过程。

1用户发出请求,但是目的地不同虽说都是控制器,但是springmvc里面是叫前端控制器。

2前端控制器向处理处理映射器映射器发出请求,这一步和原来的mvc有所区别。这里因为初学,个人推测是不是url里面比如loginjsp和Loginjsp都是找到LoginController。在servlet的时候是通过注解和xml文件配置实现(注意这里是个人臆测)。在这里加入处理器映射器可能又多了一些 *** 作,看后面学习分解。

3然后返回的是一个执行链,其中包括我们需要的handler处理器(其实就是以前的controller),拦截器1,拦截器2等等。执行链本身就是个包装类,包装了上面的一些属性。

4前端控制器根据返回的执行链,请求handler适配器执行handler。

5handler执行完了以后,会返回模型和视图和视图给前端控制器(这里的视图和最终显示的视图还是有区别的)。

6前端控制器将返回来的模型和视图给视图解析器。

7视图解析器将视图解析成真正的视图(怎么换的?)

8视图解析器将view返回给前端控制器。

9前端控制器将model数据渲染到视图里面,然后响应给浏览器。
虽然自己写的和图步骤编号不同,但是内容步骤是一样的。

这里有几点问题

1处理器映射器返回回来的执行链里面的拦截器是什么时候执行的?
2handler适配器,是怎么选择handler的?
3返回的model是在哪里真正执行的?

handler里面执行的,然后将数据存入modelandview里面

有想法可以在下方一起讨论。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13464241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-12
下一篇 2023-08-12

发表评论

登录后才能评论

评论列表(0条)

保存