Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 您如何解释像Ring和Yesod这样的纯功能web服务器不是MVC?_Haskell_Model View Controller_Clojure_Functional Programming_Yesod - Fatal编程技术网

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

Haskell 您如何解释像Ring和Yesod这样的纯功能web服务器不是MVC?,haskell,model-view-controller,clojure,functional-programming,yesod,Haskell,Model View Controller,Clojure,Functional Programming,Yesod,传统上,人们认为web应用程序是一个MVC,它假定了一个面向对象的上下文 函数式编程对此提出了批评,并提供了一个使用高阶函数和不可变数据结构的模型 我的问题是:你如何解释像Ring和Yesod这样的纯功能web服务器不是MVC?高阶函数和不变的数据结构是函数式编程的内容,就像类/对象是OOP的内容一样,因此,在可能的情况下,功能性web服务器框架主要使用功能性工具(功能、数据结构)似乎是很自然的 以“如果我们将Yesod视为模型-视图-控制器框架”开头。。。所以我似乎不太明白你的问题。你是什么意

传统上,人们认为web应用程序是一个MVC,它假定了一个面向对象的上下文

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


我的问题是:你如何解释像Ring和Yesod这样的纯功能web服务器不是MVC?高阶函数和不变的数据结构是函数式编程的内容,就像类/对象是OOP的内容一样,因此,在可能的情况下,功能性web服务器框架主要使用功能性工具(功能、数据结构)似乎是很自然的


以“如果我们将Yesod视为模型-视图-控制器框架”开头。。。所以我似乎不太明白你的问题。你是什么意思?

我会尝试回答关于Yesod的问题

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

YesSOD不是web服务器。Yesod是一个web框架。是建议与YesSOD一起使用的web服务器

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

这不一定是真的。可以使用as视图、as模型和as控制器。事实上,该方法大致遵循MVC方法

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


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

您可以为MVC假设OO上下文,这就是它诞生的地方,但您当然不必这样做。MVC只是说模型、视图和控制器应该是以某种方式相互作用的独立事物;在OO语言中,将它们表示为类很方便,但这不是必需的。例如,见:

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


Ring的级别很低,所以说它是否是MVC是没有意义的:它只是HTTP协议的适配器。您可以读取请求头/body,编写响应头/body,等等,但是环本身并没有关于更新域对象的内容;这取决于您在环顶部的任何层。

是什么让您认为MVC采用OO?我不是说它有没有,但你的陈述让我好奇。fwiw,对象和函数之间有一个紧密的映射。对象和函数都可以包含代码和操作。纯函数式编程不允许命令式修改,正如大多数OO所做的那样,但最早的函数式语言之一Scheme是由Steele和Sussman在OOP早期开发的。e、 在Scheme中,您可以定义一个对数据进行闭包的函数,并返回允许强制修改或检查该数据的函数。瞧,函数就是对象。