向我的学生解释ASP.NET MVC的概念
MVC是无国籍的。它建立在另一个无国籍人的基础之上 协议 - HTTP和HTTPS
但是一名学生打断了他的问道,
你告诉MVC是无状态的
无状态协议从不关心响应是否回来 服务器。但是,在ASP.NET MVC框架中,您发出请求并等待 为了回应。由于您等待响应,因此应该调用它 作为一项有状态的服务。你怎么称它为无国籍的服务 然后?
我真的被困了,想知道该回答这个问题。
有什么想法吗?
答案 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。
它们如何相互交互,可以以非常不同的方式实现(例如,基于平台)......