ソフトウェアデザインパターンを使用しない場合はどうなりますか?[閉まっている]


17

ソフトウェアデザインパターンを使用しない場合、どのような問題に直面する可能性がありますか?標準のオブジェクト指向技術を使用して設計にアプローチする際の問題について教えてください。


24
かなり明らかなソフトウェア設計パターンがあります。あなたはそれらを使用していないことを確認するためにそれらをすべてよく知っている必要があります-おそらくあなたはそれらを使用するかもしれないほど十分でしょう!
ジェームズマクロード

18
@JamesMcLeodのサイドポイントとして、多くの「デザインパターン」は非常に明白であり、とにかく誰もがすることです。ではなぜ彼らに名前をつけるのですか?コミュニケーションを目的としています。「私はXパターンを使用しています」は、もう一方の端が行くことを期待してソリューションを説明するよりもはるかに大きな意味密度を持っています。
-Phoshi

6
@AJMansfield私が見た中で最悪のコードのいくつかは、設計パターンへの過度の熱意を含んでいた。
エリックReppen

5
@ErikReppen設計パターンの乱用のせいは、それをした人にあるべきです。私の観点から見ると、中心的な問題は設計パターンそのものではなく、過剰な一般化(部分的にアーキテクチャの監視不足による)と過剰なエンジニアリング(時には委員会による)にあります。
rwong

5
「デザインパターン」は用語集であり、テクニックではありません。
カズドラゴン

回答:


76

ポイントがありません。

世界に構造パターンが存在するように、ソフトウェアデザインを行う場合、デザインパターンは本質的に存在します。物の名前を知らなくても、最終的には特定の物理構造が特定の問題に適していることがわかります。木材/金属棒などの三角形は、非常に安定した構造ですが、平面上にあることがわかります。正方形のレンガには、丸いレンガよりも特定の利点があることがわかります...

同様に、特定のソフトウェア構造は何らかの方法で一意または最適です。最終的にそれらを見つけ、それらの名前を知っているかどうかに関係なくそれらを使用します。それが設計パターンの核心です-これらは、経験豊富なプログラマーがとにかく知っていて使用しているこれらの構造の名前です。これにより、プログラマーはより均一かつ簡潔にコミュニケーションを行うことができます。また、プログラマはパターンの概念をより意識的に考えることができます。

だから私が作ろうとしている2つの重要なポイント:

  1. デザインパターンを使用することはできませ
  2. 使用しているものの名​​前がわからないため、チームでの作業が困難になります。

12
+1:まったく正しい。デザインパターンが知られるようになる前、または人気が出る前にオブジェクト指向の開発を開始しました。はい、我々はまた、物事を発明したように、あなたがStrategyパターンのように見えるの明るい光の一種でそれを細め、工場、シングルトンと何か。ポイントは、今、私は工場はOKだったけど、シングルトンがひどく行われた、より良い行われている可能性があり、何を知っているデザインパターンを知っていることがあるかもしれません Strategyパターンは、はるかに良い、それが実際にあればあったであろうしていていた Strategyパターン。
バイナリの心配

3
...デザインパターンについて学習し、それらを正しく使用する方法を学習することで、時間を大幅に節約できます。それを吸い込んでパターンを学び、彼らがあなたのために働くときにそれらを使用し、そうでないときは使用しないでください。
バイナリウォーリアー

1
そして、これはパターンに関する私の見解を正確に要約しています。彼らはあなたがしていることを他の人と伝えるための素晴らしいツールです。ただし、すべての問題が異なるため、正確にビルドすることはできません。しかし、それらは要点であり、方向性であり、従うべきガイドラインの大まかなセットであり、あなたがやっていることを他の人に簡単に説明することができます。
マットD

物理構造との比較の場合は+1。「トラス」が崩壊しないことを実験して期待するのではなく、屋根の荷重を支えるのに適した構造であることを既に知っている場合、家を建てるのに役立つと付け加えます。
kdgregory

39

過去を思い出せない人は、過去を繰り返すと非難されます。

設計によって引き起こされた問題以外の特定の問題に直面することはありません。そして、気づかずにパターンを使用することになり、自分でパターンを理解するのに時間を費やしただけです。事前にパターンを知っておくことで、デザインでそれらを見つけやすくなり、多くの個人によって証明されているという大きな利点が得られます。

今日開発されているものはすべて以前の知識に基づいているため、無視しても意味がありません。数百年前に大聖堂を建てた人々が直面している問題を知らずに、今日の超高層ビルを想像してみてください。


10
「すべての引用には、反対の引用符があります。」「本当に未来に値するなら、過去をばらばらに引き裂かなければならない。」(OKの1つはヒトラーだったので、おそらく無視するのがベストです。...)
ラッセル

20

ソフトウェアデザインパターンを使用しない場合、どのような問題に直面する可能性がありますか?

ソフトウェアを作成できないという問題が発生します。

変数は設計パターンです。

メソッドは設計パターンです。

演算子(加算、減算など)は設計パターンです。

ステートメントはデザインパターンです。

値は設計パターンです。

参照はデザインパターンです。

式はデザインパターンです。

クラスはデザインパターンです。

...

プログラミングで常に行うことはすべて設計パターンです。ほとんどの場合、パターンは思考に深く染み込んでおり、「デザインパターン」と考えるのをやめています。「シングルトンパターン」などのように学習しなければならないことは、使用している言語に(まだ)焼き付けられていない単なるパターンです。

標準のオブジェクト指向技術を使用して設計にアプローチする際の問題について教えてください。

