Wzory projektowe: czy powinienem się ich nauczyć? [Zamknięte]

13

To trochę dziwne, zadając dwa pytania jeden po drugim, ale nie są one zbyt powiązane i nie chciałem ich łączyć, ale nie spamuję pytań, obiecuję!

W każdym razie jestem absolwentem college'u, a moja edukacja dotyczyła tylko wzorców projektowych ... wdrożyliśmy kilka prostych, dotknęliśmy faktu, że były bardziej skomplikowane i otrzymaliśmy instrukcje, aby zwrócić się do książki GoF, jeśli chciałem dowiedzieć się więcej. Moje pytanie brzmi: czy warto uczyć się wzorców w książce GoF? Dla mnie zawsze wydawało się sprzeczne z intuicją, aby problem pasował do klasycznego wzoru, ale oczywiście książka i wzory są znane z jakiegoś powodu. Czy pokazują się na tyle, że powinienem się ich uczyć?

Dzięki jeszcze raz!

prelic
źródło
Czy czytałeś inne pytania oznaczone jako [wzorce projektowe]?
Peter Taylor
Te, które zostały zasugerowane przed opublikowaniem, zdawały się głównie pytać o dobre zasoby lub mówić o najlepszym sposobie ich zdobycia. Mogę się ich nauczyć, jestem ciekawy, jak stosowane są klasyczne wzory. Przepraszamy, jeśli to jest post, możesz go zamknąć.
prelic
1
Nie wydaje mi się, aby był to dokładny repost, ale zastanawiam się, czego potrzebujesz, czego nie dostarczają odpowiedzi np. Programmers.stackexchange.com/questions/84098/... programmers.stackexchange.com/questions/78825/…
Peter Taylor
Przynajmniej ktoś wspomniał o tym na studiach. Nie słyszałem o tym, dopóki nie zacząłem przeprowadzać wywiadów na temat mojej drugiej pracy po studiach (gdzie najwyraźniej nie byłem odpowiedni, ponieważ nie słyszałem o singletonie kontra znajomości mechaniki tego wzoru).
Mayo
Może być ciekawie: mahemoff.com/paper/software/learningGoFPatterns
Tom Anderson

Odpowiedzi:

12

Jak zwykle

To zależy

To zależy od tego, ile zrobiłeś OOP, czy rozpoznasz, czy nawet będziesz w stanie wykorzystać wzorce projektowe

To zależy od tego, jak jesteś zdyscyplinowany, czy zastosujesz wzorce, które zostały właściwie nauczone, i nie zwariujesz jak przysłowiowy mężczyzna młotkiem

Z drugiej strony ... pięć palców!

Jeśli wykonałeś kilka lat poważnej pracy OOP lub masz rzetelnego mentora, który utrzyma cię na szynach, lub po prostu lubisz czytać OOP-nerd, to i tak zdecydowanie kup książkę i przestudiuj ją.

Pomaga poznać wzorce, dzięki czemu rozpoznasz, kiedy ich używać, a kiedy nie.

Steven A. Lowe
źródło
Tak myślałem. Z ciekawości, gdybyś musiał wybrać kilka, które uznalibyście za najważniejsze koncepcyjnie lub najpopularniejsze, jakie by to były?
prelic
1
@prelic: singleton - z powodu kontrowersji wokół niego - i gość - ponieważ jest tak cholernie użyteczny
Steven A. Lowe
2
@prelic: Zacznę od strategii i obserwatora - ponieważ są tak cholernie przydatne
Falcon
1
+1 Najlepszy komentarz na ten temat w historii! Wzory, których używam regularnie: Command, Adapter i metoda fabryczna.
Oliver Weiler,
Te, których używam, jak oddychanie, to Singleton, metoda szablonów, dekorator i kompozyt. I Iterator, ale prawie zawsze w przebraniu java.util.Iterator, w którym nie wydaje się to wzorem. Strategia, gość i fasada byłyby tymi, które świadomie stosuję, gdy widzę ich potrzebę.
Tom Anderson
21

Tak, powinieneś się ich nauczyć.

