Nauka / wdrażanie wzorców projektowych (dla początkujących) [zamknięte]

85

Jestem zagubionym początkującym i hobbystą programistą, który próbuje to opanować, więc wybacz mi, jeśli moje pytanie jest trochę nierealne lub nie ma zbyt wiele sensu.

Widzę wiele pytań dotyczących SO związanych z wykorzystaniem wzorców projektowych i zastanawiam się, czy ktoś ma dobre zasoby do nauki i wdrażania wzorców projektowych? Rozumiem ogólną ideę i wiem, jak / kiedy użyć kilku z nich (Singletony, metody fabryczne), ale wiem, że mi ich brakuje.

(Na wszelki wypadek preferuję język C #, ale mogłem się uczyć na przykładach w innych językach)

Ashlocke
źródło

Odpowiedzi:

84

Head First Design Patterns

tekst alternatywny

i strona Wikipedii Wzorzec projektowy to najlepsze zasoby dla początkujących. FluffyCat to kolejny dobry, darmowy zasób online zawierający wzorce projektowe w Javie i PHP .

Książka Gang of Four to miejsce, w którym można się później udać, ale jest dość zaawansowana, więc poczekałbym, aż będziesz miał dość mocny chwyt z innych zasobów.

Bill the Lizard
źródło
4
Istnieją przykłady kodu C # dla wzorców projektowych Head First dostępne pod adresem msquaredweb.com/DesignPatterns/ ...
toolkit
5
Spojrzałem na tę książkę ... nienawidziłem jej. Więc sięgnąłem po książkę GoF i nauczyłem się z niej wszystkiego o wzorcach projektowych. To było trochę suche, ale o wiele bardziej pouczające.
Thomas Owens
1
Początkowo myślałem, że pierwsza książka będzie kompletnie przyprawiająca o mdłości (na marginesie jest ciężka w metaforze i ma bardzo konwersacyjny ton)… ale tak naprawdę jest naprawdę pomysłowa i pouczająca; Bardzo się cieszę, że zaryzykowałem i kupiłem. Imo, wybór bandy czterech = niepotrzebny masochizm.
kod w całości
2
Uważam, że pierwsza książka od razu przyprawiała mnie o mdłości. Spędza tak dużo czasu na „zabawie”. Myślę, że słabo przekazuje kluczowe pomysły - gubią się. Czytanie to tak, jakby patrzeć, jak czyjś tata stara się być fajny. Ale książka GoF to druga skrajność, a zatem nie dla wszystkich.
Draemon
2
@Bill: Wiem, ale zgadzam się z komentarzami @Thomas i @Draemon. Moi niezorientowani na programowanie przyjaciele, którym polecano tę serię książek dla algorytmów zajęć z programowania, znienawidzili ich i trafili na „suchsze” książki, ponieważ ilość informacji na stronie była większa. To tylko kwestia preferencji. Czytałem książki techniczne od najmłodszych lat i chodziłem do liceum o wysokim poziomie technicznym, co musiało przyzwyczaić mnie do czytania „suchych” książek. Wolę książki, w których zwierzęta nie rozmawiają ze mną i zbaczają z tropu, ale raczej proste informacje, które muszę przyswoić.
Esteban Küber,
27

Wzorce projektowe są świetne z różnych powodów:

  1. daje początek do rozwiązywania typowych problemów.
  2. daje programistom słownictwo umożliwiające mówienie o pewnych sposobach rozwiązywania problemów w bardzo zwięzły sposób.
  3. pracując z programistami, którzy znają wzorce projektowe i wykorzystujesz wzorce projektowe w swoich rozwiązaniach, znacznie szybciej zrozumieją rozwiązania.

Ale kiedy Twoim celem jest po prostu nauczenie się wzorców projektowych, myślę, że brakuje Ci podstaw. Wszystkie wzorce projektowe są oparte na bardziej powszechnych zasadach. Wysoka spójność, zasada niskiego sprzężenia otwarta, zamknięta, SUCHY, zasada podstawienia Liskova itp. Aby zapoznać się z tymi podstawami, przeczytałbym następujące książki w tej kolejności:

  1. Head First Object-Oriented Analysis and Design (Head First) [ILLUSTRATED] (Paperback)
  2. Stosowanie UML i wzorców (oprawa twarda)
  3. Zasady, wzorce i praktyki zwinne w języku C # (seria Robert C. Martin) (oprawa twarda)

Następnie jesteś gotowy na podstawowy zestaw czterech wzorców projektowych

  1. Wzory projektowe od głowy (najpierw głowa) [ILUSTRACJA] (książka w miękkiej okładce)
  2. BIBLIA
  3. Fajna strona (nic nie kupuj, nie warto) http://dofactory.com/Patterns/Patterns.aspx (niektóre implementacje tej strony warte są dyskusji

Następny krok:

  1. Wzorce architektury aplikacji korporacyjnych (seria Addison-Wesley Signature) (oprawa twarda)
  2. Książki POSA

I zawsze pamiętaj: wzór nie jest celem!

KeesDijk
źródło
2
Myślę, że podstawy OO (hermetyzacja, dziedziczenie, polimorfizm itp.) Są wystarczające do poznania, aby rozpocząć naukę wzorców projektowych. Możesz nauczyć się innych zasad (zasada wysokiej spójności, zasada otwartego i zamkniętego sprzężenia o niskim sprzężeniu, zasada DRY, zasada substytucji Liskova itp.) Poprzez wzorce uczenia się.
Bill the Lizard
Zgadzam się, że możesz nauczyć się wzorców projektowych, mając tylko podstawy OO. Ale potem dochodzisz do tego, że możesz sprawić, że wzór będzie działał, ale jeszcze nie w pełni rozumiesz, dlaczego jest to dobry projekt, jakie kompromisy dokonałeś i jak możesz wprowadzać zmiany we wzorach.
KeesDijk
20

Dodam, że książka Design Patterns z „Gang of Four” to biblia dla każdego, kto poważnie interesuje się wzorcami projektowymi.

Leopold Cimrman
źródło
12
Lub dla każdego, kto chce powiedzieć swoim przyjaciołom programistom, że przeczytał książkę Gang of Four :)
Dave Markle
14

