Aby dodać kolejną metaforę do zupy, wzorami projektowymi są Clippy, pomocnik pakietu Microsoft Office. „Wygląda na to, że robisz to samo z całą masą rzeczy. Czy mogę ci w tym pomóc, oferując Iterator lub Odwiedzającego?”
Dobry zapis tych wzorców wskaże, kiedy warto zrobić coś tak samo, jak to robiono wiele razy wcześniej, jakie błędy popełnisz przy pierwszej próbie i jakie są wspólne sposoby na uniknięcie tych błędów . Więc czytasz wzór projektowy (lub przeglądasz go z pamięci), a następnie zaczynasz swoją pracę. To, czego nie możesz zrobić, to uzyskać tylko za pomocą Clippy i kreatorów.
Niedoświadczeni ludzie mogą popełnić błąd i napisać kod, który nie uwzględnia rzeczywistości, wtedy, gdy myślą, że ich lista wzorców projektowych jest pełną listą wszystkich możliwych podejść do rozwiązywania problemów w oprogramowaniu i próbują zaprojektować kod, łącząc ze sobą projekt wzory aż do zakończenia. Inną kiepską taktyką obserwowaną na wolności jest róg buta do sytuacji, w której tak naprawdę nie jest on odpowiedni, na podstawie tego, że wzór „jest najlepszą praktyką”. Nie, może to być najlepsza praktyka dla klasy problemu, który faktycznie rozwiązuje , ale z pewnością nie jest to najlepsza praktyka w przypadku problemów, których nie rozwiązuje, lub problemów, które rozwiązuje tylko poprzez wprowadzenie niepotrzebnej złożoności, gdy istnieje prostsze rozwiązanie .
Oczywiście możliwe jest również, że ktoś uniknie wzoru na podstawie tego, że YAGNI, a następnie zda sobie sprawę, że go potrzebuje i dąży do normalnego rozwiązania. Jest to zwykle (ale nie zawsze) gorsze niż realizacja wymagań od samego początku i dlatego nawet w zwinnym rozwoju jest frustrujące, gdy całkowicie przewidywalne wymagania nie są wcześnie wykrywane. Nie mogłem być jedynym programistą C ++, który był bardzo rozbawiony tym, że Java początkowo odrzuciła generyczne kontenery jako niepotrzebnie złożone, a następnie przywróciła je później.
Więc jest to prawie na pewno pomyłka, aby uniknąć pisania iterator na zasadzie dlatego, że wolą unikać wzorców projektowych.
Dodanie nowego pola do warstwy interfejsu użytkownika / bazy danych / danych zajmuje 2-3 godziny, a jak w jego kodzie - 30 minut.
Naprawdę nie można się z tym kłócić: dzięki tej metodzie jego konstrukcja jest znacznie lepsza od drugiej. Czy to dlatego, że unikał wzorców projektowych, jest jednak wątpliwe, myślę, że jest to bardziej prawdopodobne, ponieważ przy projektowaniu wziął pod uwagę właściwe „rzeczywiste” problemy, a dzięki doświadczeniu jest lepszy w swojej pracy niż ktoś uzbrojony tylko w podręcznik i wysokie ideały.
Zrozumiał więc, że każdy wzorzec, który wymaga dotknięcia wielu różnych punktów w kodzie, aby dodać pole, jest złym wzorcem dla zadania, „ułatwia dodawanie pól” i nie używał tych wzorów. Architektury warstwowe rzeczywiście mogą ucierpieć pod tym względem i niewłaściwe jest stosowanie wzorców projektowych bez doceniania ich wad.
W przeciwieństwie do tego, ile czasu zajmuje napisanie nowego interfejsu użytkownika w jego projekcie i jak długo zajmuje to architektura warstwowa? Jeśli projekt wezwał go do ciągłego budowania i wdrażania nowych interfejsów użytkownika za pomocą stałego modelu danych, zamiast ciągłego dodawania pól, mam nadzieję, że to zrobił. Lub też. Ale pomimo wszystkich jego zalet, powiedzenie „działamy zwinnie” nie oznacza niestety, że nigdy nie będziesz musiał dokonywać kompromisu!
Wybór z menu wzorów projektowych z pewnością może przestać myśleć o najważniejszych problemach. Ale rozpoznanie, kiedy piszesz gościa, i udokumentowanie go lub nadanie mu nazwy „gość”, aby pomóc czytelnikom szybko go zdobyć, nie przeszkadza w niczym. Pisanie „to jest gość” zamiast prawidłowego dokumentowania jest straszną pomyłką z tego powodu, dla którego twój starszy programista - programiści nie zrozumieją. Nawet programiści, którzy wiedzą, czym jest Gość, potrzebują więcej informacji niż tylko „to jest Gość”.