Zawsze zdawałem sobie sprawę ze znaczenia stosowania wzorców projektowych. Jestem ciekawy, jak inni programiści wybierają ten najbardziej odpowiedni. Czy korzystasz z szeregu cech (takich jak schemat blokowy), aby pomóc Ci podjąć decyzję?
Na przykład:
Jeśli obiekty są powiązane, ale nie chcemy określać konkretnej klasy, rozważ opcję Streszczenie
Kiedy tworzenie instancji jest pozostawione klasom pochodnym, rozważ fabrykę
Potrzebujesz sekwencyjnego dostępu do elementów obiektu agregującego, spróbuj Iterator
czy coś podobnego?
c#
design-patterns
Carl Sagan
źródło
źródło
Odpowiedzi:
Kluczowym nieporozumieniem w dzisiejszym świecie kodowania jest to, że wzorce są elementami składowymi. Bierzesz
AbstractFactory
tu iFlyweight
tam, a możeSingleton
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 :
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).
źródło
Pytam siebie:
Proces wyboru wzorca oprogramowania nie różni się od procesu wyboru struktury danych, z tym wyjątkiem, że wybierając strukturę danych, oceniasz charakterystykę wydajności i pamięci twojego problemu i wybierasz strukturę danych, która najbardziej pasuje do tych cech.
źródło