为什么MVC无国籍 - 如何解释?

时间:2014-05-05 10:18:24

标签: c# asp.net asp.net-mvc asp.net-mvc-4

向我的学生解释ASP.NET MVC的概念

  

MVC是无国籍的。它建立在另一个无国籍人的基础之上   协议 - HTTP和HTTPS

但是一名学生打断了他的问道,

  

你告诉MVC是无状态的

     

无状态协议从不关心响应是否回来   服务器。但是,在ASP.NET MVC框架中,您发出请求并等待   为了回应。由于您等待响应,因此应该调用它   作为一项有状态的服务。你怎么称它为无国籍的服务   然后?

我真的被困了,想知道该回答这个问题。

有什么想法吗?

4 个答案:

答案 0 :(得分:20)

MVC不是无状态的,HTTP是。

HTTP无国籍并不意味着它是火和忘记。客户端确实等待响应。在两个连续的请求没有任何关系的意义上,它是无国籍的。

可以使用会话模拟状态,例如使用cookie。

答案 1 :(得分:7)

问题中的断言,其他学生声称错了。一个stateless protocol类似HTTP确保 关注它是否得到(或永远不会得到)响应!

  

[无状态协议]将每个请求视为与任何先前请求无关的独立事务,以便通信由独立的请求和响应组成。< / p>

当然,MVC甚至不是协议......但可以扩展相同的概念。它是“无状态的”,因为所有信息都在请求和响应中编码为“对”。在实践中,大多数用法并非真正无国籍。

答案 2 :(得分:1)

MVC不是协议是软件架构模式。

另一方面,HTTP是一种协议。

现在,MVC模式在许多Web框架中非常流行。这些Web框架和其他Web框架用于Web应用程序的开发。 在Web应用程序的上下文中,HTTP是一种应用程序协议,用于从浏览器进行通信与托管Web应用程序的服务器。

确实,HTTP的本质是无状态的。 HTTP中没有state的概念。出于这个原因,在许多Web框架中,我们尝试实现state的概念有不同的方法。例如,在ASP.NET Web Forms中,ViewState就是出于这个原因而开发的。

话虽如此,MVC与HTTP的无状态特性无关。

答案 3 :(得分:0)

请记住,模型 - 视图 - 控制器架构的概念有很多不同的实现。没有“正确”的MVC。 ASP.NET MVC不可能不是模型 - 视图 - 控制器模式的“完美”实现!


否则考虑有状态/无状态MVC。通过思考责任可以理解MVC:

不允许View直接更改模型的状态 - 仅通过Controller。该视图仍然可以直接访问模型,但仅用于查看(或通过拥有不是官方模型的副本)。

模型应该存在于自己的世界中,并且没有任何对控制器或视图的引用。

Controller控制状态并访问Model。


它们如何相互交互,可以以非常不同的方式实现(例如,基于平台)......