【问题标题】:Why is MVC stateless - How to explain?为什么 MVC 是无状态的 - 如何解释?
【发布时间】:2014-06-21 14:42:19
【问题描述】:

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

MVC 是无状态的。它建立在另一个无状态的之上 协议 - HTTP 和 HTTPS

但一位学生打断了他并问道,

你说 MVC 是无状态的

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

我真的很困惑,想知道如何回答这个问题。

有什么想法吗?

【问题讨论】:

  • 我不知道 MVC 是一种协议。
  • @Juhana:正确。删除了那个词 :) 是的,frameworkprotocol 之间是有区别的。

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


【解决方案1】:

另一个学生声称问题中的断言是错误的。像 HTTP 这样的stateless protocol 肯定确实关心它是否得到(或永远不会得到)响应!

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 能否请投反对票的人向我解释投反对票。提前致谢。
    • 不是我的反对意见,但您将 MVC 模式与 ASP.NET MVC 框架混淆了。
    • @Juhana 我只是将 MVC 称为一种模式,而不是因为它被 ASP.NET 使用,这导致了 ASP.NET MVC。出于这个原因,我使用了 Web 框架这一短语,而不是指特定的框架,例如 ASP.NET MVC、Djagno、RoR 等等。
    • 我的意思是,您的回答解释了为什么 MVC 模式是或不是无状态的,但问题根本不在于 MVC 模式。 OP 使用“MVC”作为“ASP.NET MVC 框架”的简写。
    • @Juhana 是的,我明白你的意思。这可能是我的错,但我试图更笼统,因为这不是问题中所述的 ASP.NET MVC 特有的问题。谢谢你们的cmets。
    【解决方案3】:

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


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

    视图不允许直接改变模型的状态——只能通过控制器。视图仍然可以直接访问模型,但仅用于查看(或通过拥有非官方模型的副本)。

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

    Controller 控制状态和对模型的访问。


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

    【讨论】:

      【解决方案4】:

      MVC 不是无状态的,HTTP 是。

      HTTP 是无状态的并不意味着它是一劳永逸的。客户端确实等待响应。在两个连续的请求没有任何关系的意义上,它是无状态的。

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

      【讨论】:

      • HTTP 服务器是无状态的,HTTP 客户端从来不是。
      • @deerchao 你是什么意思?
      • 例如cookie必须被客户端记住,而不是服务器。
      • 在使用会话的时候,服务器也会保持一个状态。
      • @CodeCaster:谢谢。很好的解释。为第二行 +1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      相关资源
      最近更新 更多