10
データベースと関数型プログラミングは対立していますか?
私はしばらくの間Web開発者でしたが、最近、関数型プログラミングの学習を始めました。他の人のように、私はこれらの概念の多くを私の仕事に適用するいくつかの重大な問題を抱えてきました。私にとって、これの主な理由は、FPのステートレスを維持するという目標の間の矛盾が、私が行ったほとんどのWeb開発作業が非常にデータ中心のデータベースに強く結び付けられているという事実とかなり矛盾しているように見えることです。 OOP側でより生産的な開発者になった1つのことは、.GeneのMyGeneration d00dads、PerlのClass :: DBI、RubyのActiveRecordなどのオブジェクトリレーショナルマッパーの発見でした。終日、INSERTステートメントとSELECTステートメントを記述したり、オブジェクトとしてデータを簡単に操作したりすることに集中できます。もちろん、SQLクエリを作成することもできましたが、SQLクエリの能力が必要な場合はそれを実行できましたが、それ以外の場合は裏側でうまく抽象化されました。 さて、関数型プログラミングに移ると、リンクのようなFP Webフレームワークの多くでは、この例のように、ボイラープレートSQLコードを大量に記述する必要があるようです。Weblocksは少し優れているように見えますが、データを操作するために一種のOOPモデルを使用しているようで、この例のように、データベース内のテーブルごとにコードを手動で作成する必要があります。いくつかのコード生成を使用してこれらのマッピング関数を記述していると思いますが、それは明らかにLispに似ていません。 (私はWeblocksやLinksを非常に詳しく見ていないことに注意してください。それらがどのように使用されているのか誤解しているだけかもしれません)。 したがって、問題は、Webアプリケーションのデータベースアクセス部分(かなり大きいと思います)、またはSQLデータベースとのインターフェイスを必要とするその他の開発では、次のいずれかの方法を強制されるようです。 関数型プログラミングを使用しない 大量のSQLまたはSQLに似たコードをリンクを手動で作成することを含む、煩わしい、抽象化されていない方法でデータにアクセスする 関数型言語を強制的に擬似OOPパラダイムにし、真の関数型プログラミングの優雅さと安定性の一部を取り除きます。 明らかに、これらのオプションはどれも理想的ではないようです。これらの問題を回避する方法を見つけましたか?ここに本当に問題がありますか? 注:私は個人的にFPの前にあるLISPに最も精通しているので、例を挙げて複数のFP言語を知りたい場合は、おそらくlispが最適な言語でしょう PS:Web開発の他の側面に固有の問題については、この質問を参照してください。