前几篇文章写了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....
分享到:
相关推荐
《.NET(MVC)宾馆管理系统详解》 ...总的来说,选择.NET(MVC)作为宾馆管理系统的开发平台,不仅能提供强大的功能支持,还能带来良好的可扩展性和维护性,是构建现代化宾馆信息系统的一个理想选择。
电脑疯子GHOST-WIN7-SP1旗舰版(64位).doc编程资料
2. **数据库结构**:`update_sql.sql` 文件通常用于数据库的升级或初始化,意味着疯子CMS有预设的数据库结构,包含了存储小说信息、用户数据、权限设置等相关表,通过SQL脚本进行数据操作。 3. **前端框架**:`...
疯子页面采集器是一款网页抓取工具,是用于网站信息采集,网站信息抓取,包括图片、文字等信息采集处理发布,是目前使用人数最多的互联网数据采集程序,可以采集大部分未加密页面站点 采集器教程 ...
《天才在左疯子在右》的基本介绍和推荐理由[定义].pdf
首先,疯子苹果助手的特性之一是其海量的正版软件和游戏资源。用户可以在该平台上找到众多官方认证的应用,涵盖娱乐、教育、工具、社交等多个领域,满足不同用户的个性化需求。每日更新的新增应用确保了用户始终能够...
疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机...
总结来说,"疯子锁IE插件源码程序演示效果"提供的是一种针对IE浏览器的保护工具,它可以锁定浏览器的使用、主页设置和代理服务器设置,确保用户隐私和安全。这款插件的特色在于其易用性和全面的保护措施,适用于个人...
总结来说,"C# MVC 订单系统(数据库+源码)"是一个涵盖C#编程、MVC架构、数据库设计和Web应用开发实践的综合案例。通过分析和学习这个项目,开发者可以深入理解如何构建一个完整的订单处理系统,同时提升自己的C#编程...
疯子助手是一款为苹果设备用户提供应用下载和游戏破解的软件,疯子助手里提供了海量不闪退应用和近千款极高有效度的ios热门游戏存档。 疯子助手完美支持不越狱的iPhone和iPad等iOS设备,是一款下载安装和管理软件、...
总结来说,这篇文摘通过一个社会边缘人物的故事,讨论了规则遵守、社会责任、环保意识以及社会对非主流行为的态度,引导读者深入思考何为真正的正常,以及如何评价个体在社会中的角色。它提醒我们在面对社会的普遍...
《天才在左,疯子在右》这本书以其独特的视角探讨了人类思维的边界,通过对话精神病人的经历,引发读者对自我认知和世界本质的深度思考。以下是对书中的几个核心观点的解读: 首先,作者通过描述吃苹果的过程,强调...
"疯子页面采集器 v4.0" 是一款专门针对网页数据采集的高效工具,它设计的目的是为了帮助用户从互联网上抓取并处理各种类型的信息,如文字、图片等。这款软件尤其适用于那些需要大量网页信息进行分析、研究或者自动化...
总的来说,《天才在左,疯子在右》不仅是一本书,更是一次对思维边界和人性深度的探索。它教会我们要开放心态,接纳不同,以及深入体验和理解生活中的每一刻。通过阅读,我们有机会反思自我,挑战既定观念,从而获得...
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....
在这个"疯子ftp上传工具源码传送数据到服务器源码版.rar"压缩包中,包含的源码可能是一个实现了FTP协议的上传工具,允许用户将本地文件上传至远程服务器。 FTP上传工具的核心功能通常包括以下部分: 1. **连接建立...
2. **疯子页面采集器功能** - **自定义规则**:用户可以通过设置规则,指示采集器如何识别和提取目标网页中的特定信息。 - **智能识别**:具备自动识别网页元素的能力,如标题、链接、文本等。 - **批量采集**:...
疯子ftp上传工具传送数据到服务器 ftp上传工具 ftp服务器上传 ftp客户端 ftp服务器客户端 2.0新功能 密码加密 在线更新 更新缓存错误
eclipse-jee-neon-2-win32-x86_64,里面是下载地址.
1. **关卡设计**:疯子版可能会有更多精心设计的关卡,这些关卡可能包含多个难度等级,从初级的简单关卡逐渐过渡到需要深度思考和多次尝试的高级关卡。关卡设计可能更加巧妙,利用地形、障碍物以及箱子的数量来增加...