Moja wskazówka:

Przeczytaj dużo o wzorach z różnych źródeł.

Próba wymuszenia jak największej liczby wzorców w całym kodzie, który piszesz, nie przyniesie dobrych rezultatów. Zamiast tego pozwól, aby informacja spoczęła w twoim mózgu przez chwilę (czytaj: miesiące).

Nagle natkniesz się na problem lub fragment kodu i niejasno będziesz pamiętać, że widziałeś coś, co może działać jako rozwiązanie tego konkretnego problemu. Nadszedł czas, aby przyjrzeć się szczegółom wzoru, o którym myślisz, i spróbować go zastosować.

W każdym razie to mi się udało.

Lars A. Brekken
źródło
9

Wzorce projektowe

Ta witryna samouczka zawiera następujące podsekcje

  • Zamiar każdego wzorca projektowego
  • Struktura świata rzeczywistego dla wzorca projektowego
  • Stwierdzenie problemu
  • Szczegółowe omówienie problemu
  • Lista kontrolna, jak dojść do wzoru
  • Praktyczne zasady przy ustalaniu wzoru.
  • Fragmenty kodu dla wzorca projektowego, który obejmuje C #, C ++, Delphi, Java i PHP

Ta strona zawiera również przewodnik po anty-wzorcach , UML i refaktoryzacji .

pramodc84
źródło
Strona internetowa okazała się bardzo przydatna. Dobre, jasne przykłady.
Augustas
8

Bruce Eckel ma książkę o wzorcach projektowych , chociaż jest to Java, tak jak wszystkie jego książki są niesamowite. A najlepsze jest to, że są darmowe!

Jan Gressmann
źródło
Dzięki za link, nie zdawałem sobie sprawy, że jest dostępny za darmo w Internecie.
James McMahon
5

