我一直是一个Web开发人员,现在已经开始学习一些函数式编程。和其他人一样,我将这些概念中的许多应用于我的专业工作方面遇到了一些重大困难。对我来说,主要原因是我看到FP之间的无状态目标之间的矛盾似乎与我所做的大多数Web开发工作都与数据库密切相关,这些数据库非常以数据为中心。数据库和函数式编程有何不同?
一两件事让我更富有成效开发商对事物的OOP侧像MyGeneration d00dads对于.NET,Class对象关系映射器的发现:: DBI对Perl,ActiveRecord的红宝石,等这使我不用花一天时间写插入和选择语句,并且专注于将数据作为对象轻松处理。当然,我仍然可以在需要它们的权力时编写SQL查询,但否则它会在幕后很好地抽象出来。
现在,转向功能性编程,似乎像许多FP Web框架一样,Links需要编写大量的样板sql代码,如this example。网络锁看起来好一点,但它似乎使用了一种OOP模型来处理数据,并且仍需要为数据库中的每个表手动编写代码,如this example。我想你使用一些代码生成来编写这些映射函数,但是这看起来显然是不喜欢的。 (注意:我没有非常仔细地查看Weblocks或Links,我可能会误解它们是如何使用的)。
所以现在的问题是,对数据库访问的部分(我认为是相当大的)Web应用程序,或其他发展需要的接口与SQL数据库中,我们似乎压低以下路径之一:
- 不要使用函数式编程
- 访问数据在一个恼人的,非抽象的方式,涉及手动编写大量SQL或类似SQL代码ALA链接
- 队我们的功能语言为伪OOP范式,从而消除了真正的函数式编程的一些优雅和稳定性。
显然,这些选项都不理想。是否找到了解决这些问题的方法?这里真的有一个问题吗?
注:我个人最熟悉的FP前LISP,所以如果你想给任何例子,知道多FP语言,口齿不清很可能是选择的首选语言
PS:具体问题到web开发的其他方面,请参阅this question。
另请参阅:http://stackoverflow.com/questions/218190/is-functional-to-relational-mapping-easier-than-object-to-relational – 2008-12-01 09:32:16
@WW - 谢谢,不知何故错过了这个问题。 – 2008-12-01 09:40:46
查看ClojureQL和HaskellDB。它们是利用关系代数的抽象层。 – Masse 2011-08-05 11:34:51