最も頻繁に使用される設計パターンは何ですか?[閉まっている]


24

どのデザインパターンが最も人気があると思いますか?


どちらも、可能ならば...
タマラWijsman

「ポリモーフィズムの代わりに切り替える」?
mlvljr

@Bigown:最も気に入った回答を「受け入れる」必要があります。答えが気に入らない場合は、賞金を提供してください。
マクニール

2
建設的でないとして閉会することに投票-これは基本的に世論調査です。誰かが引用する実証的研究がない限り、答えはすべて推測またはお気に入り(または非お気に入り)であり、投票は個人的な感情を反映します。最終結果は、深さのないデザインパターンのリストになります。したがって、建設的ではありません。
スティーブンA.ロウ

@スティーブン:ジェイは泥のビッグボールで正しいと確信しています。:-)
タマラウィスマン

回答:


39

最も一般的なのは「泥の大玉」だと確信しています。残念ながら私たち全員にとって。
http://en.wikipedia.org/wiki/Big_ball_of_mud


新しいプロジェクトのすべてがうまく構造化文書が、期限が近づくとされて起動したときには、泥の大きなボールのようにすべて終了するまで、同意
アルトゥーロ・モリーナ

3
@Arturo-それが理由の1つです。その他:1)経験の浅いプログラマーによって開始された小さなプロジェクトは、予想外の成功を収め、当初の目的を超えて成長します。2)経験の浅いプログラマーがメンテナンスに割り当てられる傾向があり、元のアーキテクチャーのガイダンスや理解がないため、ハッキングを行っただけで、システムが古くなると悪化します。3)チームが間違ったテクノロジー、または慣れ親しんでいない新しいテクノロジーを使用して、新しいプロジェクトでそれをあまり使用せず、締め切り前にクレーターが発生する:)
Jay

1
笑-あなたにもっとポイントを追加できるなら、私はそうします。素晴らしい(そして悲しい)観察。
luis.espinal

25

MVCとそのバリエーションは、間違いなくトップデザインパターンの1つです。


2
私は、OPの質問はかなりばかげていると言っていました(私はまだそう信じています)ただし、あなたの答えはほぼ正しいIMOです。一貫して使用されるパターン(およびそのバリエーション)が1つある場合は、これです。あなたの良い答えのために+1。
luis.espinal

21

Gang-of-Fourデザインパターンについて話している場合は、Singletonと言わなければなりません。これは非常に悲しい状況です。まるでプログラマーがデザインパターンの魔法について耳にし、最初のパターンの後に停止するかのようです。

アーキテクチャスタイルのパターン(つまり、複数のクラスまたはレイヤーにまたがるデザインパターン)について話している場合、MVCと言わなければなりません。他のいくつかの一般的なものは、リポジトリパターンとサービスロケータです。


2
多くの人がシングルトンをアンチパターンだと考えるとさらに悲しいです!
RichardOD

1
@RichardOD、そうではないときに人々がそれを1つと考えるのは悲しいですか、それともアンチパターンであるときに人々がそれを使用するのは悲しいですか?
マットオレニック

私が言いたいことは、とても人気があるのは悲しいことです-それはインタビューのお気に入りのようです。前回インタビューを受けたとき、シングルトンをどのようにコーディングするか尋ねられましたが、私の応答は、UnityのようなIoCコンテナーを使用して処理しないことです。
RichardOD

@RichardOD-アンチパターンと見なされるのはシングルトンではありません。アンチパターンであるのは、それを悪用することです。実際にシングルトンを要求/必要とするケースは非常に少なく、リソースの粒度を制御するコンテナを使用する環境では、それらは不要です。たとえば、最新のJavaコードベースにシングルトンが表示されている場合、それは通常、アンチパターンの使用に対する赤い旗です(シングルトンパターン自体ではありません)
luis.espinal

@Jaco-私はあなたから別のテイクを持っているでしょう。複合、戦略、テンプレート(およびそれらの複数の生まれ変わり)は、特に過去10年ほどにわたって継承よりも構造的な構成に焦点を合わせてきたため、シングルトンよりもはるかに普及していると思います。
luis.espinal


