疯子在思考之从零说MVC-2

前几篇文章写了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....
原文地址:https://www.cnblogs.com/hiaming/p/8967797.html