[解決済み] データベースと関数型プログラミングは対立するのか?
質問
私はしばらくの間ウェブ開発者でしたが、最近、関数型プログラミングをいくつか学び始めました。 他の人と同じように、私はこれらの概念の多くを私の専門的な仕事に適用することに大きな問題がありました。 私にとって、その主な理由は、ステートレスであり続けるという FP の目標が、私が行ってきたほとんどの Web 開発作業が非常にデータ中心であるデータベースに大きく結びついているという事実とかなり対立しているように思えるからです。
私が OOP 側でより生産的な開発者になれた理由のひとつは、.Net の MyGeneration d00dads、perl の Class::DBI、ruby の ActiveRecord などのオブジェクト リレーショナル マッパーを発見したことです。 これによって、一日中insert文やselect文を書くことから解放され、データをオブジェクトとして簡単に扱うことに集中できるようになりました。もちろん、SQL クエリの力が必要なときはまだ書くことができますが、それ以外は舞台裏でうまく抽象化されています。
さて、関数型プログラミングに目を向けると、LinksのようなFPウェブフレームワークの多くは、次のような定型的なSQLコードをたくさん書く必要があるように思えます。 この例 . Weblocksは少しましなようですが、データを扱うのに一種のOOPモデルを使用しているようで、以下のようにデータベースの各テーブルに対して手動でコードを書かなければなりません。 この例 . マッピング関数を書くために何らかのコード生成をするのでしょうが、それは明らかにLispらしくないように思えます。
(注:私はWeblocksやLinksをあまり詳しく見ていないので、それらがどのように使われているかを誤解しているだけかもしれません)。
そこで質問ですが、Web アプリケーションのデータベース アクセス部分 (これはかなり大きいと思います) や、SQL データベースとのインターフェイスを必要とするその他の開発では、次のいずれかの道を歩まざるを得ないようです。
- 関数型プログラミングを使用しない
- データへのアクセスは、多くのSQLやSQLライクなコードを手作業で書かなければならないような、抽象化されていない厄介な方法である ala Links
- 関数型言語を擬似OOPパラダイムに強制するため、真の関数型プログラミングの優雅さと安定性の一部を取り除く。
明らかに、これらのオプションはどれも理想的とは思えません。 これらの問題を回避する方法を見つけた方はいらっしゃいますか? 本当にここで問題になっているのでしょうか?
注:私自身はFPの分野ではLISPに最も精通しているので、もしあなたが何か例を挙げたいと思っていて、複数のFP言語を知っているならば、おそらくlispが望ましい選択でしょう。
追記: ウェブ開発の他の側面に特化した問題については、以下を参照してください。 この質問 .
どのように解決するのですか?
まず、CLOS (Common Lisp Object System) が擬似OOであるとは言いません。 これは第一級のOOです。
第二に、私は、自分のニーズに合ったパラダイムを使うべきだと考えています。
データをステートレスで保存することはできません。一方、関数はデータの流れであり、ステートはあまり必要ではありません。
いくつかのニーズが混在している場合、パラダイムを混ぜ合わせましょう。 ツールボックスの右下だけを使うように自分を制限しないでください。
関連
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] 最初の行への結合方法
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】Haskellの入門編
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み] SQLサーバーで行を列に効率的に変換する