ソフトウェアデザインパターン
ソフトウェアデザインパターンとは、一般的に繰り返し発生する設計上の問題に対する、名前が付けられた再利用可能な解決策であり、専門家の実践を、システム間で伝達、教育、適用できる形式で捉えたものです。
PaperMindでテーマを探す近日公開Find papers & topics
Tools & resources
Learn & explore
動画近日公開
Definition
デザインパターンとは、特定のコンテキスト内で繰り返し発生する設計上の問題に対する解決策を、参加する要素、それらの関係、および解決策が伴うトレードオフの観点から表現した、一般的で再利用可能な記述です。
Scope
このトピックでは、オブジェクト指向設計における古典的な生成、構造、および振る舞いのパターン、パターンの構造(名前、問題、解決策、結果)、パターンカタログとパターン言語、エンタープライズパターンと並行処理パターン、そして過剰設計のリスクを含むパターンの適切および不適切な使用法について扱います。
Core questions
- 標準的なパターンはどのような繰り返し発生する設計上の問題に対処しますか?
- 生成、構造、および振る舞いのパターンはどのように区別されますか?
- パターンはどのようにその問題、解決策、および結果を文書化しますか?
- パターンを適用することが役立つのはどのような場合で、不必要な複雑さを加えるのはどのような場合ですか?
Key theories
- 生成、構造、および振る舞いのパターン
- Gang of Fourカタログは、パターンを用途別に分類しています。生成パターンはオブジェクトのインスタンス化を抽象化し、構造パターンはオブジェクトをより大きな構造に構成し、振る舞いパターンは責任を割り当て、コミュニケーションを管理します。
- 設計経験として捉えられたパターン
- パターンは専門家の解決策を体系化し、共通の語彙を提供することで、設計議論のレベルを高めます。パターン言語はパターンを関連付け、ある問題を解決することが次の問題につながるようにし、全体的な設計を導きます。
Clinical relevance
パターンは、実証済みの構造を再利用し、チームに共通の語彙を提供することで、コミュニケーションと設計の品質を向上させます。しかし、判断なしに適用すると、間接性と複雑さを招く可能性があるため、その価値はパターンが実際の問題に合致しているかどうかにかかっています。
History
クリストファー・アレクサンダーの建築パターン言語に触発され、ソフトウェアコミュニティは1994年のGang of Fourカタログによってデザインパターンを体系化しました。その後の研究により、パターンはアーキテクチャ、並行処理、エンタープライズアプリケーションにまで拡張され、パターンは設計教育の主要な要素となりました。
Debates
- パターンは知恵か、それとも言語の欠陥の兆候か
- 特定のパターンの必要性は言語機能の欠如を示しており、パターンの過剰使用は過剰設計につながると主張する人もいます。一方で、パターンはどの言語にも依存しない永続的な設計語彙であると見なす人もいます。
Key figures
- Erich Gamma
- Richard Helm
- Ralph Johnson
- John Vlissides
- Martin Fowler
Related topics
Seminal works
- gamma1994
- buschmann1996
- fowler2002
Frequently asked questions
- デザインパターンは特定のプログラミング言語に縛られていますか?
- 古典的なパターンはオブジェクト指向の用語で記述され、特定の言語で例示されていますが、その概念は言語に依存しません。パターンの実現方法は様々であり、ファーストクラス関数やその他の機能を持つ言語では、一部のパターンは些細なものになったり、不要になったりします。
- デザインパターンの使いすぎは有害になることがありますか?
- はい、あります。より単純な解決策で十分な場合にパターンを強制すると、間接性と認知的負荷が増大します。パターンは、デフォルトのスタイルとしてではなく、設計における実際の繰り返し発生する問題を解決するために適用されるべきです。