1. ホーム
  2. sql

[解決済み] データベースと関数型プログラミングは対立するのか?

2022-07-05 02:20:28

質問

私はしばらくの間ウェブ開発者でしたが、最近、関数型プログラミングをいくつか学び始めました。 他の人と同じように、私はこれらの概念の多くを私の専門的な仕事に適用することに大きな問題がありました。 私にとって、その主な理由は、ステートレスであり続けるという FP の目標が、私が行ってきたほとんどの Web 開発作業が非常にデータ中心であるデータベースに大きく結びついているという事実とかなり対立しているように思えるからです。

私が OOP 側でより生産的な開発者になれた理由のひとつは、.Net の MyGeneration d00dads、perl の Class::DBI、ruby の ActiveRecord などのオブジェクト リレーショナル マッパーを発見したことです。 これによって、一日中insert文やselect文を書くことから解放され、データをオブジェクトとして簡単に扱うことに集中できるようになりました。もちろん、SQL クエリの力が必要なときはまだ書くことができますが、それ以外は舞台裏でうまく抽象化されています。

さて、関数型プログラミングに目を向けると、LinksのようなFPウェブフレームワークの多くは、次のような定型的なSQLコードをたくさん書く必要があるように思えます。 この例 . Weblocksは少しましなようですが、データを扱うのに一種のOOPモデルを使用しているようで、以下のようにデータベースの各テーブルに対して手動でコードを書かなければなりません。 この例 . マッピング関数を書くために何らかのコード生成をするのでしょうが、それは明らかにLispらしくないように思えます。

(注:私はWeblocksやLinksをあまり詳しく見ていないので、それらがどのように使われているかを誤解しているだけかもしれません)。

そこで質問ですが、Web アプリケーションのデータベース アクセス部分 (これはかなり大きいと思います) や、SQL データベースとのインターフェイスを必要とするその他の開発では、次のいずれかの道を歩まざるを得ないようです。

  1. 関数型プログラミングを使用しない
  2. データへのアクセスは、多くのSQLやSQLライクなコードを手作業で書かなければならないような、抽象化されていない厄介な方法である ala Links
  3. 関数型言語を擬似OOPパラダイムに強制するため、真の関数型プログラミングの優雅さと安定性の一部を取り除く。

明らかに、これらのオプションはどれも理想的とは思えません。 これらの問題を回避する方法を見つけた方はいらっしゃいますか? 本当にここで問題になっているのでしょうか?

注:私自身はFPの分野ではLISPに最も精通しているので、もしあなたが何か例を挙げたいと思っていて、複数のFP言語を知っているならば、おそらくlispが望ましい選択でしょう。

追記: ウェブ開発の他の側面に特化した問題については、以下を参照してください。 この質問 .

どのように解決するのですか?

まず、CLOS (Common Lisp Object System) が擬似OOであるとは言いません。 これは第一級のOOです。

第二に、私は、自分のニーズに合ったパラダイムを使うべきだと考えています。

データをステートレスで保存することはできません。一方、関数はデータの流れであり、ステートはあまり必要ではありません。

いくつかのニーズが混在している場合、パラダイムを混ぜ合わせましょう。 ツールボックスの右下だけを使うように自分を制限しないでください。