Kluczowym nieporozumieniem w dzisiejszym świecie kodowania jest to, że wzorce są elementami składowymi. Bierzesz AbstractFactory
tu i Flyweight
tam, a może Singleton
tam i łączysz je razem z XML i presto, masz działającą aplikację.
Oni nie są.
Hmm, to nie było wystarczająco duże.
Wzory nie są elementami składowymi
Tak lepiej
Wzorzec jest czymś, czego używasz, gdy stwierdzisz, że masz problem - potrzebujesz pewnej elastyczności, którą zapewnia wzorzec lub natknąłeś się, gdy tworzysz mały język w pliku konfiguracyjnym i mówisz „czekaj” chwileczkę, przestań, to jest mój własny tłumacz, który piszę - to znany i rozwiązany problem, użyj wzorca tłumacza ”.
Pamiętaj jednak, że odkrywasz to w kodzie, a nie zaczynasz. Na początku twórcy Javy nie powiedzieli „Och, umieścimy Flyweight w liczbie całkowitej”, ale zdali sobie sprawę z problemu z wydajnością, który można rozwiązać za pomocą flyweight .
W związku z tym nie ma „schematu blokowego”, za pomocą którego można znaleźć odpowiedni wzór. Wzorzec jest rozwiązaniem określonego rodzaju problemu, który napotykał wielokrotnie, a jego kluczowe części destylowano w Wzorzec.
Zaczynanie od Wzorca przypomina rozwiązywanie problemu i szukanie problemu. Jest to zła rzecz: prowadzi do nadmiernej inżynierii i ostatecznie nieelastyczności w projektowaniu.
Kiedy piszesz kod, kiedy zdajesz sobie sprawę, że piszesz fabrykę, możesz powiedzieć „aaaaa, to jest fabryka, którą zamierzam napisać” i wykorzystać swoją wiedzę na temat znajomości wzorca fabrycznego, aby szybko napisać kolejną część kodu bez próby ponownego wykrycia wzorca fabrycznego. Ale nie zaczynasz od „Mam tutaj klasę, napiszę dla niej fabrykę, żeby była elastyczna” - bo tak nie będzie.
Oto fragment wywiadu z Erichem Gammą (z Gamma, Helm, Johnson i Vissides ): Jak używać wzorców projektowych :
Próba użycia wszystkich wzorów jest złą rzeczą, ponieważ skończysz na projektach syntetycznych - projektach spekulacyjnych, które mają elastyczność, której nikt nie potrzebuje. Obecnie oprogramowanie jest zbyt skomplikowane. Nie możemy sobie pozwolić na spekulacje, co jeszcze powinien zrobić. Musimy naprawdę skoncentrować się na tym, czego potrzebuje. Dlatego lubię refaktoryzować do wzorów. Ludzie powinni dowiedzieć się, że kiedy mają szczególny rodzaj problemu lub zapach kodu, jak nazywają to w dzisiejszych czasach, mogą przejść do przybornika wzorów, aby znaleźć rozwiązanie.
Najlepszą pomocą dla „czego używać, kiedy” jest prawdopodobnie strona Wikipedii dotycząca wzorca projektowania oprogramowania - sekcja „Klasyfikacja i lista” opisuje kategorię, w której znajduje się każdy wzorzec i co robi. Nie ma schematu blokowego; opis jest prawdopodobnie najlepszym, który znajdziesz jako krótki fragment „co używać, kiedy”.
Pamiętaj, że znajdziesz różne wzorce w różnych obszarach programowania. Projektowanie stron internetowych ma własny zestaw wzorców, a JEE (nie projektowanie stron internetowych) ma inny zestaw wzorców. Wzorce programowania finansowego są zupełnie inne niż w przypadku samodzielnego projektowania interfejsu użytkownika aplikacji.
Tak więc każda próba wyszczególnienia ich wszystkich jest z natury niekompletna. Znajdziesz jeden, wymyślisz, jak go używać, a potem stanie się on w końcu drugą naturą i nie musisz myśleć o tym, jak i kiedy go użyć ponownie (dopóki ktoś nie poprosi cię o wyjaśnienie).