【问题标题】:How do you explain that purely functional web servers like Ring and Yesod are not MVCs? [closed]你如何解释像 Ring 和 Yesod 这样的纯功能 Web 服务器不是 MVC? [关闭]
【发布时间】:2015-08-14 12:22:52
【问题描述】:

传统上,人们将 Web 应用程序视为一个 MVC - 它假定一个面向对象的上下文。

函数式编程对此提出了批评 - 并提供了一个使用高阶函数和不可变数据结构的模型。

我的问题是:您如何解释像 Ring 和 Yesod 这样的纯功能 Web 服务器不是 MVC?

【问题讨论】:

  • 是什么让您认为 MVC 假定为 OO?我不是说它有或没有,但你的说法让我很好奇。
  • fwiw,对象和函数之间存在密切的映射关系。对象和函数都可以包含代码和做事。纯函数式编程不允许像大多数 OO 那样进行命令式修改,但最早的函数式语言之一 Scheme 是在 OOP 的早期由 Steele 和 Sussman 开发的explore OO ideas。例如在 Scheme 中,您可以定义一个函数,该函数是数据的闭包,并返回允许强制修改或检查该数据的函数。瞧——函数是对象。

标签: haskell model-view-controller clojure functional-programming yesod


【解决方案1】:

我将尝试就 Yesod 回答这个问题。

您如何解释像 Ring 和 Yesod 这样的纯功能 Web 服务器 不是 MVC?

Yesod 不是网络服务器。 Yesod 是一个网络框架。 warp 是与 Yesod 一起使用的推荐 Web 服务器。

您如何解释像 Ring 和 Yesod 这样的纯功能性 Web 服务器不是 MVC

这不一定是真的。您可以使用templates 作为视图,persistent 作为模型,routing and handing 作为控制器。事实上,scaffolding site 松散地遵循 MVC 方法。

函数式编程对此提出了批评 - 并提供了一个使用高阶函数和不可变数据结构的模型。

这与这个 MVC 无关。 MVC 只是一种设计模式。高阶函数和不可变数据结构不会阻止您遵循某些架构或设计模式。

【讨论】:

    【解决方案2】:

    您可以假设 MVC 的 OO 上下文,这就是它诞生的地方,但您当然不必这样做。 MVC 只是说 Model、View 和 Controller 应该是以某种方式交互的独立事物;在 OO 语言中,将它们表示为类很方便,但这不是必需的。参见例如MVC and Purity:

    在接触过纯函数式编程之后,我现在相信控制器和模型/视图的分离正是副作用代码 (IO) 和纯代码之间的分离。

    【讨论】:

      【解决方案3】:

      高阶函数和不可变数据结构是函数式编程的意义所在,就像类/对象是面向对象编程的意义一样,因此函数式 Web 服务器框架主要使用函数式工具(函数、数据结构)似乎很自然尽可能。

      http://www.yesodweb.com/book/routing-and-handlers 以“如果我们将 Yesod 视为模型-视图-控制器框架”开头,......所以我似乎不太理解你的问题。什么意思?

      【讨论】:

        【解决方案4】:

        Ring 足够低级,因此谈论它是否是 MVC 是没有意义的:它只是您对 HTTP 协议的适配器。您可以读取请求标头/正文,写入响应标头/正文等,但环本身没有关于更新域对象的内容;这取决于你在戒指顶部的任何层。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-31
          • 2013-03-28
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 2010-12-23
          • 2012-07-27
          • 1970-01-01
          相关资源
          最近更新 更多