回答

收藏

数据库和函数式编程是否不一致?

技术问答 技术问答 84 人阅读 | 0 人回复 | 2023-09-13

我已经从事Web开发已有一段时间了,最??近开始学习一些函数式编程。像其他人一样,我在将许多这些概念应用于我的专业工作时遇到了很大的麻烦。对我来说,主要原因是我看到FP保持无状态的目标之间存在矛盾,这与我所做的大多数Web开发工作都与数据库紧密相关,而数据库是非常以数据为中心的。" A0 R; I0 p' q3 D( G
使我成为OOP方面更具生产力的开发人员的一件事是发现了对象关系映射器,例如用于.Net的MyGeneration d00dads,用于perl的Class
) j* l% ~8 t% d7 N9 c% C$ e::
2 O- F/ |. j7 p0 z, i$ H( }( @DBI,用于ruby的ActiveRecord等。这使我远离了从整天编写插入和选择语句开始,并专注于轻松地将数据作为对象来使用。当然,当需要SQL查询时,我仍然可以编写它们,但是在其他情况下,它却被很好地抽象了。( I: m( K2 R& f8 J8 d5 o, H
现在,转向函数式编程,对于许多FP/ C" t) C- {- A4 u/ X  a
Web框架(如Links)来说,似乎需要编写许多样板sql代码,如本例所示。Weblocks似乎更好一些,但是它似乎使用了一种OOP模型来处理数据,并且仍然需要为数据库中的每个表手动编写代码,如本例所示。我想您使用了一些代码生成来编写这些映射函数,但这似乎绝对不像lisp。1 @( H  o: \- r) _- M. {5 ?
(请注意,我并未非常仔细地查看Weblocks或Links,可能只是误解了它们的用法)。
, w3 A5 U; g' ^) p$ ^# L- U所以问题是,对于Web应用程序的数据库访问部分(我认为这是相当大的),或者对于其他需要与sql数据库进行接口的开发,我们似乎被迫遵循以下路径之一:0 g  N! p8 m% g% Q& a( Q- P4 M
[ol]不要使用函数式编程
$ i5 T/ {5 R, H8 O0 l% j以一种烦人,轻松的方式访问数据,其中涉及手动编写许多SQL或类似SQL的代码ala链接4 m& k8 ?1 V9 f; l0 I
将我们的函数式语言强制为伪OOP范式,从而消除了真正的函数式编程的某些优雅和稳定性。
8 ~: v3 Z+ p* n, X[/ol]
5 d5 g) ~# i. m显然,这些选择都不是理想的。是否找到了规避这些问题的方法?这里真的有一个问题吗?* \- L( p" O8 z
注意:我个人最熟悉FP方面的LISP,因此,如果您要提供任何示例并了解多种FP语言,则Lisp可能是首选语言5 B/ `$ w7 G" h3 ~  a3 g2 j& ~2 Z
                # o7 B; t% e2 O' O7 E
解决方案:# @" @( b0 _4 I
               
; ~/ r) t0 c1 G( M) e: G
5 @" p+ a9 H& f+ j# _0 H# Z$ d. \, ^3 D+ W% \
                首先,我不会说CLOS(通用Lisp对象系统)是“ pseudo-OO”。这是一流的OO。  j1 M1 O6 G% O6 }4 Y
第二,我相信您应该使用适合您需求的范例。* B$ j# }# y3 o, a9 o8 I8 H; Z6 }
当函数是数据流并且确实不需要状态时,就不能无状态地存储数据。
/ _" N0 s8 ~' J- z如果您混合了几种需求,请混合使用您的范例。不要限制自己仅使用工具箱的右下角。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则