`
宋双旺
  • 浏览: 156861 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mvc理解

    博客分类:
  • web
阅读更多

MVC的概念已经深入人心,是经常被大家经常提到的法宝利器。
我感到有必要澄清MVC的概念和来龙去脉,以便大家有一个共识,有一个共同讨论的基础,以便能够把讨论更深入地进行下去,解决真正的问题,而不是在一些技术概念上绕圈子。

一般来说,我不喜欢在名词概念上做文章,发表看法和评论。因为有更多的真正有挑战性的问题需要解决。但通过这段时间的讨论,我感到一种这样的危险:

我们程序员是否过于迷信MVC之类的名词概念,是否可能因此而减弱了或丧失了独立思考的能力?
所以我甘冒天下之大不韪,直言不讳了。

先举一个例子。

很多程序员言必讲,“和页面显示相关的逻辑,只应该存在于View里面,而不应该存在于任何其它部分的代码里面。”
但很少有人真正思考,这个概念从何而来。大家隐约地觉得这个概念来自于MVC。但为什么会有这个概念?这个概念的真实来源是什么?
其实,MVC中关于View的原意是这么说的,“View里面只应该存在和显示有关的逻辑,而不应该存在任何其它的逻辑——比如访问数据库,调用业务逻辑之类”。
纠其源头,这是针对很多程序员在JSP中调用JDBC的现象。

大家仔细比较一下这两句话的区别。可以看出对一个概念的执著和崇拜能够达到怎样的一种潜移默化的思维效果。

本意是为了降低View的作用,只让View做这一件事情,不让View做越权的事情。结果成为:只有View才能做这件事情,其它部分没有权利做这件事情。

那么我们来看,所有的MVC框架中,View部分做到了“只和显示逻辑相关” 吗?View能够脱离数据部分单独存在吗?不管是用JSP,Velocity,还是用TagLib,View都必须知道自己所使用的Object的数据结构,必须访问这些Object的各种属性,才能把它们显示出来。这个View和Model分开了吗?能分开吗?

从概念来讲,MVC是一个完备的概念吗?能够自圆其说吗?

Struts是最流行的Web框架,也正是Struts令MVC概念风靡世界,成为Web程序员的圣经。

下面,我们来确认一下什么是MVC和MVC的来龙去脉。
MVC要求,Model把数据填充到request.attribute里面,通过Controller转发,View再把这些数据从 request.attribute里面拽出来显示。
为什么需要这个过程呢?不知道大家想过这个问题吗?更深一步,有没有想过为什么Servlet规范需要request.attribute这个定义呢?

因为你没有别的方式把数据从Model传到View里面去。

MVC是为了解决JSP的天生缺陷而引入(原文为创造,错误) 的。因为JSP是Servlet。你必须请求Web Server帮你定位并调用JSP/Servlet。
你必须调用 request.getRequestDispatcher("your.jsp").include().
既然如此,如何在Servlet之间传输数据?只能通过request.attribute。

Velocity本来和MVC毫无关系,你完全可以在Action里面直接定位调用Velocity Template。

但为了支持MVC,Velocity不得已做了妥协,做了Velocity-tools,来支持MVC。


==========================================================================

Web 表示层开发框架要解决好两方面的问题:
1、表示逻辑与业务逻辑的分离,以便实现细粒度的重用和组件化开发。
解决这个问题不一定非要使用 MVC。我们现在不更新页面时在浏览器/服务器之间传递的全部是 XML 格式的纯数据,与显示格式没有任何关系,显示格式完全由 JS 根据当时的语境自己决定。我认为我们已经很好地实现了表示逻辑与业务逻辑的分离。

2、提供丰富的控件帮助开发人员建造出表现能力丰富的 Rich Client。

这个问题目前各种流行的 Java Web 开发框架做的都是很不够的(可能 Tapestry 能好一些)。为什么?因为设计这些框架的人知识上存在盲区,不知道 JS 能做什么,完全忽视了浏览器端脚本的处理能力。认为所有表示层的问题都可以在服务器端解决掉,因此不需要 JS 的参与。

第二个问题甚至是更重要的问题,解决的难度比第一个问题要大的多。第二个问题不解决好,你就永远无法说服客户你们的产品确实比那个 xx 鸟公司的产品强。

其实一个很简单的 MVC 框架我最多半天时间就可以写出来,呵呵。

分享到:
评论

相关推荐

    自定义mvc理解与增强

    1.获取*.action完整路径 2.获取*.截取完整请求路径,得到请求路径名。 3.根据请求路径获取对应的Action子控制器 。 4.将请求委托action子控制器处理。

    mvc各种理解介绍

    "MVC架构模式和ASP.NET MVC项目结构" MVC架构模式是将Web应用程序组件分离的架构结构设计模式,通过分开组件,我们可以更好地控制应用程序的单个部件,从而能够更加轻松地开发、修改和测试这些部件。MVC架构模式...

    有关MVC的深入理解的几篇文档

    全方面理解MVC模式不仅包括基本概念,还包括实际应用场景、最佳实践以及其与其他设计模式的对比,如MVVM(Model-View-ViewModel)和MVP(Model-View-Presenter)。了解这些可以帮助开发者更好地选择适合项目的技术栈...

    MVC框架的理解

    ### MVC框架的理解 MVC(Model-View-Controller)架构模式是软件工程中常用的一种设计模式,主要用于简化复杂的用户界面程序开发。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller...

    一个简音的MVC框架,适合初学MVC的人理解

    **学习MVC框架**,首先需要理解MVC模式的基本概念,接着通过实践编写Model、View和Controller来建立实际的应用。在"SimulateMVC"中,你可以通过阅读代码了解每个部分是如何协作的,以及如何组织和管理代码以实现MVC...

    MVC应用开发程序

    对初学MVC开发者很有学习、参考...3、每个添加,修改,删除按钮都有几种方法实现,方便开发人员对MVC理解。 4、实现数据表格分页功能。 5、源程序代码简单明了,每个方法都有详细注解,对初学MVC开发人员不可多得代码。

    MVC详细教程,外加一个很经典的MVC小案例,帮助理解

    学习这个MVC详细教程,你将深入理解如何组织代码,如何设计高效的Web应用,以及如何利用MVC模式来提高开发效率。教程可能包含理论讲解、代码示例和实践项目,一步步引导你掌握MVC的核心概念和实践技巧。 通过阅读...

    mvc 代码 mvc 代码

    **MVC(Model-View-Controller)模式**是软件工程中一种广泛采用的设计模式,尤其在Web...通过深入研究MVC源码,开发者不仅可以掌握MVC模式的实现细节,还能提升对Web应用架构的理解,从而更好地设计和优化自己的项目。

    C++实现简单的MVC框架

    本项目是用C++实现的一个简单的MVC框架,名为MVCDemo,旨在帮助开发者理解MVC设计模式的基础概念。 首先,我们来详细解释MVC的三个组成部分: 1. Model(模型):模型层是应用的核心,它负责管理数据和业务逻辑。...

    中文版小MVC

    `中文版小MVC`是一个专为英语能力有限的开发者设计的简单MVC框架实现,其代码尽可能使用中文注释,以便于理解和学习MVC模式的基本概念。MVC(Model-View-Controller)是一种广泛应用于Web开发的设计模式,它将业务...

    MVC简单例子C#

    **MVC(Model-View-Controller)模式是软件开发中...总结,这个"MVC简单例子C#"涵盖了C#编程语言和MVC设计模式在Web开发中的应用,通过理解和实践这个例子,你可以更好地掌握如何在C#环境下构建高效、可维护的Web应用。

    基于ASP.NET MVC项目实例

    本项目实例是针对初学者设计的,旨在帮助学习者深入理解MVC框架的设计理念和实际应用。 **1. MVC模式** MVC模式是软件工程中的一个设计模式,将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器...

    Android学习之浅谈对MVC模式和MVP模式的理解

    在Android开发领域,理解并应用合适的架构模式对于创建可维护、可扩展的代码至关重要。本文将深入探讨两种常见的设计模式——MVC(Model-View-Controller)和MVP(Model-View-Presenter),并结合实际的TestMVP项目...

    自己利用mvc写了个简单的框架,对理解mvc以及sturts有很大的帮助

    描述中提到这个简单的MVC框架是为了项目需求而创建的,并且强调对于初学者理解MVC和学习Struts有较大帮助。Struts是Apache组织开发的一个开源Java Web框架,它也是基于MVC模式,但提供了更多的功能和社区支持,如...

    ASP.NET MVC5

    ASP.NET MVC5是一个基于微软.NET Framework的..."J.T.ASP.NET MVC 5.pdf"这个文件很可能是关于这一主题的详细教程,涵盖这些知识点,对于新手来说是一份宝贵的资源,可以帮助他们快速上手并深入理解ASP.NET MVC5框架。

    经典MVC登录实例代码

    **MVC模式与Servlet、JSP的协同工作** ...以上就是关于"经典MVC登录实例代码"所涉及的核心知识点,希望对你在理解和应用MVC模式、Servlet和JSP方面有所帮助。通过实践这个实例,你可以进一步提升在Web开发领域的技能。

    PureMVC 中文版

    1. **多层架构**:通过将应用划分为Model、View和Controller三层,使得代码结构清晰,易于理解和测试。 2. **命令模式**:使用命令模式来处理业务逻辑,每个命令都是一个独立的类,可以单独测试和复用。 3. **观察者...

    mvc模式的贪吃蛇

    ** MVC 模式详解及其在“贪吃蛇”游戏中的应用 ** MVC(Model-View-Controller)模式是一种常见的软件设计模式,尤其在Web开发...通过理解并熟练运用MVC模式,开发者可以构建出更加健壮、灵活和易于维护的软件系统。

    MVC后台管理系统

    **51Aspx源码必读.txt**:这可能是针对51Aspx网站上发布的ASP.NET相关源码的阅读指南,提供了学习和理解ASP.NET MVC后台管理系统源码的要点和技巧。 **最新Asp.Net源码下载.url**:这个链接指向最新的ASP.NET源码...

Global site tag (gtag.js) - Google Analytics