ここでは、3つの要因が関係していると思います。
クリティカルマスの欠如
まず、パターンは基本的に、特定の「チャンク」機能を実装するコードに名前を付けることとほとんど同じです。名前が本当の価値を提供する唯一の方法は、名前の意味を知っているすべての人に頼ることができれば、名前を使用するだけで、コードについてすぐに多くのことを理解できることです。
パターンは、それを達成するために必要な臨界質量を決して確立しませんでした。それどころか、AAMOF。GoFの本が出版されてから20年ほどで、関係者全員がコミュニケーションを改善するのに十分なデザインパターンを実際に知っていた会話を10個ほど見たことはないと確信しています。
少し古風な言い方をすれば、設計パターンは特に失敗したために失敗しました。
パターンが多すぎる
2番目の主な要因は、どちらかといえば、最初はあまりにも多くのパターンに名前を付けたことだと思います。かなりの数の場合、パターン間の違いは十分に微妙であるため、特定のクラスが1つのパターンに適合しているか(またはおそらく両方に適合しているのか、おそらく両方に適合していないのか)を確実に判断することはほとんど不可能です。
意図は、より高いレベルでコードについて話すことができるようになることでした。特定のパターンの実装として、かなり大きなコードのチャンクにラベルを付けることができます。事前に定義された名前を使用するだけで、聞いているすべての人は、通常、そのコードを気にしているのと同じくらい知っているので、次のことに移ることができます。
現実はほぼ反対になる傾向があります。会議中に、この特定のクラスがファサードであることを伝えてみましょう。会議の半分の人は、それが何を意味するのか正確に忘れてしまったか、ずっと忘れていました。そのうちの1人は、ファサードとプロキシなどの正確な違いを思い出させるように頼みます。ああ、本当にパターンを知っている二人は会議の残りの時間を費やして、これが本当にファサードであるか「単なる」アダプターであるかを議論します(その人はまだ彼のプロキシのようだと主張しています)。
あなたの意図は本当に「このコードはあまりおもしろくありません。先に進みましょう」と言っているだけであるため、パターンの名前を使用しようとすると、気が散ることになります。
興味の欠如
ほとんどのデザインパターンは、コードの興味深い部分を実際に処理しません。それらは、「これらのオブジェクトをどのように作成しますか?」、「どのようにしてこのオブジェクトをそのオブジェクトと対話させるのですか?」などのことを扱います。これらのパターン名(および前述の詳細などの引数)を記憶することは、ほとんどのプログラマーがあまり気にしないものに多くのエネルギーを注いでいるだけです。
少し違って言えば、パターンは多くのプログラム間で同じことを処理しますが、プログラムを本当に面白くするのは、他のプログラムとの違いです。
概要
次の理由で設計パターンが失敗しました。
- 彼らは臨界質量を達成できなかった。
- パターン間の区別は、明瞭さを保証するのに不十分でした。
- 彼らはほとんどの場合、コードの一部をほとんど扱っていましたが、とにかく誰も気にしませんでした。