Przeczytałem około 4-5 książek o wzorach projektowych, ale nadal nie czuję, że zbliżyłem się do poziomu pośredniego we wzorach projektowych?
Jak powinienem studiować wzorce projektowe?
Czy jest jakaś dobra książka do wzorów?
Wiem, że przyjdzie to tylko z doświadczeniem, ale musi być jakiś sposób na ich opanowanie?
design-patterns
anand
źródło
źródło
Odpowiedzi:
Najlepszym sposobem jest rozpoczęcie z nimi kodowania. Wzory projektowe to świetna koncepcja, którą trudno jest zastosować od samego przeczytania o nich. Zapoznaj się z przykładowymi implementacjami, które znajdziesz w Internecie i zbuduj wokół nich.
Świetnym źródłem informacji jest strona Fabryki danych i obiektów . Omawiają wzorce i podają przykłady zarówno koncepcyjne, jak i rzeczywiste. Ich materiał odniesienia jest również świetny.
źródło
Przeczytałem trzy książki i nadal nie rozumiałem zbyt dobrze wzorów, dopóki nie przeczytałem Wzorów pierwszego projektu autorstwa OReilly. Ta książka otworzyła mi oczy i naprawdę dobrze wyjaśniła.
źródło
Moje dwa centy za takie i stare pytanie
Niektóre osoby już wspomniały, ćwiczą i refaktoryzują. Uważam, że właściwa kolejność uczenia się o wzorach jest następująca:
Większość ludzi ignoruje 1, wielu uważa, że mogą zrobić 2, a prawie wszyscy idą od razu do 3.
Dla mnie kluczem do doskonalenia umiejętności programistycznych była nauka TDD. Może to być długi czas bolesnego i powolnego kodowania, ale najpierw napisanie testów z pewnością sprawia, że dużo myślisz o kodzie. Jeśli klasa potrzebuje zbyt dużej ilości blaszki lub łatwo się psuje, dość szybko zaczynasz zauważać brzydkie zapachy
Główną zaletą TDD jest to, że tracisz strach przed zmianą kodu i zmuszasz Cię do pisania klas, które są wysoce niezależne i spójne. Bez dobrego zestawu testów dotknięcie czegoś, co nie jest zepsute, jest zbyt bolesne. Dzięki siatce bezpieczeństwa naprawdę zaczniesz przygodę w drastycznych zmianach w kodzie. To jest moment, kiedy naprawdę możesz zacząć uczyć się od praktyki.
Teraz nadszedł moment, w którym musisz czytać książki o wzorach, i moim zdaniem, to kompletna strata czasu, zbyt ciężkiego wysiłku. Wzorce bardzo dobrze zrozumiałem po zauważeniu, że zrobiłem coś podobnego, lub mogłem zastosować to do istniejącego kodu. Bez testów bezpieczeństwa i nawyków refaktoryzacji czekałbym na nowy projekt. Problem z używaniem wzorców w nowym projekcie polega na tym, że nie widzisz, w jaki sposób wpływają one na działający kod lub go zmieniają. Zrozumiałem wzorzec programowy dopiero po ponownym przekształceniu mojego kodu w jeden z nich, nigdy, gdy wprowadziłem nowy w moim kodzie.
źródło
Derek Banas stworzył samouczki youtube dotyczące projektowania wzorów, które bardzo mi się podobają:
http://www.youtube.com/playlist?list=PLF206E906175C7E07
Mogą być trochę krótkie, ale jego wyczucie czasu i prezentacja sprawiają, że bardzo się cieszą z nauki.
źródło
Ćwicz, ćwicz, ćwicz.
Możesz czytać o graniu na wiolonczeli przez lata i wciąż nie jesteś w stanie ukłonić się instrumentowi i stworzyć czegoś, co brzmi jak muzyka.
Wzorce projektowe najlepiej rozpoznać jako problem wysokiego poziomu; taki, który jest istotny tylko wtedy, gdy masz doświadczenie niezbędne do uznania ich za przydatne. Dobrze, że zdajesz sobie sprawę, że są one użyteczne, ale dopóki nie zobaczysz sytuacji, w których będą one miały zastosowanie lub zastosują się, prawie niemożliwe jest zrozumienie ich prawdziwej wartości.
Przydają się wtedy, gdy rozpoznasz wzorce projektowe w kodzie innych lub rozpoznasz problem na etapie projektowania, który dobrze pasuje do wzorca; a następnie zbadaj wzór formalny, zbadaj problem i określ, jaka jest delta między nimi, i co to mówi zarówno o wzorze, jak i problemie.
To naprawdę to samo, co kodowanie; K&R może być „biblią” dla C, ale kilkakrotne czytanie od deski do deski po prostu nie daje żadnego praktycznego doświadczenia; nie ma zamiany doświadczenia.
źródło
Ćwicz praktykę. Myślę, że od 4 do 5 książek to nawet nadmierne czytanie bez dobrej praktyki. Uważam, że najlepszym sposobem na to jest rozpoczęcie refaktoryzacji bieżących projektów przy użyciu wzorców. Lub jeśli nie masz żadnych projektów, nad którymi aktywnie pracujesz, po prostu zrób to po swojemu, a następnie spróbuj refaktoryzować do wzorców .
Nie możesz ich w pełni docenić, jeśli nie cierpisz z powodu problemów, które rozwiązują. I pamiętaj, że nie są to srebrne kule - nie musisz ich zapamiętywać i mocno naciskać, aby aplikować w locie. Moje dwa centy..
źródło
Zadaj sobie następujące pytania:
Co oni robią?
Co rozdzielają / łączą?
Kiedy należy ich używać?
Kiedy nie należy ich używać?
Jaka brakująca funkcja języka sprawiłaby, że odejdą?
Jaki dług techniczny zaciągasz, korzystając z niego?
Czy istnieje prostszy sposób na wykonanie pracy?
źródło
Odkryłem, że trochę trudno jest zrozumieć lub zrozumieć korzyści wynikające z niektórych wzorców, dopóki nie zrozumie się problemów, które rozwiązują, i innych (gorszych) sposobów, w jakie problemy zostały wdrożone.
Poza książkami GOF i POSA tak naprawdę ich nie czytałem, więc nie mogę dać ci innych rekomendacji. Naprawdę musisz po prostu zrozumieć problematyczne domeny i myślę, że wielu mniej doświadczonych programistów może nie być w stanie docenić zalet wzorców. To nie jest nic przeciwko nim. O wiele łatwiej jest przyjmować, rozumieć i doceniać dobre rozwiązania, gdy trzeba najpierw zmagać się ze złymi alternatywami.
Powodzenia
źródło
Podano wiele dobrych przykładów. Chciałbym dodać jeden:
Źle je zastosuj. Nie musisz tego robić umyślnie, stanie się to, gdy spróbujesz zastosować je w początkowym dopasowaniu wzoru do wzoru. W tym czasie każdy problem, który zobaczysz, będzie pasował dokładnie do jednego wzoru. Często wszystkie problemy wydają się pasować do tego samego wzorca projektowego z jakiegoś powodu (Singelton jest głównym kandydatem do tego).
I zastosujesz wzór i będzie dobrze. A kilka miesięcy później będziesz musiał coś zmienić w kodzie i przekonać się, że użycie tego konkretnego wzorca nie było takie sprytne, ponieważ zakodowałeś się w kącie i musisz ponownie dokonać refaktoryzacji.
To prawda, że tak naprawdę nie jest to odpowiedź „zrób to, a nauczysz się tego w ciągu 21 dni”, ale z mojego doświadczenia wynika, że najprawdopodobniej da ci dobry wgląd w tę sprawę.
źródło
Czytałeś „Design Designs Explained”, autor: Allan Shalloway.
Ta książka bardzo różni się od innych wzorników projektowych, ponieważ nie jest to tak naprawdę katalog wzorów, ale przede wszystkim przedstawia sposób dekompozycji przestrzeni problemowej, która łatwo odwzorowuje się na wzory.
Problemy można podzielić na dwie części: rzeczy wspólne i różne. Po wykonaniu tej czynności mapujemy wspólne elementy do interfejsu oraz elementy, które różnią się w zależności od implementacji. Zasadniczo wiele wzorów wpada w ten „wzór”.
Na przykład we wzorze strategii wspólne rzeczy są wyrażone jako kontekst strategii, a części zmienne są wyrażone jako konkretne strategie.
Uważam tę książkę za bardzo prowokującą w przeciwieństwie do innych wzorników, które dla mnie są tak samo podekscytowane jak czytanie książki telefonicznej.
źródło
Czy próbowałeś książki Gang of Four?
Wzory projektowe: elementy oprogramowania obiektowego wielokrotnego użytku
źródło
W przypadku książek polecam Wzory projektowe wyjaśnione i Wzory projektowe Head First . Aby naprawdę nauczyć się tych wzorców, powinieneś spojrzeć na swój istniejący kod. Poszukaj wzorów, których już używasz. Zobacz, jak pachnie kod i jakie wzory mogą je rozwiązać.
źródło
Poprowadziłem kilka grup dyskusyjnych na temat wzorów ( nasza strona ) i przeczytałem 5 lub 6 książek o wzorach. Polecam zacząć od książki Head First Design Patterns i wziąć udział lub rozpocząć dyskusję w grupie. Książka Head First może początkowo wyglądać trochę jak Hasboro, ale większość ludzi lubi ją po przeczytaniu jednego lub dwóch rozdziałów.
Skorzystaj z wyjątkowego zasobu - Joshua Kereivisky's A Learning Guide to Design Patterns do zamawiania wzorów i aby pomóc grupie dyskusyjnej. Z doświadczenia jedną zmianą, którą sugeruję przy zamawianiu, jest umieszczenie Strategii na pierwszym miejscu. Większość dzisiejszych programistów doświadczyła dobrego lub złego wcielenia się w Fabrykę, więc rozpoczęcie od Fabryki może prowadzić do wielu rozmów i nieporozumień na temat tego schematu. pierwsze spotkanie.
źródło
Polecam HeadFirst DesignPattern. Czytanie książki nie wystarczy, po przyswojeniu sobie pojęć musisz znaleźć odpowiedzi na wiele pytań, które pojawiają się w twoim umyśle i spróbować znaleźć rzeczywiste aplikacje, w których można zastosować te wzorce. Robię to samo i zacząłem zadawać pytania, nawet te pytania wyglądają głupio.
źródło
Moją sugestią byłoby połączenie implementacji kilku z nich i przeanalizowanie niektórych z nich. Na przykład w .Net istnieją zastosowania wzorców adapterów, jeśli spojrzysz na Adaptery danych, a także kilka innych, jeśli trochę zagłębisz się w strukturę.
źródło
Nie wiem o najlepszej książce, ale puryści mogą powiedzieć Design Designs: Elements of Wielokrotnego użytku Object-Oriented Software
Jeśli chodzi o moich ulubionych, lubię wzory Head First Design Patterns opublikowane przez O'Reilly. Jest napisany rozmownym głosem, który do mnie przemawia. Kiedy go czytam, jednocześnie sprawdziłem kod źródłowy, aby sprawdzić, czy dotyczy on tego, co czytałem. Jeśli tak, zrekonstruowałem. W ten sposób nauczyłem się łańcucha odpowiedzialności.
Praktyka - Praktyka - Praktyka.
źródło
Wzorce projektowe to tylko narzędzia - coś w rodzaju funkcji bibliotecznych. Jeśli wiesz, że one tam są i ich przybliżona funkcja, możesz wykopać je z książki, gdy zajdzie taka potrzeba.
Wzory projektowe nie mają nic magicznego, a każdy dobry programista odkrył 90% z nich przed wydaniem jakiejkolwiek książki. W większości uważam te książki za najbardziej przydatne w prostym definiowaniu nazw różnych wzorów, abyśmy mogli łatwiej je omawiać.
źródło
Nauczyłem się wzorców projektowych, pisząc mnóstwo naprawdę okropnego oprogramowania. Kiedy miałem około 12 lat, nie mam pojęcia, co było dobre, a co złe. Właśnie napisałem stosy kodu spaghetti. Przez około 10 lat nauczyłem się na własnych błędach. Odkryłem, co zadziałało, a co nie. Niezależnie wymyśliłem większość popularnych wzorców projektowych, więc kiedy po raz pierwszy usłyszałem, jakie są wzorce projektowe, byłem bardzo podekscytowany, aby się o nich dowiedzieć, a potem byłem bardzo rozczarowany, że był to tylko zbiór nazw rzeczy, które już intuicyjnie znałem. (ten żart o nauczeniu się C ++ za 10 lat nie jest tak naprawdę żartem)
Morał tej historii: napisz dużo kodu. Jak powiedzieli inni, ćwicz, ćwicz, ćwicz. Myślę, że dopóki nie zrozumiesz, dlaczego twój obecny projekt jest zły i nie zaczniesz szukać lepszego sposobu, nie będziesz miał pojęcia, gdzie zastosować różne wzorce projektowe. Wzorniki projektowania powinny zapewniać wyrafinowane rozwiązanie i wspólną terminologię do omawiania go z innymi programistami, a nie wklejane rozwiązanie problemu, którego nie rozumiesz.
źródło
Pojęcie, które czyta wzorce projektowe, ćwiczy ich kodowanie, tak naprawdę nie pomoże IMO. Kiedy czytasz te książki 1. Poszukaj podstawowego problemu, który rozwiązuje dany wzorzec projektowy, począwszy od Wzorów kreacyjnych jest najlepszym wyborem. 2. Jestem pewien, że napisałeś już kod, przeanalizuj, czy napotkałeś te same problemy, które wzorce projektowe mają na celu zapewnienie rozwiązania. 3. Spróbuj przeprojektować / przeprojektować kod lub zacząć od nowa.
O zasobach możesz je sprawdzić
1 to szybki start, 2 będzie dogłębną analizą. 3 wyjaśni lub powinno sprawić, że pomyślisz o tym, czego nauczyłeś się w 2 wersjach oprogramowania dla przedsiębiorstw.
Moje 2 centy ...
źródło
Myślę, że trudno jest również badać wzorce projektowe. Musisz wiedzieć więcej na temat OOP i niektórych doświadczeń związanych z tworzeniem aplikacji od średnich do dużych. Dla mnie studiuję jako grupa programistów, aby prowadzić dyskusję. Postępujemy zgodnie z przewodnikiem edukacyjnym dotyczącym projektowania wzorców , które ukończyli badanie wzorców. Istnieją programiści C # i JavaScript. To dla mnie wymyślne, że programista C # pisze kody w JavaScript, a programista JavaScript robi to samo dla kodów C #. Po wyjściu ze spotkania badam i czytam w domu kilka książek do recenzji. Lepszym sposobem, aby zrozumieć więcej i zapamiętać, jest prowadzenie blogów z przykładami zarówno w języku C #, jak i JavaScript tutaj http://tech.wowkhmer.com/category/Design-Patterns.aspx .
Proponuję najpierw przed pójściem do każdego wzoru, proszę zrozumieć nazwę wzorów. Ponadto, jeśli ktoś zna tę koncepcję, proszę wyjaśnić i podać jeden przykład nie tylko programowania, ale także w świecie czytania.
na przykład:
Metoda fabryczna:
Czytaj świat: Po prostu daję pieniądze 5 $, 10 $ lub 20 $, a to przyniesie pizzę z powrotem, nie wiedząc nic o tym, jak to się produkuje, po prostu dostaję małą, średnią lub dużą pizzę zależną od wkładu pieniężnego, dzięki czemu mogę jeść lub robić cokolwiek innego.
Programowanie: Klient po prostu przekazuje wartość parametru 5 USD, 10 USD lub 20 USD do metody fabrycznej i zwróci obiekt Pizza. Dzięki temu klient może korzystać z tego obiektu, nie wiedząc, jak go przetwarza.
Nie jestem pewien, czy to może ci pomóc. To zależy od poziomu wiedzy osób dołączających do spotkania.
źródło
Myślę, że musisz zbadać niektóre problemy, które napotkałeś jako programista, w których wyciągnąłeś włosy po 10 poprawkach w kodzie z powodu kolejnej zmiany projektu. Prawdopodobnie masz listę projektów, w których czułeś, że było wiele przeróbek i bólu.
Z tej listy można wyprowadzić scenariusze, które Wzory projektowe zamierzają rozwiązać. Czy był czas, kiedy musiałeś wykonać tę samą serię działań na różnych zestawach danych? Czy będziesz musiał być w stanie w przyszłości korzystać z aplikacji, ale chcesz uniknąć przerabiania całej logiki dla istniejących klas? Zacznij od tych scenariuszy i wróć do katalogu wzorców i odpowiadających im problemów, które mają rozwiązać. Prawdopodobnie zobaczysz kilka dopasowań między GoF a biblioteką projektów.
źródło
Dla początkujących wzorce Head First Design zrobiłyby, gdy znamy już wszystkie wzorce, a następnie spróbuj wizualizować obiekty w czasie rzeczywistym w te wzorce.
Książka pomoże ci zrozumieć podstawowe pojęcia, chyba że dopóki nie wdrożysz w prawdziwym świecie, NIE MOŻESZ BYĆ MISTRZEM WZORÓW PROJEKTOWYCH
źródło