Jak studiować wzorce projektowe? [zamknięte]

Przeczytałem około 4-5 książek na temat wzorców projektowych, ale nadal nie czuję, że zbliżyłem się do poziomu średnio zaawansowanego w wzorcach projektowych?

Jak studiować wzorce projektowe?

Czy jest jakaś dobra książka do wzorców projektowych?

Wiem, że przyjdzie to tylko z doświadczeniem, ale musi być jakiś sposób, aby je opanować?

Author: cristid9, 2008-11-24

23 answers

Najlepszym sposobem jest rozpoczęcie kodowania z nimi. Wzorce projektowe to świetna koncepcja, którą trudno zastosować od samego przeczytania o nich. Weź kilka przykładowych wdrożeń, które znajdziesz w Internecie i zbuduj wokół nich.

Wielkim zasobem jest strona Data & Object Factory. Omawiają wzorce i dają przykłady zarówno konceptualne, jak i rzeczywiste. Ich materiał odniesienia jest również świetny.

 188
Author: Joseph Ferris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:41:45

Przeczytałem trzy książki i nadal nie rozumiałem wzorców zbyt dobrze, dopóki nie przeczytałem Head First Design Patterns autorstwa OReilly. Ta książka otworzyła mi oczy i naprawdę dobrze wyjaśniła.

alt text

 196
Author: Darren C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 02:50:54

Moje dwa grosze za takie i stare Pytanie

Niektórzy już wspominali, ćwiczą i refaktoryzują. Uważam, że właściwa kolejność poznawania wzorców jest taka:

    Dowiedz się więcej o Test Driven Development (TDD)]}
  1. Naucz się refaktoryzacji
  2. Ucz się wzorców

Większość ludzi ignoruje 1, Wielu wierzy, że może zrobić 2, a prawie wszyscy idą prosto na 3.

Dla mnie kluczem do poprawy moich umiejętności programistycznych była nauka TDD. To może być długi czas bólu i powolne kodowanie, ale pisanie testów na początku z pewnością sprawia, że dużo myślisz o swoim kodzie. Jeśli Klasa potrzebuje zbyt dużej ilości kotła lub łatwo się psuje, zaczynasz zauważać nieprzyjemne zapachy dość szybko

Główną zaletą TDD jest to, że tracisz strach przed refaktoryzacją kodu i zmuszasz do pisania klas, które są wysoce niezależne i spójne. Bez dobrego zestawu testów jest po prostu zbyt bolesne, aby dotknąć czegoś, co nie jest zepsute. Z siatką bezpieczeństwa naprawdę przygoda w drastyczne zmiany w Twoim kodzie. To jest moment, w którym naprawdę można zacząć uczyć się od praktyki.

Teraz przychodzi moment, w którym trzeba czytać książki o wzorach, a moim zdaniem jest to kompletna strata czasu, starając się zbyt mocno. Dobrze zrozumiałem wzorce dopiero po zauważeniu, że zrobiłem coś podobnego lub mogłem zastosować to do istniejącego kodu. Bez testów bezpieczeństwa lub nawyków refaktoryzacji poczekałbym na nowy projekt. Problem wykorzystania wzorców w nowym projekcie jest że nie widzisz, jak wpływają lub zmieniają działający kod. Zrozumiałem schemat oprogramowania tylko wtedy, gdy zrefakturowałem mój kod na jeden z nich, nigdy, gdy wprowadziłem jeden świeży do mojego kodu.

 72
Author: SystematicFrank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-01 11:35:00

Derek Banas zrobił tutoriale na youtube do projektowania szablonów, które bardzo lubię:

Http://www.youtube.com/playlist?list=PLF206E906175C7E07

Mogą być trochę krótkie w czasie, ale jego wyczucie czasu i prezentacja sprawiają, że bardzo lubią się uczyć.

 57
Author: Pedro Duarte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-02 14:26:43

Praktyka, praktyka, praktyka.

Można czytać o grze na wiolonczeli przez lata, a nadal nie być w stanie umieścić łuk do instrumentu i zrobić coś, co brzmi jak muzyka.

Wzorce projektowe są najlepiej rozpoznawane jako problem wysokiego szczebla; taki, który jest istotny tylko wtedy, gdy masz doświadczenie niezbędne do uznania ich za użyteczne. Dobrze, że uznajesz, że są przydatne, ale jeśli nie widziałeś sytuacji, w których by się zastosowały lub zastosowały, jest to prawie niemożliwe aby zrozumieć ich prawdziwą wartość.

