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!
learning
design-patterns
prelic
źródło
źródło
Odpowiedzi:
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.
źródło
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ę.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ń .
źródło
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
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.
źródło
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
źródło
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).
źródło
Wzory projektowe próbują rozwiązać problemy związane z projektowaniem.
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) ...
źródło
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.
źródło
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.
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.
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.
źródło