我已经做了一段时间的 Web 开发人员,最近开始学习一些函数式编程。和其他人一样,我在将这些概念应用到我的专业工作中时遇到了一些重大困难。对我来说,主要的原因是我看到 FP 的目标之间的冲突,保持无状态似乎很不相符的事实,大多数网络开发工作,我已经做了严重的数据库绑定,这是非常以数据为中心。
使我在面向对象方面成为一个更高效的开发人员的一件事是发现了像 MyGeneration d00dads for 这样的对象关系映射器。Net,Class: : DBI 表示 perl,ActiveRecord 表示 ruby,等等。这样我就可以一整天都不用编写 insert 和 select 语句,而是专注于将数据轻松地作为对象处理。当然,当需要 SQL 查询的能力时,我仍然可以编写 SQL 查询,但除此之外,它在幕后得到了很好的抽象。
现在,转向函数式编程,对于许多 FP Web 框架,比如 Links,似乎需要编写大量的样板 sql 代码,就像在 这个例子中一样。Weblock 似乎更好一些,但它似乎使用了某种面向对象的模型来处理数据,并且仍然需要像在 这个例子中那样为数据库中的每个表手动编写代码。我假设您使用一些代码生成来编写这些映射函数,但是这看起来绝对不像 lisp。
(注意,我并没有非常仔细地研究 Weblock 或者 Links,我可能只是误解了它们是如何使用的)。
因此,问题是,对于 Web 应用程序的数据库访问部分(我认为是相当大的部分) ,或者其他需要与 sql 数据库接口的开发,我们似乎被迫走下列路径之一:
显然,这些选择似乎都不理想。找到了规避这些问题的方法吗?真的有什么问题吗?
注意: 我个人最熟悉 FP 前端的 LISP,所以如果您想给出任何示例并了解多种 FP 语言,LISP 可能是首选语言
PS: 有关 Web 开发其他方面的特定问题,请参阅 这个问题。