Gdzie stają się użyteczne, gdy rozpoznajesz wzorce projektowe w cudzym kodzie lub rozpoznajesz problem w fazie projektowania, który dobrze pasuje do wzorca; a następnie zbadaj formalny wzór, zbadaj problem i określ, jaka delta jest między nimi, i co to mówi o wzorze i problemie.

To tak naprawdę to samo co kodowanie; K & R może być "Biblią" dla C, ale czytanie go kilka razy od deski do deski po prostu nie daje jedno praktyczne doświadczenie; nie ma zastąpienia doświadczenia.

 33
Author: Paul Sonier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:55:02

Praktyka praktyka praktyka. Myślę, że 4 do 5 książek to nawet nadmierne ćwiczenie czytania bez jakiejś dobrej ilości ćwiczeń. Uważam, że najlepszym sposobem na to jest rozpoczęcie refaktoryzacji bieżących projektów za pomocą 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 przez problemy, które rozwiązują. I proszę zachować pamiętaj, że nie są to srebrne kule - nie musisz ich zapamiętywać i mocno naciskać, aby zastosować w locie. Moje dwa centy..

 23
Author: utku_karatas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 19:00:49

Zadaj sobie te 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ęzykowa sprawi, że znikną?

Jaki dług techniczny ponosisz korzystając z niego?

Czy jest prostszy sposób na wykonanie zadania?

 15
Author: gtrak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-08 04:25:16

Podano wiele dobrych przykładów. Chciałbym dodać:

Źle je zastosowałem. Nie musisz tego robić celowo, stanie się to, gdy spróbujesz zastosować je w swoim początkowym dopasowaniu do wzoru. W tym czasie każdy pojedynczy problem, który zobaczysz, będzie pasował dokładnie do jednego wzorca projektowego. 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. Oraz kilka miesięcy później będziesz musiał zmienić coś w kodzie i zobaczyć, że użycie tego konkretnego wzorca nie było takie mądre, ponieważ zakodowałeś się w rogu i musisz ponownie refaktorować.

Przyznam, że to nie jest tak naprawdę do-that-and-you ' ll-learn-it-in-21-days odpowiedź, ale z mojego doświadczenia jest to najbardziej prawdopodobne, aby dać dobry wgląd w sprawę.

 8
Author: Joachim Sauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:56:00

Odkryłem, że jest to trochę trudne do zrozumienia lub zrozumieć korzyści z niektórych wzorców, dopóki jeden rozumie problemy, które rozwiązują, a inne (gorsze) sposoby problemy zostały wdrożone.

Oprócz książek GOF i POSA tak naprawdę nie czytałem żadnych, więc nie mogę dać ci innych zaleceń. Naprawdę po prostu trzeba mieć zrozumienie problemów domen i myślę, że wielu mniej doświadczonych programistów może nie być w stanie docenić korzyści z wzory. To nie jest lekceważenie ich. Dużo łatwiej jest przyjąć, zrozumieć i docenić dobre rozwiązania, gdy najpierw trzeba walczyć ze słabymi alternatywami.

Powodzenia

 7
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:54:31
 5
Author: Rohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:44:26

Do książek polecam wzorce projektowe objaśnione oraz wzorce projektowe Head First . Aby naprawdę nauczyć się tych wzorców, powinieneś przyjrzeć się istniejącemu kodowi. Sprawdź, jakich wzorów już używasz. Spójrz na zapach kodu i jakie wzory mogą je rozwiązać.

 5
Author: David Nehme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 19:00:40

Czy czytałeś "Design Patterns Explained" Allana Shallowaya.

Ta książka bardzo różni się od innych wzorców projektowych, ponieważ nie jest tak bardzo katalogiem wzorów, ale przede wszystkim przedstawia sposób rozkładu przestrzeni problemowej, która łatwo odwzorowuje wzory.

Problemy mogą być rozłożone na dwie części: rzeczy, które są wspólne i rzeczy, które różnią się. Gdy to zrobisz, mapujemy wspólne rzeczy do interfejsu i rzeczy, które różnią się w zależności od implementacji. W istocie, wiele wzorów wpada w ten "wzór".

Na przykład we wzorze strategii rzeczy wspólne są wyrażone jako kontekst strategii, a części zmienne są wyrażone jako konkretne strategie.

Uważam tę książkę za wysoce prowokującą do myślenia w przeciwieństwie do innych książek wzorcowych, które dla mnie mają taki sam stopień ekscytacji, jak czytanie książki telefonicznej.

 5
Author: Phillip Ngan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-03 03:45:38

Najnowszy Z nettuts .