いいえ。この質問の意味がわかりません。デザインパターン「標準的なオブジェクト指向技術」です。これがデザインパターンです。設計パターンは、特定の問題、特に(必ずしもではない)オブジェクト指向言語の問題を解決するための標準的な手法です。


1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.-これは(ほぼ)デザインパターンの定義です。言語自体の制限を克服するために使用される、他のユーザーと簡単にやり取りできる柔軟で再利用可能なコード構造です。一度言語の一部になると、デザインパターンではなくなります。
イズカタ

1
@Izkata:つまり、C#ではイベントの形でオブザーバーパターンが言語に組み込まれているため、C#ではオブザーバーパターンは不可能だという立場ですか?それはばかげている。パターンに関連する言語固有のビットは、言語でパターンを実装する標準的な方法です。もちろん、デザインパターンは、それらを直接サポートする言語で使用できます。それが直接それらをサポートすることの全体的なポイントです!
エリックリッパー

私は決して私が暗示しようとしていた、不可能言わなかっ不要たとえばJavaにはイベントがないため、デザインパターンを使用してイベントをシミュレートします。
イズカタ

@Izkata:混乱しています。パターンが言語の一部になると、それはもはやパターンではなくなると言いました。だから、「オブザーバーパターン」パターンであるJavaではなくはない C#でのパターンは?
エリックリッパー

1
別の言い方をすれば、デザインパターンは、英語で説明できる以上にプログラマが行うものです。定義に完全に同意するかどうかはわかりませんが、それはあなたが言っていることを正確に反映しており、少なくともパターンとしてカウントされる主観的な判断がないという利点があります。それはプログラマーが何をするかの分析の特性であり、もちろん、プログラマーが分析できない方法で行動することは不可能です:
スティーブジェソップ

4

デザインパターンのポイントを理解することは、レターに使用するよりも重要です。少なくとも私が慣れ親しんでいる言語パラダイムでは、いくつかのパターンは馬鹿げています。IMOは、デザインパターンを盲目的に単純に使用し、実際にそれらを理解せずに単純に使用するプログラマーです。しかし、アイデアに慣れて、価値があるかどうかを自分で決める人は、どちらよりもはるかに強力なプログラマになる可能性があります。

とは言っても、フライウェイトのポイントが何なのか、私には!@#$ ingのアイデアはありません。(多くの助けになった別のウィキペディアのエントリのコメントを参照してください)

ウィキペディアのデザインパターンに関するエントリをお勧めします。非常に簡潔かつ明確に書かれています。与えられたデザインパターンに悩まされるかもしれない理由を知るのに非常に役立ちます。私は個人的には最も単純なものが最も有用であると思う傾向があり、自分のニーズに合わせてパターンの特定の実装を変更することを二度と考えません。

それらは青写真ではなくアイデアです。一部の言語では、まったく良いアイデアではありません。他の人では、それらは、言語の設計上の弱点を克服するための手掛かりであると正しく見られています。とにかく、あなた自身の好ましい解決策を決定する前に、それらを調べて、彼らが克服しようとしている課題を理解しようとすることは害になりません。

どのような問題に直面しますか?あなたがすでにすべてを理解しているプログラミングの天才でない限り、機会を逃し、必要以上に問題に時間を費やすかもしれません。人気のあるプログラミングアイデアの批判的な目を維持することは重要ですが、人々が解決しようとしていることを理解することは決して害になりません。


2
フライウェイト(フライホイールではありません)。ウィキペディアの記事の最初の段落(最初の段落のみ)を読んでから、Integer.valueOf(int)を見て、これが一般的な値の新しい整数の作成を回避する回数を検討します。

2
@MichaelTそしていまいましい。それは私が見た何よりもはるかに良いことを綴りました。ありがとう。
エリックReppen

ほとんどのデザインパターンの手順で見られる問題は、大きなプロジェクトビューを表示しようとすることです(GoFの本は、小さなタスクではなく、ワードプロセッサの作成に関するものです)。ただし、非常に小さな(ほとんど「些細な」)ものに適用されることもあります。7行のコードは、誰もが常に使用しているもので、フライウェイトを明確に説明できます。大きなプロジェクトや不自然な例よりもはるかに理解しやすい。

1
@MichaelT私にとっても、プロトタイプを継承するためにプロトタイプの継承とクロージャーが通常使用されるプライマリ言語であるJavaScriptでそのアイデアがすぐに使用されない場合でも、一般的にコードを書く際に何かを少し明確にすることが役立つ良い例です問題。そのa-haの瞬間を経験することで、関連するいくつかのアイデアが得られました。
エリックReppen

2

あなたが直面する主な問題は、あなたが車輪を再発明することです。それらは、頻繁に、予測可能な方法で表示されるため、パターンと呼ばれます。


0

設計パターンに従ったとしても、最終的に悪い設計になる可能性があります。デザインパターンは自然なものであり、最終的にデザインでそのフレーバーを使用することになります。どのパターンも使用しないように、一生懸命努力する必要があります。デザインパターンを非難する理由はありません。より重要なことは、ニーズに合った適切なパターンを選択することです。


-1

あなたはそれを気付かずに常にデザインパターンを使用しています。一般的な言語の標準ライブラリの多くは、設計パターンを考慮して設計されています。例はFileReaderデコレータデザインパターンを使用して設計されたJavaのライブラリです。自分のコードについて話すと、(ほとんどの場合)デザインパターンを使用する必要はありません。デザインパターンは「よく発生する問題に対する再利用可能なソリューション」です。つまり、よりクリーンで保守性の高いコードを書くのに役立ちます。したがって、スパゲッティコードで終わることを避けたいというのはあなた次第です。

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