前几篇文章写了JAVA框架的思考
http://lizhizhang.iteye.com/blog/1909415
IOC的思考
http://lizhizhang.iteye.com/blog/1910976
MVC的思考入门篇
http://lizhizhang.iteye.com/blog/1912005
今天接着说MVC
接着上文的问题:
为什么出现MVC?它到底是什么?
我们引用struts2 官网的一段话
Web applications based on JavaServer Pages sometimes commingle database code, page design code, and control flow code. In practice, we find that unless these concerns are separated, larger applications become difficult to maintain.
One way to separate concerns in a software application is to use a Model-View-Controller (MVC) architecture. The Model represents the business or database code, the View represents the page design code, and the Controller represents the navigational code.
这里说的MVC指的是web应用程序(当然还有其他的程序在使用,文中主要说的是web应用程序)
他说基于jsp的web 应用程序通过会把数据库访问代码(可能SQL直接拼在JSP页面里)、页面设计代码以及流程控制代码混合在一起,这样如果不把这些关注点(即MVC)分隔开的话,对大应用程序的维护将越来越困难。
我想这句应该能够回答上面的问题。
MVC的概念:
M 代码着业务逻辑层和数据库访问层
V 代表界面设计层(通过是JSP,html等)
C 代表页面的导航代码
我想到这里就MVC的概念已经说得很明确了。
我所听过的MVC。
M
SSH框架,有人直接说Spring是控制层,Hibernate是M层 ,struts是V层(06年这个影响概念影响了我很长时间,我现在认为他是错的)
Spring和hibernate是M层框架 struts 主要是控制层,标签部分是V层
我们常用的三层架构(model dao service)与MVC的关系
从概念上来讲这三层完全都是属于MVC的M层.
V
划分起来很简单,其实就是界面,但这里最好不要出来<%嵌业务代码。为了与M层隔离.通过会使用jstl标签或el表达式以及第三方框架提供的标签 如struts 标签.
C
其实MVC框架的重点是C.
我曾经听说过这样一句话,说C就是路由导航其他什么都不做。这句话我也曾经坚信过很多年,但是现在我认为他也是错的。
按这句话的意思理解,划分C的话就是struts 的org.apache.struts2.dispatcher.FilterDispatcher
或者是spring mvc的
org.springframework.web.servlet.DispatcherServlet
对于开发者来讲,就等于忘记了C一样,我们跟C没有关系了,显然这种是错误的。
还有一种观点,是业界普遍认同的就是action是C,其实也不全对。action +FilterDispatcher才是真正的C.但对于开发者来讲,跟我们有关系的,直接参与有代码参与的确实只有action,而spring mvc 已经明确将action这一层叫controller.
MVC框架的比较和选择
现在比较靠谱的就是struts和spring mvc 3
struts1与2.0的比较
2.0对于开发来讲提供最大的方便就是模型驱动,他不再用我们手动去调用get set 方法。在我们用之前,他已经帮我们注入完了,但是注入方法却不容乐观,他是通过成员变量的形式用set方法注入,以致于struts 的action要变成非单例对象,这样就会使用每一次请求都要new 一个action出来(上一篇已经介绍过为什么)。
其实这里的开销相对于单例来讲还是比较大的(即便是字节码加速);
第二一个action中如果有多个方法的话,所有的参数都是成员变量,会导致成员变量比较多。
spring mvc 的出现改变了这一现状,他提供函数参数的注入,再通过反射执行。这样解决一个很大的问题就是他可以配置单例的controller;
第二开发起来确实简单了很多,学习成本低。
所以spring mvc要优于struts
MVC最核心的功能其实是web.config里我们配置的过滤器,其他的m是我们自己开发的,V可以用jsp也可以用其他的view界面 spring mvc提供了很多支持。
那么它是怎么实现的呢?
下篇文章我们继续,自己动手写MVC....
分享到:
相关推荐
疯子页面采集器是一款网页抓取工具,是用于网站信息采集,网站信息抓取,包括图片、文字等信息采集处理发布,是目前使用人数最多的互联网数据采集程序,可以采集大部分未加密页面站点 采集器教程 ...
电脑疯子GHOST-WIN7-SP1旗舰版(64位).doc编程资料
.net(mvc)语言开发的宾馆管理系统管理
《天才在左疯子在右》的基本介绍和推荐理由[定义].pdf
疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机...
一款轻简的小说系统,抛弃繁琐,一切从简
疯子助手是一款为苹果设备用户提供应用下载和游戏破解的软件,疯子助手里提供了海量不闪退应用和近千款极高有效度的ios热门游戏存档。 疯子助手完美支持不越狱的iPhone和iPad等iOS设备,是一款下载安装和管理软件、...
Android疯子卸载
2) commons-logging-1.1.3.jar commons的日志管理 3) spring-aop-3.2.8.RELEASE.jar Spring的切面编程 4) spring-beans-3.2.8.RELEASE.jar SpringIoC(依赖注入)的基础实现 5) spring-context-3.2.8.RELEASE....
疯子锁ie插件,锁ie,锁ie插件 懒人锁ie ie加锁 锁ie主页 ie首页被锁 ie代理设置被锁
疯子ftp上传工具源码传送数据到服务器源码版.rar
疯子ftp上传工具传送数据到服务器 ftp上传工具 ftp服务器上传 ftp客户端 ftp服务器客户端 2.0新功能 密码加密 在线更新 更新缓存错误
读后感ۥ天才在左疯子在右精选.doc
eclipse-jee-neon-2-win32-x86_64,里面是下载地址.
疯子
读后感《天才在左,疯子在右》.doc
疯子苹果助手是一款最受欢迎的应用下载平台,不越狱装软件的唯一选择、海量正版软件游戏、每日都有新增、全部免费安装,不需理会手机是否越狱,这么神奇助手,大家赶紧下载使用。 疯子苹果助手软件截图
疯子页面采集器是一款网页抓取工具,是用于网站信息采集,网站信息抓取,包括图片、文字等信息采集处理发布,是目前使用人数最多的互联网数据采集程序,可以采集大部分未加密页面站点。
傻子疯子白痴心得体会傻子疯子白痴观后感.docx
JSP从零开始学(视频教学版),出版时间:2016年01月 .JSP依靠强大的 Java基础,成为世界上最流行的 Web开发利器。本书通过大量的实例,循序渐进地为读者介绍了有关 JSP开发所涉及的各类知识,所有版本一律采用*版本,是...