混乱的MVC,dotnet非要MVC不可么?

2024-04-14 02:32
文章标签 mvc 不可 混乱 dotnet 非要

本文主要是介绍混乱的MVC,dotnet非要MVC不可么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近流行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中实际的操作看来,模型都是通过控制器在绑定数据。

这篇关于混乱的MVC,dotnet非要MVC不可么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901864

相关文章

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

1、MVC MVC(Model-View-Controller) 是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。以下是 MVC 各组件与常见设计模式的关系和作用: 1. Model(模型)

MySQL脏读、不可重复读、幻读(虚读)

事务的特性: 原子性:指处于同一个事务中的多条语句是不可分割的。一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K。隔离性:指多线程环境下,一个线程中的事务不能被其他线程中的事务打扰持久性:事务一旦提交,就应该被永久保存起来。 事务隔离性问题: 如果不考虑事务的隔离性,会出现以下问题: 脏读:指一个线程中的事务读取到

.Net Mvc-导出PDF-思路方案

效果图: 导语:     在我们做项目的过程中,经常会遇到一些服务性的需求,感到特别困扰,明明实用的价值不高,但是还是得实现;     因此小客在这里整理一下自己导出PDF的一些思路,供大家参考。     网上有很多导出PDF运用到的插件,大家也可以看看其他插件的使用,学习学习; 提要:     这里我使用的是-iTextSharp,供大家参考参考,借鉴方案,完善思路,补充自己,一起学习

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string

SSM Spring MVC集成mybatis

一、练习目标 1、需求 完成部门基本的 CRUD 和分页查询,完成员工基本的 CRUD、分页查询和过滤查询(根据姓名和邮箱模糊查询,根据部门查询)。 2、技术架构 使用 Spring MVC + Spring + MyBatis,数据库选用 MySQL,视图选用 JSP。 3、SSM 集成作用及本质 作用:在框架上基础上开发,发挥各个框架在各层的好处,提高开发效率。 本质: Sp

可重入锁和不可重入锁概念和区别

可重入锁就是一个类的A、B两个方法,A、B都有获得统一把锁,当A方法调用时,获得锁,在A方法的锁还没有被释放时,调用B方法时,B方法也获得该锁。 这种情景,可以是不同的线程分别调用这个两个方法。也可是同一个线程,A方法中调用B方法,这个线程调用A方法。 不可重入锁就是一个类的A、B两个方法,A、B都有获得统一把锁,当A方法调用时,获得锁,在A方法的锁还没有被释放时,调用B方法时,B方法也获得不

Spring MVC 执行流程详解

Spring MVC 是一个典型的基于 MVC 设计模式的框架,它用于开发 Java Web 应用程序。在 Spring MVC 中,每个请求都要经历一系列的步骤,从客户端请求到服务器返回响应。下面的执行流程图很好地描述了 Spring MVC 的执行流程,从请求发起到最后返回数据。接下来,我将全面、深入地讲解 Spring MVC 的执行流程。 Spring MVC 执行流程图: +----

FPGA随记——小说 可综合和不可综合

当然我在网络上找到了些可综合和不可综合的解释 感觉也很有参考价值: https://wenda.so.com/q/1378362174074040 综合就是把你写的rtl代码转换成对应的实际电路。 比如你写代码assign a=b&c; EDA综合工具就会去元件库里拿一个二输入与门出来,然后输入端分别接上b和c,输出端接上a 假如你写了很多这样的语句 assign a=b&c; assig