07 | 解耦是永恒的主题:MVC框架的发展
07 | 解耦是永恒的主题:MVC框架的发展
讲述:四火
时长21:41大小14.90M
JSP 和 Servlet
1. 概念介绍
2. 动手验证
3. 深入理解
MVC 的演进
1. JSP Model 1
2. JSP Model 2
3. MVC 的一般化
4. MVC 的变体
总结思考
扩展阅读
赞 6
提建议
精选留言(18)
- Luciano李鑫2019-09-29请问MVP和MVC的主要区别体现在什么地方
作者回复: MVP 是 MVC 的变体,功能、层次和应用场景有所区别,下面是我的归纳,供参考。 简单说,对于 MVC 来说,Controller 层次上完全独立于 View,它可以跨多个视图、可以决定视图路由,更多存放的是控制逻辑,应用较为广泛,但多数在服务端代码中; 而对于 MVP 来说,Presenter 则其实是和 View 在相似的层次上,协调并把 Model 的数据绑定到指定 View 上去,主要用在纯粹 UI 的实现中。
共 2 条评论8 - 不记年2019-09-30SpringMVC应该属于第一种,但是我们在编写控制器代码时,并没有显式的调用View,而是生成一个ViewModel.由前置控制器去做剩下的事情~
作者回复: 👍,补充说明一下,使用 Spring MVC 也是可以应用第二种的
2 - 易儿易2019-09-30老师,我一直有一个疑惑,希望老师能够解答:平时开发用的是第一种MVC,CRUD的代码基本上都是①xxxAction-②(Ixxx接口类-xxxServiceImpl实现类)-③xxxDao这“三层”结构,xxxAction属于Controller,那么(Ixxx接口类-xxxServiceImpl实现类)-xxxDao应该都属于Model层对吗?很多资料包括老师今天讲的都提到Model是由javabean的构成的,是不是我理解的javabean太狭隘了?(Ixxx接口类-xxxServiceImpl实现类)-xxxDao这些都可以称为javabean吗?展开
作者回复: 你提到的 ② 和 ③,都属于 Model 层的一部分。我认为bean 简单来说指的就是可重用的封装对象,文中也有解释。从这个角度来说的话,满足这个条件都可以算,所以你说这两个的是算的。
1 - 四喜2019-09-26Vue: MVVM -> model view viewmodel React: MVC -> model view controller Angular: MVW -> model view whatever2
- tt2019-09-25M-VVM就是M-automated-VP么?因为view和viewModel成为了命运共同体。 或者说VVM是“别人实现了,我直接用”的VP?比如Vue或React
作者回复: 第一条大致可以按你说的理解,但是第二条做个说明:VVM 和 MVVM 的区别在于实际的数据源头 M 消失了,因为有时候我们不需要它,比如设计一个可重用的组件。
1 - 浅浅悠2021-09-22有个问题哈,这里的servlet和现在的servlet前端框架是一个东西吗
作者回复: Servlet 这个词应当就是指同一个概念
- 程同学2021-02-07大师视角,让我对知识有了不一样的理解
- 叶子2021-01-12老师,我想问下,百科上说MVP与MVC有着一个重大的区别MVP是View与Model完全隔离,MVC里,View是可以直接访问Model的。 为什么上文中第一种MVC怎么看都觉得是一种MVP?1
- 唯心主义蠢货🍁2020-11-01是不是因为后端Model层和view建立联系是需要通过一层control层的,持久层的数据无法对应到一个view 但是前端的话数据和UI是可以完全对应的,control就不需要了,只需要一层p或者vm层建立数据和view的连接即可
- 加利率的钟摆2019-10-17老师好,有个问题想请教一下: 第二种MVC,“Controller 调用 Model 的接口发起数据更新操作,接着就直接转向最终的 View 去了;View 会调用 Model 去取得经过 Controller 更新操作以后的最新对象,渲染并返回给用户。” 如何保证View调用的Model已经更新完毕了?展开
作者回复: 这个取决于一致性的设计了。如果采用的是强一致性,比如关系数据库,那就可以保证在 View 调用的时候,前面 Controller 调用的更新能够被查询出来。
- pyhhou2019-10-011. 解耦后,JSP 更偏向于声明式编程,也就是描述一个页面上的属性,UI 呈现等等,可以把它看作是加强版的 HTML。servlet 更偏向于命令式编程,用于后台的数据交互,发出指令,接收 request,做的都是逻辑性较强的工作。但回过头来看 JSP 其实也是 servlet,只是为了让编写代码更加直观,易懂,这中间做了个转换 2. 工作中做的项目没有特别强的 MVC 的概念,之前设计的时候只考虑了 “前端” 和 “后端” 这两个概念,前端和后端分离,前端负责接收并响应界面用户的操作,然后通过 RESTful API 的方式和后端进行交互,后端根据请求进行 CRUD,然后响应请求。不是特别清楚 MVC 和一般设计相比的优势有哪些,还是说 MVC 架构下分工比较明确,代码比较容易区分开来?还望老师指点展开
作者回复: 不清楚你说的“MVC 和一般设计相比”,这里的“一般设计”指的是什么。
共 3 条评论 - William Ning2019-09-30一直不明白,mvc,mvp,mvvm等变体模式,跟前后端有关系吗,个人的理解是,后端框架多是mvc,「开发语言php」,前端似乎是mvp,mvvm之类的,难道就不存在反过来的,还是实践表明,目前的架构模式是较好的实践结果。望老师看到解答,谢谢。
作者回复: 模式本身来说,是没有前后端的限制的。不过,在实际使用中,因为解决的问题所在的层次特点,是带有明显的偏向的。
- William Ning2019-09-30试了下「同样地,执行 catalina version,你也能看到 Tomcat 重要的环境信息:」提示没有该命令……,其他都正常,浏览器上能访问到的,系统变量配置了「CATALINA_HOME C:\Program Files\Apache Software Foundation\Tomcat 9.0」,也重启过电脑,一样的结果,原因是什么呢。
作者回复: 在 Windows 下你看看 Tomcat 的 bin 目录下有没有 version.bat,启动则是 startup.bat。
共 6 条评论 - 易儿易2019-09-30很奇怪,我输入catalina run命令后是这个样子的jdk1.8,tomcat9,catalina run 多次重复输入都是一样,不知道是哪里出的问题,只能通过startup.bat启动 Usage: catalina ( commands ... ) commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina configtest Run a basic syntax check on server.xml version What version of tomcat are you running?展开
作者回复: 从你描述来看,能运行 *.bat,是 Windows 系统吧,那就通过 startup.bat 启动吧。
- Paradise丶朽木2019-09-27刚入职时写过一点jsp,后来是freemaker模板引擎,现在是前后端分离~回答下第二个问题,我觉得fremaker那种方式应该是典型的第一种,controller负责接收请求,处理参数,调用service查询数据,封装成ModelAndView,再由freemaker渲染页面返回。
作者回复: 👍
- leslie2019-09-26先打卡吧:这块确实是我的弱项,趁着马上到来的长假好好把MVC这块补了、、、
- 靠人品去赢2019-09-25之前就曾听人说过JSP是一种特殊的Servlet,现在看说的不完全正确,JSP会转化成一种特殊的servlet返回请求结果。
作者回复: 嗯,最重要的是理解原理。不严格地讲,这些说法都没问题。
- 桃源小盼2019-09-25接口服务里有service,它属于view层还是model层?
作者回复: 你的描述有一些简单,什么是“接口服务里有service”?