小编gho*_*dss的帖子

如何在函数式编程语言中实现Rails类型webapp中的"模型"?

在MVC Web开发框架(如Ruby on Rails,Django和CakePHP)中,HTTP请求被路由到控制器,控制器获取通常持久存储到后端数据库存储的对象.这些对象代表用户,博客帖子等内容,并且通常在其方法中包含用于权限,获取和/或变异其他对象,验证等的逻辑.

这些框架都非常面向对象.我最近一直在阅读关于函数式编程的内容,它似乎带来了诸如可测试性,简洁性,模块性等巨大的好处.然而,我见过的函数式编程的大多数例子都实现了诸如quicksort或fibonnacci序列之类的琐碎功能,而不是复杂的webapps.我看了几个"功能"的Web框架,他们似乎都很好地实现了视图和控制器,但很大程度上跳过了整个"模型"和"持久性"部分.(我正在谈论更多像Compojure这样的框架,这些框架应该是纯粹的功能,而不是一些方便的似乎使用Scala的OO部分的模型 - 但如果我在这里错了,请纠正我.)

我还没有看到如何使用函数式编程来提供OO编程提供的隐喻,即表映射到对象,以及对象可以提供强大的封装逻辑(如权限和验证)的方法.此外,使用SQL查询来保存数据的整个概念似乎违反了整个"副作用"概念.有人可以解释如何在功能编程的Web框架中实现"模型"层吗?

model-view-controller functional-programming model ruby-on-rails clojure

11
推荐指数
1
解决办法
705
查看次数

使用 Scala 中的映射链接多个方法调用

我有以下使用 Dispatch 0.11 的代码:

def myHttpPut(urlToPut: String, params: Map[String, String]): Future[Response] = {
  val req = url(urlToPut).PUT
  params.foreach { case (k, v) => req.addParameter(k, v) }
  Http(req)
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 addParameter 不会修改 req - 相反,它会生成一个添加了参数的新 req 对象(在这种情况下,它被丢弃了)。写这个的最优雅的方法是什么,以便我基本上循环遍历参数,使用映射的每个键/值对调用 addParameter,构建 req 直到我将它传递给 Http(req)?

scala scala-dispatch

1
推荐指数
1
解决办法
1439
查看次数