Ich denke, hier spielen drei Faktoren eine Rolle.
Mangel an kritischer Masse
Erstens ist ein Muster im Grunde nichts anderes, als einem Code einen Namen zu geben, der einen bestimmten Teil der Funktionalität implementiert. Der Name bietet nur dann einen echten Nutzen, wenn Sie sich darauf verlassen können, dass jeder weiß, was der Name bedeutet. Wenn er nur den Namen verwendet, versteht er sofort eine Menge über den Code.
Patterns haben jedoch nie die kritische Masse erreicht, die sie dazu benötigten. Eher das Gegenteil, AAMOF. Ich bin mir ziemlich sicher, dass ich in den 20 (oder so) Jahren seit Erscheinen des GoF-Buches nicht ein Dutzend Konversationen gesehen habe, in denen alle Beteiligten wirklich genug Entwurfsmuster kannten, um die Kommunikation zu verbessern.
Um es etwas kurioser auszudrücken: Designmuster scheiterten speziell daran, dass sie scheiterten.
Zu viele Muster
Ich denke, der zweite Hauptfaktor ist, dass sie anfangs, wenn überhaupt, zu viele Muster benannt haben. In einer Reihe von Fällen sind die Unterschiede zwischen den Mustern hinreichend subtil, so dass es nahezu unmöglich ist, mit wirklicher Gewissheit zu sagen, ob eine bestimmte Klasse zu dem einen oder anderen Muster passt (oder vielleicht zu beiden - oder vielleicht auch zu keinem).
Die Absicht war, dass Sie auf einer höheren Ebene über Code sprechen können. Sie können einen relativ großen Codeabschnitt als Implementierung eines bestimmten Musters bezeichnen. Wenn Sie einfach diesen vordefinierten Namen verwenden, weiß normalerweise jeder, der zuhört, so viel, wie er sich um diesen Code kümmert, sodass Sie zum nächsten Schritt übergehen können.
Die Realität sieht eher anders aus. Nehmen wir an, Sie sind in einer Besprechung und sagen ihnen, dass es sich bei dieser bestimmten Klasse um eine Fassade handelt. Die Hälfte der Teilnehmer des Treffens wusste entweder nie oder hat längst vergessen, was das genau bedeutet. Einer von ihnen bittet Sie, ihn an die genauen Unterschiede zwischen einer Fassade und beispielsweise einem Stellvertreter zu erinnern. Oh, und die paar Leute, die wirklich Muster kennen, verbringen den Rest des Meetings damit zu diskutieren, ob dies wirklich als Fassade oder "nur" als Adapter angesehen werden sollte (wobei dieser eine Mann immer noch darauf besteht, dass es ihm wie ein Stellvertreter vorkommt).
In Anbetracht dessen, dass Sie wirklich nur sagen wollten: "Dieser Code ist nicht sehr interessant. Machen wir weiter." Der Versuch, den Namen eines Musters zu verwenden, hat nur Ablenkung und keinen Wert.
Mangel an Interesse
Die meisten Entwurfsmuster beschäftigen sich nicht wirklich mit den interessanten Teilen des Codes. Sie beschäftigen sich mit Dingen wie: "Wie erstelle ich diese Objekte?" Und "Wie bringe ich dieses Objekt dazu, mit diesem zu sprechen?" Das Auswendiglernen von Musternamen für diese (sowie die oben genannten Argumente über Details und dergleichen) bedeutet einfach, viel Energie in Dinge zu stecken, die den meisten Programmierern einfach nicht so wichtig sind.
Um es etwas anders: Muster beschäftigen sich mit den Dingen , die die gleiche zwischen vielen Programmen sind - aber was wirklich ein Programm interessant macht , ist , wie es ist anders aus anderen Programmen.
Zusammenfassung
Entwurfsmuster sind fehlgeschlagen, weil:
- Sie erreichten keine kritische Masse.
- Die Unterscheidung der Muster reichte nicht aus, um Klarheit zu gewährleisten.
- Sie befassten sich hauptsächlich mit Codeteilen, die sowieso fast niemanden wirklich kümmerten.