Jeszcze bardziej sensowne jest odwiedzanie ich ponownie po zdobyciu pewnego doświadczenia , aby można je było porównać z tym, co wiesz. W przypadku niektórych wzorców okaże się, że sam to odkryłeś, ale dowiesz się czegoś bardziej ogólnego o jego użyciu, kompromisach, wariantach i tak dalej. Inni mogą wydawać się, że bezpośrednio rozwiązują problemy, z którymi sobie poradziłeś, i pokazują ci eleganckie rozwiązanie, którego nie znasz.

Wielki Większość wzorów jest bardzo użyteczne i powszechne . Inne mogą nie być tak popularne, ale nadal mają wąskie zastosowanie, gdzie są idealnie dopasowane.

Jest jeszcze jeden powód, dla którego warto czytać: nauczy Cię, jak myśleć . Jasne, to nie jest srebrna kula, ale wciąż nieoceniona inspiracja.

Wreszcie, nigdy , nigdy, nigdy, w żadnym wypadku, nie staraj się dopasować problemu do wzoru lub narzędzia . To bardzo złe i niebezpieczne myślenie! Dowiedz się, jak działa narzędzie, i używaj go mądrze, aby poradzić sobie z problemem, nigdy na odwrót.

Im więcej narzędzi znasz dobrze, tym lepiej. Czasami narzędzie może zainspirować twoje myślenie (zamiast bezpośrednio rozwiązać problem), innym razem połączysz kilka z nich, aby uzyskać świetne rozwiązanie.

Książka GOF jest doskonałym źródłem wielu przydatnych narzędzi, z których korzystamy na co dzień .

Konrad Garus
źródło
Dzięki za dobrą radę! Chciałbym móc podać wiele znaczników wyboru
prelic
6

Najważniejszą korzyścią z wiedzy o Design Patters jest to, że wiesz, co oznaczają te terminy. Innymi słowy, znasz wspólne słownictwo .

Jest to dla mnie najważniejsze osiągnięcie wszystkich zawirowań Wzorów projektowych, które powstało w powszechnym słownictwie, w którym można po prostu używać nazw określonych wzorów, a inni natychmiast wiedzą, o czym mówisz, bez konieczności wyjaśniania tego. . Rzeczy, które opisują wzorce, są dobrze znane większości programistów, ale wyjaśnienie, co masz na myśli dla innych, zajmuje trochę czasu, więc komunikacja ułatwia rozpoznanie nazw wzorców.

Przykładami są odwiedzający, singleton i dekoratorzy.

Innymi słowy, sugeruję zapoznanie się z nazwiskami i ich działaniami.


źródło
5

TAK, ale ostrożnie!

Część TAK:

Czasami napotykaliśmy problemy w naszych projektach. Czasami problemy te są bardzo częste, więc wzorce projektowe zapewniają dobrze przetestowane rozwiązania tych problemów. Główną zaletą uczenia się wzorców projektowych jest to, że można znacznie szybciej wymyślić rozwiązanie projektowe, a jeśli współpracownicy są świadomi żargonu wzorca projektowego , można również wyjaśnić rozwiązanie o wiele szybciej.

Z ostrożną częścią:

Wzory projektowe nie powinny być świętym Graalem Twoich rozwiązań. Najprostsze (KISS) rozwiązanie jest bardziej pożądane i wiele razy wzorce projektowe sprawią, że sprawy staną się bardziej złożone. Jeśli uczysz się wzorców projektowych, dowiedz się także o wzorach anty-wzorcowych. Znam niektórych starych ludzi, którzy są przeciwni wzorom projektowym, i zgadzam się z nimi w pewnym stopniu, ponieważ gdy nie masz zbyt dużego doświadczenia w programowaniu, ale mnóstwo teorii wzorców projektowych, możesz sprawić, że cienkie rzeczy będą o wiele trudniejsze dla ciebie i twojego zespół.

