大規模な機能プログラミングアプリケーションの作成に一般的に使用される特定のワークフローまたは設計パターンはありますか?[閉まっている]


13

Clojureをしばらく使ってきましたが、重要なプロジェクトでは使用していません。基本的に、構文といくつかのイディオムに慣れてきました。OOPのバックグラウンドから来て、Clojureが私が非常によく見た最初の関数型言語であるため、私は当然、物事の関数型の方法にそれほど満足していません。

とはいえ、大規模な機能アプリケーションの作成に共通する特定のワークフローやデザインパターンはありますか 「実際に」関数型プログラミングの使用を開始したいのですが、現在の専門知識の不足により、大失敗に終わるのではないかと心配しています。

「4つのギャング」はOOプログラマーにとって非常に標準ですが、機能的なパラダイムにより向けられた類似のものはありますか?私が見つけたほとんどのリソースには、優れたプログラミングナゲットがありますが、一歩踏み込んで、より広範な、よりアーキテクチャ的な外観を与えることはできません。


6
GOFパターンの一部は、機能プログラミングが既に提供しているものに対するOO言語での回避策にすぎません。stackoverflow.com/q/327955
Robert Harveyを



この議論では、GoF / OOP固有のパターンに焦点を合わせすぎていると思います。誰でも実際の関数型プログラミング固有のパターンを投稿できますか(関数型言語でのGoFの単純さを証明しようとするだけではありません)?
ダニエルB

回答:


3

この種のパターンは通常、壊れた、不適合な基礎モデルの症状です。

OOPは設計上壊れており、ほとんどのアプリケーションには適していないため、いわゆる「パターン」であふれています。機能モデルは(ほんの少し)より柔軟であり、「パターン」の必要性はそれほど明白ではありません。

特定の問題ドメインごとにDSLを使用または作成する(関数型プログラマにとっては自然な)言語指向のアプローチを適用し始めると、常に適切なモデルを採用しているため、パターンがまったく表示されないことがわかります。問題の説明。

もちろん、いくつかの高レベルの「パターン」または「レシピ」は、非常に抽象的でクリーンで純粋な数学でも避けられませんが、GoFパターンとは種類が異なり、抽象化のレベルも異なります。たとえば、モナドは便利です。


最後の2段落の+1、私はそれがスポットだと思います。OOPについては、特定の問題(GoFのような低レベルのパターンが存在するようになる)にしばしば適用される汎用ツールであるという事実以外に、壊れたと呼ばれる理由について興味があります。簡単に説明したり、意見をまとめたリンクを投稿したりできますか?
ダニエルB

@ DanielB、OOP自体に問題はありませんが、通常の適用方法は完全に壊れています。このモデルは現実世界の問題のほんの一部にしか適合しません(適切に適用すると本当にそこに輝きます)が、残りの部分には適合させるためにすべての松葉杖とダクトテープが必要です。たとえば、programmers.stackexchange.com / questions / 52608 /…で私の回答を参照してください。
SKロジック

OK、私は同じページにいると思います。実際、私は以前にこの正確な質問を一度行ったことがありますが、それについては申し訳ありません。
ダニエルB

-3

私見では、デザインパターンはセマンティックです。パターンを理解したことを確認するためだけに、MVCを使用して古いアプリの一部を書き直したことを覚えています。しかし、最終的には、MVCから元のコードに対して何も得られませんでした。

ただし、元のコードをより大きな開発環境に適用し、この特定の方法に問題があることを誰かに伝えるとしたら、その開発者が問題を追跡するのは難しいでしょう。ただし、何らかの理由でContractControllerが台無しになったと言ったら、どこから始めればよいかが正確にわかります。

設計パターンは素晴らしい...しかし、私が言ったように、それらは意味論的だと思う!

編集:あなたの伝道者のタイプは私をクラックします。MVC(または他のデザインパターン)なしで何かが開発されたのはどうしてですか!


2
意味論(sɪˈmæntɪk)— adj 1.意味の、またはそれに関連する、または異なる単語または記号の意味の区別から生じる2.意味論の、または関連する(意味の研究)3.形式理論の解釈に関係する論理、真理値表が知覚的接続詞のアカウントとして与えられているように
ロバートハーヴェイ

+1-私のポイントは、デザインパターンは単にコミュニケーションの手段であるということでした!
-aserwin

設計パターンは単なるコミュニケーションの手段ではありません。それらは具体的でよく理解されたレシピであり、ソフトウェアに実装して特定の一般的な問題を解決できます。
ロバートハーベイ

それは本が言うことです。しかし、それなしでは解決できなかった設計パターンを通じて、実際に問題を解決したことはありません。私が自分の経験で気づいた唯一の利点は、コードについて互いに話すことができることです!;)
aserwin

1
編集について:では、新しいコードを書くたびに車輪を再発明したいと思いますか?
ロバートハーベイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.