gpt4 book ai didi

ruby-on-rails - Rails 类型的 webapp 中的 'Model' 如何用函数式编程语言实现?

转载 作者:行者123 更新时间:2023-12-04 02:18:01 27 4
gpt4 key购买 nike

在 Ruby on Rails、Django 和 CakePHP 等 MVC Web 开发框架中,HTTP 请求被路由到 Controller , Controller 获取通常持久保存到后端数据库存储的对象。这些对象代表诸如用户、博客文章等之类的东西,并且通常在其方法中包含用于权限、获取和/或改变其他对象、验证等的逻辑。

这些框架都非常面向对象。我最近一直在阅读函数式编程,它似乎吹捧了巨大的好处,例如可测试性、简洁性、模块化等。但是,我看到的大多数函数式编程示例都实现了诸如快速排序或斐波那契数列之类的琐碎功能,而不是复杂的网络应用程序。我查看了一些“功能性”Web 框架,它们似乎都很好地实现了 View 和 Controller ,但在很大程度上跳过了整个“模型”和“持久性”部分。 (我更多地谈论的是像 Compojure 这样的框架,它们应该是纯功能性的,而不是像 Lift 那样方便地使用 Scala 的 OO 部分作为模型的框架——但如果我在这里错了,请纠正我。)

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

最佳答案

不想抨击面向对象的 MVC 框架——我不了解 Rails,但 Django 在我看来是一款出色的软件——我不确定对象关系映射是否是 particularly good metaphor 1.

当然,在 OO 语言中,根据对象来考虑表格似乎很自然,但在函数式语言中,根据表格来考虑表格是非常自然的。可以使用代数数据类型(在 Haskell 和其他静态类型函数语言中)或映射(也称为字典;将键映射到值的关联结构)轻松表示单行;然后一个表变成了一系列行,毕竟它甚至在数据库级别。因此,没有从表的 DB 构造到编程语言中可用的其他构造的特殊映射;你可以简单地使用两边的 table 。2

现在这绝不意味着必须使用 SQL 查询来操作 DB 中的数据,这说明了抽象优于各种 RDBMS 的怪癖的好处。由于您使用的是 Clojure 标签,也许您可​​能对 ClojureQL 感兴趣。 ,一种嵌入式 DSL,用于以通用方式与各种 DB 进行通信。 (请注意,它现在正在重新设计。)您可以使用一些这样的 DSL 来提取数据;使用纯函数处理由此获得的数据;然后显示一些结果,并可能将一些数据保存回数据库(使用相同的 DSL)。

1 如果您认为将一项技术与越南 war 进行比较有点极端,我想我同意,但这并不意味着这篇文章没有很好地说明为什么人们可能不想陷入 ORM 泥潭.

2 请注意,您可以在 OO 语言中使用相同的方法,并以与 FP 语言中相同的方式对 DB 后端进行抽象(请参阅下一段)。当然,您的 MVC 框架将不再看起来很像 Rails。

关于ruby-on-rails - Rails 类型的 webapp 中的 'Model' 如何用函数式编程语言实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com