Wreszcie, nie myśl, że musisz dopasować / zmienić swoje rozwiązanie, aby zachować zgodność z wzorcem projektowym. Przeciwnie, możesz zgiąć wzór projektowy, aby pasował do twojego rozwiązania. Jest w porządku, jeśli nie używasz każdego składnika receptury wzoru, o ile masz lepsze rozwiązanie swojego konkretnego problemu. Traktuj wzorce projektowe jako sugestię, a nie regułę dla swojego rozwiązania.

Armando
źródło
1

Uważam, że metoda Net Objectives myślenia o wzorach jest najbardziej korzystna. Ludzie zbyt często czytający książkę GoF zaczynają zakładać, że struktury, które pokazują, w notacji projektowej i kodzie, są wzorami i że tak zawsze wyglądają. Jest inny, prawdopodobnie lepszy sposób patrzenia na to.

Wzory to zestawy podobnych problemów, które można rozwiązać za pomocą pewnych, abstrakcyjnych formuł, a nie zestawy formuł, które można wykorzystać do rozwiązania różnych problemów. Oznacza to, że wzór już istnieje, zanim jeszcze zaczniesz próbować wykonać projekt, celem projektanta jest znalezienie go , a nie narzucenie go.

Co więcej, wiele osób patrzy na wzory i mówi: „Och, właśnie to rozwiązałem… Nie użyłem żadnych głupich wzorów”. Chodzi o to, że „....” prawie nieuchronnie opisuje implementację AN danego rozwiązania wzorcowego. Na przykład tablica wskaźników funkcji może służyć jako łańcuch odpowiedzialności, nawet jeśli nie tak wygląda tradycyjny przepis.

Mając to na uwadze, w badaniu wzorów należy skupić się na problemach, a nie na wzorach. Dowiedz się motywujące czynniki wzorców i jak radzą sobie z tymi czynnikami. Dzięki temu zobaczysz wzory w problemie, a następnie po prostu je wskażesz. To, wraz z językiem, który dają nam wzorce do mówienia o projektowaniu, pozwala na wyeksponowanie projektu dobrze dopasowanego do różnych trudności, które obecnie napotykasz.

TAK, krótko mówiąc, wzorce uczenia się są nie tylko tego warte ... ograniczasz się, NIE ucząc się ich. Nie chcę opisywać wszystkich motywujących zasad i ogólnego kształtu rozwiązania, gdy mówię: „Wygląda mi na gościa”.

Oto ich strona internetowa: http://www.netobjectives.com/PatternRepository/index.php?title=Main_Page

Edward Strange
źródło
Świetny zasób, ten link jest zwięzłym wyjaśnieniem większości kluczowych wzorców projektowych. Nie jest tak dogłębna, jak się wydaje książka, ale to jest zaleta.
jhocking
1

Wzorce projektowe opisane przez GoF są swego rodzaju naturalnym rozszerzeniem paradygmatu OO. Jeśli nie do końca rozumiesz cele OOP (enkapsulacja, rozdzielenie problemów, zasada DRY, modułowość itp.), Wówczas próba zastosowania Wzorów projektowych z powodzeniem nie ma większego sensu.

Jeśli jednak zmoczysz stopy w OOP w świecie rzeczywistym i będziesz starać się być wiernym wartościom OOP, nieuchronnie dostaniesz się do sytuacji opisanych w GoF, a są szanse, że wymyślisz rozwiązania podobne do nich. Po rozwiązaniu wielu podobnych problemów możesz zacząć pojawiać się wzorce; w tym momencie sensowne jest czytanie książki; idealnie będziesz mieć poczucie uznania i od razu docenisz elegancję i czystość proponowanych wzorów. Możliwe, że weźmiesz również pod uwagę niektóre z tych wzorców bez myślenia (które, gdy je poznasz, wiele z nich są). Będziesz także w stanie dobrze ocenić, czy określony wzór ma zastosowanie w danej sytuacji.

A oto kolejne ostrzeżenie: To, że znasz wszystkie te wzory, nie oznacza, że ​​musisz je stosować wszędzie. Niektóre z nich są dość sprytne, a ludzie mają pokusę, aby ich używać, nawet jeśli są okropnie nieodpowiednie, wzór Singleton jest najsłynniejszym przykładem (większość kontrowersji związanych z Singleton pochodzi z niewłaściwego użycia, np. Gdy nie ma korzyści z posiadania jednego ograniczenie tylko do wystąpienia).