Książka wprowadzająca, która okazała się przydatna i dobrze napisana, to Design Patterns Explained autorstwa Alana Shallowaya i Jamesa Trotta (Addison Wesley).

tekst alternatywny

Czy nie zacząć od Gangi Cztery książki, bo to nie jest książka wprowadzająca w dowolny sposób.

Federico A. Ramponi
źródło
4

Poleciłbym przyjrzeć się kwintologii Jean Paula Boodhoo (?) W Demystifying Design Patterns w DNRtv, adresy URL podane poniżej. Teledyski dotyczą między innymi Singletona, Abstract Factory - z tą różnicą, że można oglądać, jak programuje, gdy omawia teorię. Dobrze jest obejrzeć lunch w deszczowy dzień powszedni.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92

David Pike
źródło
DnrTV nie działa! Szkoda, bo zrzuty ekranowe Boodhoo są pouczające. Czy widziałeś filmy hostowane gdzie indziej? Czy masz pliki wideo, z przyjemnością przechowam je online.
Stephan Luis
4

Adnotacja do powyższych komentarzy.

Skrócona instrukcja dotycząca wzorców GOF

Tutaj jest dobre miejsce, w którym możesz zacząć dofactory.com/patterns/patterns.aspx - Możesz znaleźć link do każdego wzorca wraz z odpowiadającymi mu implementacjami.

Pamiętaj jednak, że są to wzorce GOF. Być może będziesz musiał przeczytać i zrozumieć zaawansowane wzorce, gdy zdobędziesz wystarczającą wiedzę w zakresie OOAD. Head First Design Patterns to dobry początek, a po dokonaniu pewnych postępów przejdź do wzorców architektury aplikacji korporacyjnych Martina Fowlera.

Stosowanie wzorców projektowych - proces myślowy

Kolejny główny aspekt - stosowanie wzorców projektowych jest równie ważne, jak sama ich znajomość. Przeczytanie tych artykułów również może Ci pomóc.

Stosowanie wzorców projektowych Część I

Stosowanie wzorców projektowych Część II

Mam nadzieję że to pomoże

zdumiony
źródło
3

Head First Design Patterns jest dobry, jak już wspomniano. Poza tym oczywiście oryginalna książka i wzorce projektowe C #. Są też wspomniane dobre strony internetowe.

Oprócz samokształcenia, poważnie polecam rozpoczęcie lub uczęszczanie na grupę studiującą wzorce w Twojej okolicy. Zobacz Przewodnik do nauki projektowania wzorców, aby uzyskać wyjaśnienie i świetną kolejność studiowania wzorców. Zrobiliśmy to i mogę szczerze powiedzieć, że nie zrozumiałbym tak dużo, jak teraz. Cotygodniowe spotkania z innymi zainteresowanymi ludźmi sprawiają, że jesteś zaskakująco zdyscyplinowany podczas uczenia się czegoś abstrakcyjnego, takiego jak wzorce projektowe.

Udanych studiów!

mmiika
źródło
3

Przed wydaniem pieniędzy na książki poleciłbym stronę ze wzorami projektowymi na Wikipedii . A także coś innego w Google na temat „screencastów wzorców projektowych” lub wyszukiwania „wzorców projektowych” w YouTube . Uzyskanie tych samych informacji w różny sposób często pomaga w obniżeniu ceny.

Książka Gang of Four to ostateczny tekst na temat najbardziej znanych wzorców, ale nie jest tak łatwy do odczytania, a przykłady w C ++ nie są lubiane przez wszystkich.

Tekst Head First Design Patterns jest znacznie bardziej przystępny, ale zawiera tylko podzbiór wzorców Gang of Four.

Najważniejsze jest, aby zrozumieć, gdzie i dlaczego dany wzór jest przydatny. Następnie przeszukaj internet w poszukiwaniu przykładów implementacji w wybranym przez siebie języku i eksperymentuj, aż „zrozumiesz”. Zrozum jeden wzór, zanim przejdziesz do następnego. Każdy rozumie niektóre wzorce lepiej niż inne (a są setki mniej znanych).

