最近流行MVC,不是因为大家都在用,而是他已经在.NET缺席N多年。本文题目是乱取的,吸引眼球而已
MVC是一个非常有争议性的话题,首先,什么算是MVC,没有一个统一的说法,众说纷纭,java,php都在争吵不休,就跟别说已开始就压根没打算MVC的ASP.NET。在大家被微软用CodeBehind和CodeBeside忽悠过去N多年之后,当大家在对WebForm审美疲劳后,MVC就跟李宇春一般另类且充满吸引力。最近的新闻是微软也要在ASP.NET中推出MVC了。对于很多M饭来说是一个十分值的庆祝的事情。顺带着MonoRail也鸡犬升天,关注的人越来越多。WebForm未死,MVC却活过来了。
所以这就是我不得不来发表对MVC一下看法的原因。
上帝说“你应该了解真相,真相使你自由”
什么是MVC的真相呢?我想从来源说起
话说N多年前,在一个叫SmartTalk的国度出现了一个叫MVC的家伙,后来流窜到了java国,在Java国里呼风唤雨(java的很多有界面的组件,比如swing都是采用MVC模式设计的)。
这个MVC是个什么样的家伙?
首先,此人长了三只手。一只叫Model,它负责业务领域状态的知识,一只叫View,负责业务领域的表示视图,一只叫Controller,负责控制用户输入的流和状态。当模型某一部分发生变化的时候,通常使用事件通知表单来通知视图。但是这个家伙在Web上操作的时候遇到了麻烦。因为Web的浏览器是没有状态的,所以模型没有办法通知视图发生变化,而必须通过用户发出另一次请求才能知道模型的改变。(以上内容源自《jakarta struts编程》一书)
所以这个家伙就将我迷惑住了,如果用户需要请求两次,那么整个过程的入口在那里?View还是Control?
在微软忽悠的MVP中,其实aspx文件和aspx.cs都被混成了一个类,那么这个所谓的PageController和View(aspx页面)是耦合起来的。
反过来看java的MVC,在jsp2.0规范中,不允许直接请求jsp页面而是需要通过Servlet来重定向,具体的效果先不说,起码倒是把Controller和View分开了,而且也统一了入口,都是从控制器进入的,那么控制器的职责也就很清晰了:
- 拦截http请求
- 将请求转换成要执行的具体业务逻辑的操作
- 判断调用业务操作还是委托给处理程序
- 帮组用户选择要显示给客户端的下一个视图
- 将视图返回给客户端
如果按照ASP.NET的WebForm来实现的话,那么4,5两步就很让人迷惑了,因为Controller和视图已经牢牢的绑定在了一起,如何选择,如果将请求转发,那么应该也将请求转发给了下一个控制器而不是视图。
所以微软用一个MVP来忽悠了之后,大家反而迷惑了。所以新人注意了,如果你开始学WebForm就千万不要看MVC,否则也会被忽悠。
至于微软新出的MVC,没用过,不做评论。
这里我总结一下我的观点,什么样的框架算是MVC呢?
首先,M、V、C三部分的功能应该符合
Model,负责业务领域状态的知识
View,负责业务领域的表示视图
Controller,负责控制用户输入的流和状态
由于Web下的限制,Controller应该作为整个请求的入口,由Controller来组织业务逻辑(判断请求和业务逻辑的对应关系,最终的实现还是Model),而模型的改变通知视图的功能也就应该由Controller来转达一次(没办法,Web的限制,由于Controller被作为了入口,那么模型通知视图变化的事件也之只能由Controller来触发,或者也可以是Controller通知视图模型变化了,然后视图到模型去取数据)。
其实从上面的分析看来,起码来说视图应该能够根据模型自己组织输出的外观而不必假手Controller,但是在ASP.NET中实际的操作看来,模型都是通过控制器在绑定数据。
之前很早就看过Henry Fan兄的Nclay,其中的MVC组件给出的例子还没好生研究,所以在这里也期待Henry兄给出自己的宝贵意见
分享到:
相关推荐
ASP.NET MVC5是一个基于微软.NET Framework的开源web应用程序框架,专为构建动态、数据驱动的Web应用程序而设计。它结合了Model-View-Controller(MVC)设计模式、ASP.NET的功能性和HTML5的能力,提供了更高效、灵活...
ASP.NET MVC是一个强大的框架,用于构建可伸缩、高性能的Web应用程序。在.NET平台上,它提供了灵活的架构,使得开发者可以使用模型-视图-控制器(MVC)设计模式进行开发。ADO.NET则是.NET Framework中用于数据库交互...
ASP.NET MVC是一个强大的框架,用于构建可维护性和灵活性极高的Web应用程序。它是Microsoft为开发者提供的一种基于模型-视图-控制器(MVC)设计模式的工具,使得开发人员能够更清晰地分离业务逻辑、数据处理和用户...
ASP.NET MVC是一个强大的框架,用于构建可维护的、高性能的Web应用程序。这个源码包显然包含了一个使用ASP.NET MVC和三层架构开发的项目实例。三层架构通常指的是数据访问层(DAL)、业务逻辑层(BLL)和表示层(UI...
总的来说,ASP.NET MVC框架结合了MVC模式的优势,提供了一种高效、可扩展和易于测试的开发方式,尤其适合大型企业级应用的开发。通过学习和掌握这个框架,开发者能够更好地组织和管理代码,提高开发效率,同时也能为...
ASP.NET MVC是一个强大的框架,用于构建可伸缩、高性能、易于测试和维护的Web应用程序。这个框架结合了ASP.NET的功能和Model-View-Controller(MVC)设计模式,提供了更灵活的开发方式,与传统的ASP.NET Web Forms...
ASP.NET MVC 是微软推出的一个用于构建可测试、高性能 Web 应用程序的框架。它基于模型-视图-控制器(MVC)设计模式,强调将业务逻辑、数据处理和用户界面分离,有利于提高代码的可读性和可维护性。在ASP.NET MVC中...
ASP.NET MVC Handler 是微软开发的一种Web应用程序框架,用于构建可维护性和可测试性极高的Web应用。这个框架基于模型-视图-控制器(MVC)设计模式,它为开发者提供了更多的控制力和灵活性,使他们能够更高效地构建...
7. **MVC与Flash交互**:由于SwfUpload是基于Flash实现的,而Flash不支持跨域请求,因此在Asp.net MVC项目中使用时,需要确保前端和后端在同一域名下,或者配置CORS策略。 8. **安全考虑**:在实际应用中,要防止...
7. **依赖注入**:ASP.NET MVC5支持依赖注入,允许开发者在运行时动态地注入依赖,提高了代码的可测试性和可扩展性。 8. ** Areas**:对于大型项目,Areas提供了一种组织和分隔应用不同功能区域的方法,每个Area都...
- **客户端验证(Client-Side Validation)**:ASP.NET MVC支持基于jQuery的客户端验证,这可以即时反馈用户输入的错误,提高用户体验,但为了安全,服务器端验证仍然必不可少。 此外,"避免asp.net mvc模式的缺点"这...
Asp.NET MVC(Model-View-Controller)是微软推出的一种基于ASP.NET的轻量级Web应用程序框架,它为开发者提供了更灵活的架构和更高的可测试性。该框架在传统的Web Forms之外提供了一种替代方案,尤其适合构建RESTful...
ASP.NET MVC6是微软开发的一款用于构建Web应用程序的框架,它是ASP.NET Core的一部分,具有高度模块化、跨平台和高性能的特性。ASP.NET MVC6在ASP.NET MVC5的基础上进行了重大改进,以适应现代Web开发的需求。 1. *...
ASP.NET MVC1.0是微软推出的用于构建Web应用程序的一个框架,它是基于Model-View-Controller(MVC)设计模式的。MVC模式是一种流行的设计架构,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器...
ASP.NET MVC框架是微软开发的一款用于构建Web应用程序的开源框架,它基于模型-视图-控制器(MVC)设计模式,旨在提供更加灵活、可测试的Web开发方式。本课程将深入探讨MVC模式和ASP.NET MVC框架的基础知识,帮助...
ASP.NET MVC 旨在简化Web应用的开发过程,通过清晰地分离关注点来提高代码的可维护性和可测试性。 ### MVC 设计模式 MVC设计模式是ASP.NET MVC框架的核心。该模式将应用程序分为三个主要组件: 1. **模型(Model...
NerdDinner还涉及到验证用户输入、权限控制等进阶主题,这些都是实际开发中必不可少的。 My Movie List则是一个更贴近个人兴趣的应用实例,它允许用户创建和管理他们的电影收藏。这个项目展示了如何使用ASP.NET MVC...