Jest to dobry zasób dla początkujących.

 5
Author: Jatin Dhoot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 11:47:15

Prowadziłem kilka grup dyskusyjnych wzorców projektowych (nasza strona) i przeczytałem 5 lub 6 książek o wzorcach. Polecam zacząć od Książki Head First Design Patterns i uczestniczyć lub założyć grupę dyskusyjną. Książka Head First na początku może wyglądać trochę Hasboro, ale większość ludzi lubi to po przeczytaniu rozdziału lub dwóch.

Użyj wyjątkowego zasobu - Joshua Kereivisky ' s a Learning Guide to Design Patterns aby uporządkować wzór i pomóc w dyskusji Grupa. Z doświadczenia jedną zmianą, którą proponuję, aby zamówić, jest postawienie Strategii na pierwszym miejscu. Większość dzisiejszych deweloperów doświadczyła jakiegoś dobrego lub złego wcielenia fabryki, więc rozpoczęcie od fabryki może prowadzić do wielu rozmów i zamieszania na temat wzorca.To ma tendencję do skupienia się na tym, jak studiować i uczyć się wzorców, co jest dość istotne na tym pierwszym spotkaniu.

 4
Author: JB Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 19:00:55

Polecam HeadFirst DesignPattern. Czytanie książki nie wystarczy, po przyswojeniu pojęć, które musisz znajdowaćna odpowiedzi na wiele pytań pojawiają się w twoim umyśle i spróbuj znaleźć prawdziwe aplikacje życiowe, w których te wzory mogą być używane. Robię to samo i zacząłem zadawać pytania, nawet te pytania wyglądają głupio.

 3
Author: Rajkumar Vasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-15 13:38:16

Moja sugestia byłaby kombinacją implementacji kilku z nich i analizy niektórych implementacji z nich. Na przykład, w. Net, istnieją zastosowania wzorców adapterów, jeśli spojrzeć na Adaptery danych, jak również kilka innych, jeśli ktoś robi trochę kopanie w ramach.

 2
Author: JB King,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:48:59

Nie wiem jak najlepsza książka, ale puryści mogą powiedzieć wzorce projektowe: elementy oprogramowania Obiektowego Wielokrotnego Użytku

Jeśli chodzi o moje ulubione, lubię Head First Design Patterns opublikowane przez O ' Reilly. Jest napisane rozmową, która do mnie przemawia. Kiedy to przeczytałem, przejrzałem mój kod źródłowy w tym samym czasie, aby sprawdzić, czy odnosi się do tego, co czytałem. Jeśli tak, to zmieniłem zdanie. Tak nauczyłem się łańcucha odpowiedzialności.

Praktyka-Praktyka-Praktyka.

 2
Author: Jason Slocomb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 18:54:54

Wzorce projektowe to tylko narzędzia--coś w rodzaju funkcji bibliotecznych. Jeśli wiesz, że tam są i ich przybliżona funkcja, możesz w razie potrzeby wykopać je z książki.

Nie ma nic magicznego w wzorcach projektowych, a każdy dobry programista domyślił 90% z nich dla siebie, zanim pojawiły się jakiekolwiek książki. W większości uważam, że książki są najbardziej przydatne w prostym określaniu nazw dla różnych wzorów, abyśmy mogli je łatwiej omówić.

 2
Author: Bill K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 19:04:06

Sposób, w jaki nauczyłem się wzorców projektowych, polega na pisaniu wielu naprawdę okropnych programów. Kiedy miałem 12 lat, nie miałem pojęcia, co było dobre, a co złe. Właśnie napisałem stertę kodu spaghetti. Przez następne 10 lat uczyłem się na błędach. Niezależnie wymyśliłem większość wspólnych 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 następnie bardzo rozczarowany, że to tylko kolekcja wzorów projektowych. nazwy rzeczy, które znałem intuicyjnie. (ten dowcip o uczeniu się C++ za 10 lat nie jest w rzeczywistości żartem)

Morał z historii: pisz dużo kodu. Jak mówili inni, ćwicz, ćwicz, ćwicz. Myślę, że dopóki nie zrozumiesz, dlaczego twój obecny projekt jest zły i nie poszukasz lepszego sposobu, nie będziesz miał dobrego pomysłu, gdzie zastosować różne wzorce projektowe. Wzorce projektowe powinny zapewniać wyrafinowane rozwiązanie i wspólną terminologię, aby je omówić z innymi programistami, a nie wklejanie rozwiązania problemu, którego nie rozumiesz.

 2
Author: rmeador,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 19:13:22