tdammers
źródło
0

Wzory projektowe próbują rozwiązać problemy związane z projektowaniem.

  • Zostały one wykonane AFAIK przede wszystkim dla języków OOP.
  • Niektóre z problemów nie istnieją w programowaniu funkcjonalnym (wzorzec poleceń to sposób tworzenia pierwszorzędnych funkcji, wzorzec strategii jest zbliżony do funkcji wyższego rzędu ...). Te wzorce dotyczą języków (głównie OOP), które nie mają potrzebnej funkcjonalności.
  • Są posortowane alfabetycznie. Kilka wzorów składa się z innych lub pomysły składają się z tych, które były tam wcześniej.

Nauczyłem się wzorców później, kiedy poznałem programowanie funkcjonalne, UML, projektowanie baz danych, struktury danych i algorytmy. Właśnie przeszedłem listę wzorów tych wzorów na ściągawki i kiwnąłem głową, że już znam większość z nich. Niektóre były naprawdę miłe, jak wzorce singletonowe lub „komunikacyjne” (gość, mediator) ...

użytkownik712092
źródło
Wzory projektowe wyraźnie nie próbują rozwiązywać problemów projektowych. Same GoF opisują je jako wspólne wzorce, które zaobserwowali w programowaniu w świecie rzeczywistym; celem jest opisanie tych wzorców, aby inni programiści mogli rozpoznać podobne sytuacje i uniknąć typowych błędów i pułapek, a także być świadomi alternatywnych rozwiązań.
tdammers
0

Zgadzam się z uwagami zawartymi w kilku innych odpowiedziach na temat tego, jak niebezpieczne może być stosowanie wzorców projektowych z niewielkim doświadczeniem.

Mimo to gorąco polecam przeczytanie przynajmniej pierwszego rozdziału książki GoF. Pierwsza sekcja zapozna Cię z wzorami projektowymi, ale tak naprawdę jest więcej na temat zasad projektowania OO, i powinno to być korzystne, aby przeczytać i zrozumieć nawet przy stosunkowo niewielkim doświadczeniu. (Niektóre kluczowe idee, które pamiętam, obejmują „podsumowanie różnych pojęć”, „hierarchie dziedziczenia powinny być szerokie, ale nie głębokie”). Szkoda, że ​​dzieło znane jest głównie z 23 wzorców - omówienia zasad projektowania OO że poinformowanie tych wzorców jest również niezwykle cenne.

Aidan Cully
źródło
0

Moje pytanie brzmi: czy warto uczyć się wzorców w książce GoF?

Absolutnie! Powinieneś nauczyć się nie tylko wzorców projektowania oprogramowania, ale ogólnie technik projektowania. Nauka wspólnych rozwiązań typowych problemów to fantastyczny początek. Zwłaszcza gdy zaczniesz kopać wzory i ich kompromisy.

Czy pokazują się na tyle, że powinienem się ich uczyć?

Oryginalna książka Gang of Four została opracowana przez zbadanie wielu projektów oprogramowania i dostrzeżenie technik, które wielu programistów wykorzystało do rozwiązania problemów. Autorzy zauważyli kilka naprawdę dobrych technik, a także kilka, które zostały zastosowane w bardzo rozbieżnych projektach i pracowali nad ich abstrakcyjnym wykorzystaniem, aby były użyteczne niezależnie od dziedziny.

zawsze wydawało się sprzeczne z intuicją, aby dopasować problem do klasycznego wzoru

To jest poważny problem. Nie sprawiasz, że problem pasuje do rozwiązania. Zamiast tego książka wzorców projektowych Gang of Four zawiera sekcję „problem” dla każdego wzoru, a inne katalogi wzorów mają podobne sekcje, które opisują, kiedy należy zastosować każdy wzór. Opisuje także „konsekwencje” użycia wzorca - jeśli próbujesz uniknąć konsekwencji, użycie wzorca nie jest najlepszym pomysłem.

Thomas Owens
źródło