Po prostu odłączaj.

Royd Brayshay
źródło
2

Patterns of Enterprise Application Architecture (twarda okładka) autorstwa Martina Fowlera

Refaktoryzacja do wzorców (twarda okładka) autorstwa Joshua Kerievsky

Continuous Integration: Improving Software and Reducing Risk (Paperback) Paul Duval i in.

Beyond Software Architecture: Creating and Sustaining Winning Solutions (Paperback), autor: Luke Hohmann

Elie
źródło
2

Wzorce projektowe są jak każda funkcja biblioteczna, przeczytaj o nich, a gdy pojawi się problem, wzorzec projektowy będzie w twojej "Bibliotece narzędzi". Istnieje wiele książek ze wzorami projektowymi, wszystkie wzorowane na oryginalnych wzorach „Gang of four”.

Myślę, że dla każdego programisty oraz książka Refactoring autorstwa Fowlera to absolutnie minimalne wymagania.

Bill K.
źródło
Książki POSA nie były „wzorowane na książce GOF” - tak się złożyło, że jako pierwszy został wydany GOF - były one w produkcji w tym samym czasie.
Tim
1
Aby uniknąć nieporozumień, chcę powiedzieć, że WIĘKSZOŚĆ wzorców projektowych NIE jest zaimplementowanych w bibliotece. Wiele wzorców jest tworzonych przez łączenie razem klas bibliotecznych.
Bill the Lizard
Sprawiłem, że brzmiało to tak, jakby można je było zrobić w bibliotece - przepraszam za to, dzięki za wyjaśnienie, Bill. Wzorce projektowe są generalnie PODOBNE do bibliotek, ale rzeczy, których zwykle nie można umieścić w bibliotece - na przykład różne sposoby interakcji nieznanych sobie klas.
Bill K
2

W przypadku witryn internetowych bardzo dobrą witryną jest http://ajaxpatterns.org , jednego z twórców strony internetowej Ajaxian

Ken Penn
źródło
2

Oryginalna książka Wzorce projektowe to lektura obowiązkowa dla wszystkich programistów.

To doskonała książka na każdym poziomie: układ, przejrzystość, wgląd, głębia. To jedna z tych wspaniałych książek, które najpierw czytasz od deski do deski, a potem używasz jako odniesienia, dopóki nie zorientujesz się tego dosłownie na wylot.

Możesz zacząć od strony Wikipedii , ale zafunduj sobie również świetną książkę.

ddaa
źródło
2

Stosowanie UML i wzorców autorstwa Craiga Larmana. Zacznij od podstaw analizy, projektowania i stosowania prostego scenariusza przypadku. W prosty sposób przedstawia większość podstawowych wzorów.

skinp
źródło
2

Jeśli czytasz o wzorcach projektowych, zauważysz, że Java wydaje się mieć kilka z nich zaimplementowanych.

Spójrz na źródło dowolnej platformy, aby uzyskać informacje o wzorcach projektowych. Osobiście nie uważam, aby pasowały idealnie do żadnego z moich kodów, czasami przykłady w książkach i tutorialach wydają się trochę wyidealizowane, szczególnie dla samotnego programisty.

Wzorce projektowe nie są dla leniwych programistów.

Peter Turner
źródło
2

Ja i moi koledzy studiuję wzorzec projektowy, który podąża za wzorcem Study Group . Przygotowują listę wszystkich wzorców, których powinniśmy się nauczyć w kolejności, a także mają pytania otwierające, które powodują więcej dyskusji w grupie.

Samnang
źródło
1

Sugeruję również, aby po przeczytaniu Head First Design Patterns rzucić okiem na Refactoring to Patterns.

Uwaga: przykłady kodu są w Javie, ale powinny być bardzo podobne do przykładów w C # ...

zestaw narzędzi
źródło
1

Nie ma dla mnie zbytniego sensu, aby ktoś z bardzo małym doświadczeniem zagłębiał się w wzorce projektowe. Dobrze jest wiedzieć, że istnieją, ale w tym momencie powinieneś skupić się bardziej na innych rzeczach niż tylko na uczeniu się o wzorcach projektowych.