7

デコレータ

構成時に実行時にオブジェクトに機能を追加します。私の個人的なお気に入り。

編集:また、ファクトリはおそらく最も一般的なものの1つです。


5

ファサード

TwitterやSO APIなどのRESTインターフェイスを考えてください。少なくともツイッターの場合、恐ろしく複雑になる可能性のあるバックエンドの束を隠しています。

@apkluskのツイートが保存されているdbテーブルを気にしますか?そして、それは高速キャッシュを持っていること?また、@ shemnonの読者が非常に少ないため、ツイートは常にメモリ不足です。それがファサードの魔法です。


5

戦略パターン

依存性注入を使用したことがある場合は、戦略パターンを使用しています。


合意、テンプレートとコンポジットに加えた戦略(およびそれらの複数のバリエーションと組み合わせ。)
luis.espinal

5

なぜ誰もまだイテレータに言及していないのですか?特に、複雑なデータ構造を構成するすべてのマップで...私が最も使用するマップです。それとも、再実装するパターンについて話しているのでしょうか?


3

私の経験では、Factoryパターンについて言及している人が誰もいなかったことに驚いています。最初でなければ、おそらくシングルトンが最初でなければなりません。これはすぐ近くになると思いました。


3

以前の答えに加えて、継承されたプロジェクトの獣から今日遭遇した新しいものを追加します。

コピーペースト

デバッグ中に、同じような名前の2つの関数を呼び出すコードに遭遇しました。

if(x)
   Func1
else
   Func2

Func1とFunc2には同じパラメーターがありました。それらを引き出して比較したところ、Func1がFunc3を呼び出し、Func2がFunc4を呼び出すことを除いて、100%同じです。私はそれらを引き出し、それらを比較しました。1行を除いて100%同じ。そのため、以前のプログラマーは、フラグパラメーターを追加する代わりに、正確に1か所で使用される2つのプライベート関数に2つの50行ネスト関数をコピーして貼り付けることにしました。泣きたい。


2

Gang-of-Fourデザインパターンについて言えば、Observerパターンを使用しないプログラムは考えられません。また、Jacoが述べたように、Singletonも非常によく使用されますが、残念ながらハンマーになりました(完全に必要ではない場合でも、プログラマーはそれを使用します)。


1
面白いですが、シングルトンを使用する必要はありませんでした。グローバル状態を保持する場所が必要な場合は、構成ファイルに保存し、通常のクラスを使用してアクセスします。
ロバートハーベイ

もちろん、それらの場合、それは必要ありません...同期して、そしてスレッドセーフで何らかの仕事をするために1つのオブジェクトが本当に必要な場合はどうでしょうか。シングルトンはいくつかの静的変数の状態を保持するために、それはなど、行うには本当の仕事と実際のオブジェクトのではありません
クリスティアン

それが必要だと思ったのは、データベース接続だけです。とは言っても、このプロジェクトのほぼすべての「サービス」(読み取り:ファクトリーに類似)クラスは、PHP $_SESSION変数に格納されたシングルトンです。
タルカ


1

誰も「ビルダー」と言っていないことに驚いています。または「アダプター」。それらはおそらく他のいくつかのものほどエキゾチックではありませんが、私は常にそれらを使用しています。FactoryとAbstract Factoryも非常に一般的です(ただし、すでに使用されています)。




0

ソフトウェア設計レベルでは、Composite、Strategy、およびTemplate(および、より小規模にはFactory)が最も広く使用されていると主張します。過去10年ほどの間、OO設計を使用してシステムを構築する場合、継承よりも合成の方が好まれていました。その結果、上記のパターンの組み合わせは、他のすべてのIMOよりもはるかに重要な役割を果たします。

アーキテクチャ的には、エンタープライズではMVCを、物事の組み込み側ではステートマシンに基づいたパターンを主張します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.