Jak badać wzorce projektowe? [Zamknięte]


352

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?


6
Najlepszym sposobem na nauczenie się wzorca projektowego jest wykonanie projektu. Kiedy zobaczysz wzory w projekcie, będziesz wiedział, kiedy ich użyć tutaj. Artykuł, który uczy krok po kroku wzoru projektowego z projektu codeproject.com/Articles/1009532/...
Shivprasad Koirala

1
Spójrz również na Antipatterns deviq.com/antipatterns
programista

Możesz się tego nauczyć tutaj, play.google.com/store/apps/…
Keyur Thumar

Prawdopodobnie późno, ale nadal może komuś pomóc ... spróbuj geeksforgeeks.org/software-design-patterns, aby zrozumieć podstawy i scenariusze wyjaśniające, gdzie można ich użyć. Pomógł mi zrozumieć podstawę i cel każdego wzoru
zeetit

Zobacz także: Pluralsight: pluralsight.com/courses/patterns-library
ssmith

Odpowiedzi:


206

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.


11
Dokładnie! Zawsze mnie cieszyło, że oprogramowanie należy do „Informatyki”. Widzę argument za sprzętem, ale oprogramowanie czyni bardzo niedokładną naukę!
Joseph Ferris

Niestety ten zasób nie jest już dostępny :(.

5
@NielsW To jest możliwe, może to tylko chwilowe wyłączenie.
uthomas

211

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.

alternatywny tekst


14
Na początku trochę dziwne jest czytanie „poważnej” książki, która tak wygląda, ale czytając dalej, zauważyłem, że tak naprawdę rozumiem koncepcje zmiany. Zdecydowanie warte przeczytania.
Tim Whitcomb,

18
Zdecydowanie uważam, że jest to najlepsza książka do nauki wzorców projektowych. Książka GoF powinna być używana jako odniesienie, po ich lepszym zrozumieniu.
Bill the Lizard

wspomniałeś, że czytasz 3 książki .. czy ty też to przeczytałeś? amazon.com/... jeśli tak, co myślisz?
sivabudh

11
Erich Gamma (jeden z GoF) poznałem na konferencji w Nantes we Francji w 2006 roku i powiedział, że ta książka wyprzedaje książkę GoF :)
Fuhrmanator

1
Po przeczytaniu tej książki OO miało sens. @SimpleFellow Książka GoF jest nudna. Bez wcześniejszej wiedzy o wzorach projektowych możesz szybko zasnąć. Jest to jednak dobry ( ) książka odniesienia i powinien być częścią każdej biblioteki specjalistów wraz z DDD i P EAA.
mbx

93

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:

  1. Dowiedz się Test Driven Development (TDD)
  2. Dowiedz się refaktoryzacji
  3. Naucz się wzorów

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.


czy możesz polecić niektóre książki do TDD i refaktoryzacji głównie w C ++
i

2
Jeśli przejdziesz do C ++, będziesz mieć wiele problemów ze znalezieniem wysokiej jakości treści. Co więcej, C ++ nie jest językiem, w którym chcesz się uczyć testowania, ponieważ technicznie brakuje refleksji, co samo w sobie sprawia, że ​​budowanie dobrych narzędzi do testowania jest bardzo trudne. Nadal jest to wykonalne, ale społeczności, fora, dyskusje i liczba osób TDD stanowią mniejszość w C ++ z tego powodu. Dużo z nim pracowałem, ale pomimo jego mocnych stron nie jest to język przyjazny dla testu.
SystematicFrank


35

Ć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.


5
+1. Myślę, że wielu nowicjuszy zbyt szybko wskakuje w wzorce projektowe i zaczyna projektować systemy oparte na abstrakcyjnych fabrykach, singletonach, obserwatorach, gościach itp. Wprost z książki. Rezultat jest często ciężki, nie najlepiej wykorzystuje język, a nawet nie jest dobrze zaprojektowany z podstawowego punktu widzenia sprzężenia / spójności (ten ostatni cierpi szczególnie, gdy wzorce projektowe są źle wdrażane). Zdecydowanie, które wzorce projektowe są odpowiednie, wymaga jeszcze doświadczenia, a jeszcze więcej - jak najlepiej je wdrożyć w danym języku.
stinky472

25

Ć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..


15

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?


14
i wreszcie zadaj sobie pytanie, skąd uzyskać odpowiedzi na wszystkie wyżej wymienione pytania
Jatin Dhoot

@JatinDhoot, myśląc ...
gtrak

8

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


+1 za zrozumienie problemów, które mają rozwiązać. Wyzwanie polega na zobaczeniu problemów z pierwszej ręki (w prawdziwym projekcie, który ma osobiste znaczenie). Zbyt wiele przykładowych problemów w książkach jest (nadmiernie) uproszczonych. Jednym z powodów, dla których lubię książkę Head First Design Patterns, jest to, że pokazują niektóre problemy z naiwnymi rozwiązaniami i ich nie do utrzymania. Następnie przedstawiają wzór i jego czystość ... Sprawdź na przykład Dekoratora w tej książce.
Fuhrmanator

8

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ę.


7

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.


6

7
Nie poleciłbym tej książki jako książki „otwierającej oczy” :)
Geo

73
Poleciłbym ją jako książkę zamykającą oczy. Kilka stron tego tomu przed snem i twoja bezsenność to już przeszłość.
Dónal

2
przyszedłem tu, kiedy zasnąłem w środku dnia, czytając tę ​​książkę. szukał „zrozumienia wzorców projektowych”. znalazł post. znalazłem komentarz powyżej. uczyniło mój dzień. zgadzam się z innymi, jest to książka zamykająca oczy
aimme


4

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.


3

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.


2

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ę.


2

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.


2

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ć.


2

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.


2

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. www.dofactory.com
  2. Wzory projektowe: elementy oprogramowania obiektowego wielokrotnego użytku (seria Addison-Wesley Professional Computing) autorstwa Ericha Gammy, Richarda Helma, Ralpha Johnsona i Johna M. Vlissidesa
  3. Wzory architektury aplikacji korporacyjnych autorstwa Martina Fowlera

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 ...


1

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.


Drugi link w odpowiedzi jest martwy.
Pang

1

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.


1

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.