Przekonanie, że czytanie wzorców projektowych, ćwiczenie ich kodowania nie pomoże IMO. Kiedy czytasz te książki 1. Poszukaj podstawowego problemu, który rozwiązuje dany wzór projektowy, zaczynając od szablonów kreacyjnych. 2. Jestem pewien, że pisałeś kod w przeszłości, przeanalizuj, czy napotkałeś te same problemy, które wzorce projektowe mają na celu dostarczenie rozwiązania. 3. Spróbuj przeprojektować / ponownie kod czynnika lub może zacząć od nowa.

O zasobach można sprawdzić these

  1. www.dofactory.com
  2. Projektowanie wzorców: elementy oprogramowania Obiektowego wielokrotnego użytku (Seria Addison-Wesley Professional Computing) autorstwa Ericha Gamma, Richarda Helma, Ralpha Johnsona i Johna M. Vlissidesa]}
  3. Patterns of Enterprise Application Architecture by Martin Fowler

1 to szybki start, 2 to dogłębna analiza..3 wyjaśni lub powinien sprawić, że pomyślisz, czego nauczyłeś się w 2 pasuje do oprogramowania dla przedsiębiorstw.

Moje 2 centy...
 2
Author: Perpetualcoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-24 19:56:41

Myślę, że trudno jest również studiować wzorce projektowe. Musisz dowiedzieć się więcej o OOP i doświadczeniach z rozwojem średnich i dużych aplikacji. Dla mnie studiuję jako grupa programistów, aby prowadzić dyskusję. Podążamy za przewodnikiem edukacyjnym do wzorców projektowych , że ukończyli oni badanie wzorców. Istnieją Programiści C# i JavaScript. Dla mnie to jest fajne to Programista C# pisze kody w JavaScript a programista JavaScript robi to samo dla kodów C#. Po wyjściu ze spotkania badam i czytam kilka książek w domu, aby je przejrzeć. Lepszym sposobem, aby zrozumieć więcej i zapamiętać w moim umyśle, jest zrobienie bloga z przykładami zarówno w C#, jak i JavaScript tutaj http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Sugerowałbym najpierw przed przejściem do każdego wzorca projektowego proszę o zrozumienie nazwy wzorców. Dodatkowo jeśli ktoś zna pojęcie proszę o wyjaśnienie i podanie jednego przykładu nie tylko programowanie, ale w świecie czytanym.

Na przykład:

Metoda Fabryczna:

Read world: po prostu daję pieniądze $5, $ 10 lub $ 20 i będzie produkować pizzę z powrotem, nie wiedząc nic o tym, jak produkuje, po prostu dostać małą, średnią lub dużą pizzę zależy od wpłaty pieniędzy, tak, że mogę jeść lub robić cokolwiek.

Programowanie: klient po prostu przekazuje wartość parametru $5, $10 lub $20 do metody fabrycznej i zwróci obiekt Pizza z powrotem. Więc klient może używać tego obiektu bez wiedząc, jak to działa.

Nie jestem pewien, czy to może Ci pomóc. To zależy od poziomu wiedzy osób przystępujących do spotkania.

 1
Author: Vorleak Chy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-27 04:39:36

Myślę, że musisz zbadać niektóre z problemów, które napotkałeś jako deweloper, gdzie wyciągnął włosy po tym, jak trzeba było zmienić kod po raz 10th z powodu kolejnej zmiany projektu. Prawdopodobnie masz listę projektów, w których czułeś, że było dużo przeróbek i bólu.

Z tej listy możesz wyprowadzić scenariusze, które mają zostać rozwiązane przez wzorce projektowe. Czy był czas, kiedy trzeba było wykonać tę samą serię działań na różnych zestawy danych? Czy trzeba być w stanie w przyszłości możliwości do aplikacji, ale chcesz uniknąć przeróbki całej logiki dla istniejących klas? Zacznij od tych scenariuszy i wróć do katalogu wzorów i ich problemów, które mają rozwiązać. Prawdopodobnie zobaczysz kilka dopasowań między GoF a biblioteką projektów.

 1
Author: David Robbins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-04 02:18:05

Dla początkujących, Head First wzorce projektowe zrobi, gdy już znamy wszystkie wzorce, a następnie spróbuj wizualizować obiekty w czasie rzeczywistym w tych wzorcach.

Książka pomoże Ci zrozumieć podstawowe pojęcia, chyba że do czasu wdrożenia w realnym świecie nie możesz być mistrzem wzorców projektowych

 1
Author: gmhk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-23 08:51:14