Myślę, że w grę wchodzą trzy czynniki.
Brak masy krytycznej
Po pierwsze, wzorzec to w zasadzie niewiele więcej niż nadanie nazwy kodowi, który implementuje określony „fragment” funkcjonalności. Jedynym sposobem, w jaki ta nazwa zapewnia prawdziwą wartość, jest to, że możesz polegać na tym, że wszyscy wiedzą, co to znaczy, więc po prostu używając nazwy, od razu rozumieją całkiem sporo o kodzie.
Jednak wzory nigdy nie ustanowiły masy krytycznej, której potrzebowali, aby to osiągnąć. Przeciwnie, AAMOF. W ciągu 20 (lub mniej więcej) lat, odkąd ukazała się książka GoF, jestem prawie pewien, że nie widziałem aż tuzina rozmów, w których wszyscy zaangażowani naprawdę znali wystarczająco dużo wzorców projektowych, aby poprawić komunikację.
Mówiąc nieco bardziej osobliwie: wzorce projektowe zawiodły, ponieważ zawiodły.
Zbyt wiele wzorów
Myślę, że drugim ważnym czynnikiem jest to, że początkowo nazwali zbyt wiele wzorów. W sporej liczbie przypadków różnice między wzorami są na tyle subtelne, że prawie niemożliwe jest stwierdzenie z prawdziwą pewnością, czy dana klasa pasuje do jednego lub drugiego wzoru (a może do obu - a może do żadnego).
Chodziło o to, abyś mógł mówić o kodzie na wyższym poziomie. Dość dużą część kodu można opisać jako implementację określonego wzorca. Po prostu używając tej wstępnie zdefiniowanej nazwy, wszyscy słuchający zwykle wiedzą tyle, ile zależy im na tym kodzie, więc możesz przejść do następnej rzeczy.
Rzeczywistość jest wręcz przeciwna. Powiedzmy, że jesteś na spotkaniu i powiedz im, że ta konkretna klasa to Fasada. Połowa ludzi na spotkaniu albo nigdy nie wiedziała, albo dawno zapomniała dokładnie, co to znaczy. Jeden z nich prosi o przypomnienie mu dokładnej różnicy między fasadą a, powiedzmy, pełnomocnikiem. Aha, a para osób, które naprawdę znają wzorce, spędza resztę spotkania, zastanawiając się, czy to naprawdę powinno być uważane za fasadę, czy „po prostu” adapter (z tym jednym facetem wciąż nalegającym, aby wydawało mu się to pełnomocnikiem).
Biorąc pod uwagę, że naprawdę chciałeś powiedzieć: „ten kod nie jest zbyt interesujący; przejdźmy dalej”, próba użycia nazwy wzorca tylko rozpraszała uwagę, a nie wartość.
Brak zainteresowania
Większość wzorców projektowych tak naprawdę nie zajmuje się interesującymi częściami kodu. Zajmują się takimi sprawami, jak: „jak stworzyć te obiekty?” I „jak sprawić, by ten obiekt z tym rozmawiał?” Zapamiętywanie nazw wzorców dla tych (a także wyżej wymienionych argumentów na temat szczegółów itp.) Po prostu wkłada dużo energii w rzeczy, o których większość programistów po prostu nie dba.
Ujmując to nieco inaczej: wzorce zajmują się tymi samymi rzeczami w wielu programach - ale tak naprawdę program jest interesujący, ponieważ różni się od innych programów.
Podsumowanie
Wzory projektowe zawiodły, ponieważ:
- Nie udało im się osiągnąć masy krytycznej.
- Rozróżnienie między wzorami było niewystarczające, aby zagwarantować przejrzystość.
- Przeważnie zajmowali się częściami kodu, na których i tak nikt tak naprawdę nie dbał.