Są przydatne w kontekście problemu - jako koncepcja dla nowego / początkującego dewelopera nie mają tak naprawdę zbyt dużej wartości praktycznej poza wiedzą, że należy z nich korzystać, kiedy i gdzie można.

EDYCJA Dla wyjaśnienia - wiele wzorców projektowych jest wynikiem problemów występujących w niektórych dziedzinach. Trudno oczekiwać, że nowy programista (IMO) będzie znał wzorce projektowe, które będą używane w przypadku niektórych problemów. Tak jak otrzymujemy odrobinę algorytmów w badaniach CS, potrzebujemy zrozumienia rzeczy, które możemy zrobić z wzorami i ich korzyści, ale kiedy osoba nadal buduje świat hello lub odkrywa stl, nie ma praktycznej potrzeby tworzenia wzorców projektowych. Wzory są świetne. Ale to nie jest srebrna kula.

(Ani też CASE (narzędzia), ani nie jest / nie było UML, ani SCRUM, ani TDD, ani STL, ani Java, ani XML itp.) To tylko aspekty naszej profesji i traktowanie tych tematów jako drugiego przyjście jest naiwne.

Tim
źródło
Ale jeśli nie znasz wzorców, nie będziesz wiedział, czy istnieje taki, który dotyczy Twojego konkretnego problemu. Tak, jako początkujący prawdopodobnie nie POTRZEBUJESZ wzoru, ale ważne jest, aby nauczyć się wzorców, zanim pojawi się taka potrzeba.
Elie
Myślę, że opisałem to w moim poście ...
Tim
Musisz mieć coś więcej niż tylko wiedzieć, że istnieją ... musisz wiedzieć, jak działają i jakie są sytuacje, w których są używane. To trochę więcej niż powierzchowna wiedza. Mogą minąć lata, zanim użyjesz wzoru, ale kiedy to zrobisz, nie jest to czas na naukę wzoru.
Elie
Więc mówisz, że nowicjusz musi się nauczyć i zrozumieć dziesiątki lub więcej wzorców? Co w międzyczasie schodzi ze stołu? Nie spieram się z wzorami. Nie uważam też, że poznanie specyfiki wzorca JIT jest czymś złym. Wzorce uczenia się przed innymi rzeczami IMO nie jest przydatne
Tim
1

Wzorce obejmują słownictwo wysokiego poziomu używane przez programistów do mówienia o abstrakcyjnym projekcie. Jeśli ponownie używasz abstrakcyjnego rozwiązania, warto odwołać się do niego po nazwie. Jeśli wymyślisz wzór, profesjonalistą jest zrobić małe sprawdzenie, aby upewnić się, że nie ma już nazwy. Jeśli został nazwany, to opis może być przydatny.

Po skodowaniu choćby odrobiny zauważysz, że piszesz coś podobnego do tego, co wcześniej zakodowałeś. To jest wzór. Nawet jeśli jest to drobny wzór, warto to zauważyć. Czy jest lepszy wzór? Czy widzisz pewne drobne wzorki współpracujące ze sobą, aby rozwiązać większy problem? Cóż, następnym razem, gdy będziesz chciał rozwiązać większy problem, cały wzór przyjdzie Ci do głowy jako pojedynczy fragment. Dopracowywanie szczegółowych linii kodu staje się mechaniczne.

Im bardziej zauważasz wzorce, tym łatwiejsze staje się programowanie i tym bardziej docenisz niektóre z największych i najlepszych wzorców opracowanych przez innych programistów. Spróbuj opanować wzorzec MVC. Tak czy inaczej, różnice pojawiają się wszędzie, nawet w przypadku drobnych decyzji projektowych.

Dongilmore
źródło
1

Gdy zrozumiesz koncepcję, przejrzyj kod źródłowy lub projekt Eclipse, wiele naprawdę dobrych przykładów tych wzorców (nic dziwnego, Gamma był jednym z projektantów).

Uri
źródło