【问题标题】:What are the best practices for functional programming and database interaction?函数式编程和数据库交互的最佳实践是什么?
【发布时间】:2025-12-31 08:10:16
【问题描述】:

我知道在像 Java 这样的纯面向对象语言中,使用像 Hibernate 这样的 ORM 通常是有意义的。但是在 Clojure 或 Common LISP 中编写 CRUD 类型的功能时我会怎么做?

将 SQL 作为一阶函数传递?但是在 HTML 生成代码中使用 SQL 是不是很丑陋?

谢谢,

奥莱克

【问题讨论】:

    标签: database orm functional-programming lisp crud


    【解决方案1】:

    Common Lisp 不是一种自觉的 FP 语言。 Clojure 可以只使用 Hibernate。

    对于 Common Lisp:databases。这是persistent object onehere 是教程的第一部分,它与 Hunchentoot、CL 网络服务器和动态网页工具包一起使用。 CL can look like this 中的 SQL(看起来比实际更长,因为 SQL 是水平格式化的,而 CL 不是)。如果您愿意,this guy 正在开发一个 Web 框架(使用 CLSQL 和 Elephant,已经链接到),该框架旨在简洁,着眼于弧线挑战。

    编辑:a recent answer 对此进行了扩展。

    【讨论】:

    • CL-SQL 非常好,它展示了面向对象和函数如何协同工作。
    【解决方案2】:

    Ur/Web 可能很有趣,尽管它不是基于 lisp 的:http://plv.csail.mit.edu/ur/

    引自他们的网站:

    Ur/Web 支持构建由 SQL 数据库支持的动态 Web 应用程序。标准库的签名使得类型良好的 Ur/Web 程序在非常广泛的意义上“不会出错”。它们不仅不会在特定页面生成期间崩溃,而且它们也可能不会:

    • 遭受任何类型的代码注入攻击
    • 返回无效的 HTML
    • 包含无效的应用内链接
    • HTML 表单与其处理程序预期的字段不匹配
    • 包含对远程 Web 服务器提供的“AJAX”样式服务做出错误假设的客户端代码
    • 尝试无效的 SQL 查询
    • 在与 SQL 数据库或浏览器和 Web 服务器之间的通信中使用不正确的编组或解组

    【讨论】:

      【解决方案3】:

      another answer 中描述了一组替代的 Common Lisp 工具

      【讨论】: