Czy istnieje kanoniczna książka o wzorach projektowych? [Zamknięte]


49

Interesuje mnie nauka wzorców projektowych i chciałbym wiedzieć, co są uważane za książki najwyższego poziomu w nauce tego przedmiotu.

Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne pomocne informacje na temat wzorców projektowych? Co z tą książką czyni ją wyjątkową?


Nie jestem pewien, czy właśnie o tym myślisz, ale w Forrst znajduję wiele sprytnych rzeczy programistycznych .
Trey Piepmeier,

2
Co powiesz na tytuł „Źródła referencyjne dla wzorców projektowych” lub „Zasoby wzorcowe projektowe” (ponieważ nie mam na myśli „referencji” jako „wyszukiwania na żądanie”) i przenieś wszystkie elementy listy do treści (lub usuń ją )?


W przypadku niektórych porządnych wdrożeń spoglądałem na te na dofactory ( chociaż nie kupiłem książek).
Steven Evers,

4
Biorąc pod uwagę, że na to pytanie otrzymano pełną i wyczerpującą odpowiedź, zamknąłem inne pytania dotyczące wzorców projektowych jako duplikaty tego, aby wyznaczyć je jako kanoniczną parę pytań i odpowiedzi na ten temat.

Odpowiedzi:


58

Wzory projektowe: elementy oprogramowania obiektowego wielokrotnego użytku są bardzo zbliżone do mojej definicji kanonicznej książki o wzorach projektowych. Według artykułu na Wikipedii (moje podkreślenie):

Pierwotna data wydania książki to 21 października 1994 r. Z prawem autorskim z 1995 r., A od lipca 2010 r. Książka była w 38 wydaniu . Książka została po raz pierwszy publicznie udostępniona na spotkaniu OOPSLA w Portland w stanie Oregon w październiku 1994 r. Ma duży wpływ na dziedzinę inżynierii oprogramowania i jest uważana za ważne źródło teorii i praktyki projektowania obiektowego. Ponad 500 000 egzemplarzy zostało sprzedanych w języku angielskim i 13 innych językach .

Ward Cunningham , pionier wzornictwa, prowadzi internetowy katalog wzorców książki na WikiWikiWeb . I zgodnie z artykułem Wikipedii na temat wzorca projektowego (ponownie podkreśl moje):

Wzory projektowe zyskały popularność w informatyce po książce Design Patterns: Elements of Reusable Object-Oriented Software opublikowanej w 1994 roku przez tak zwany „Gang of Four” (Gamma i in.).

Istnieje wiele innych książek wymienionych w tym samym artykule jako godne uwagi w gatunku:

Spośród tych, które przeczytałem, książka Fowlera jest bardzo wpływowa i dobrze się czyta. W niektórych momentach jest to trochę niejasne jak na mój gust, ale ogólnie jest to przyjemna książka. W książce znajduje się internetowy katalog wzorów z minimalnymi opisami.

Przejrzałem również wzorce wzornictwa Head First, a jeśli czytasz jakąkolwiek inną książkę z serii Head First, jest ona tej samej wysokiej jakości i równie przyjemna jak większość książek z tej serii :

Head First to seria wprowadzających książek instruktażowych na wiele tematów, opublikowanych przez O'Reilly Media. Podkreśla niekonwencjonalną, intensywną wizualnie, wymagającą od czytelników kombinację łamigłówek, żartów, niestandardowego projektu i układu oraz wciągający, konwersacyjny styl zanurzenia czytelnika w danym temacie.

Termin „wzorzec projektowy” jest nieco niejasny, ponieważ każde ogólne rozwiązanie wielokrotnego użytku można uznać za wzorzec projektowy. Zawsze zauważyłem tendencję do umieszczania etykiety na rozwiązaniach opisanych w jednej z godnych uwagi książek, które wymieniłem powyżej, a dokładniej w książkach Gang of Four and Fowler. Wzorce projektowe nie podlegają unikalnemu procesowi programowania, są to normalne rozwiązania programowe, które okazują się niezwykle wielokrotnego użytku i bardzo trudno je zidentyfikować .

Ale jeśli porównasz katalogi online obu książek z zawartością książek specyficznych dla języka, zauważysz, że są one często używane jako szablony. Powiedziałbym więc, że obie książki są bardzo blisko kanonicznych odniesień, przy czym książka GoF jest ważniejsza z historycznego punktu widzenia, mimo że obie książki są ograniczone do programowania obiektowego .


2
+1. Właściwie chciałem dać ci +5, ale niestety to niedozwolone.
Dipan Mehta

Cała seria architektury oprogramowania zorientowanej na wzorce dotyczy wzorców w różnych typach systemów - Tom 1 dotyczy wzorców architektonicznych i wzorców, które przecinają domeny, Tom 2 dotyczy systemów współbieżnych, Tom 3 dotyczy zarządzania zasobami w systemach sieciowych / rozproszonych, Tom 4 dotyczy systemów rozproszonych, a Tom 5 dotyczy języków wzorców, a także odniesienie do pozostałych 4 tomów. Biorąc pod uwagę pytanie, myślę, że tom 5 może mieć również zastosowanie, ale nie spędziłem z nim zbyt wiele czasu ... jeszcze.
Thomas Owens

@Yannis ten i pierwszy na ogół oparty jest na statycznych językach. Czy są jakieś dobre książki dla dynamicznych języków, takich jak python.
ravi404



23

Head First Design Patterns

W dowolnym momencie gdzieś na świecie ktoś zmaga się z tymi samymi problemami z projektowaniem oprogramowania, jakie masz. Wiesz, że nie chcesz wymyślać koła na nowo (lub, co gorsza, zepsutej opony), więc spójrz na Wzory projektowe - wnioski wyciągnięte przez tych, którzy napotykają te same problemy. Dzięki wzorom projektowym możesz skorzystać z najlepszych praktyk i doświadczeń innych, abyś mógł spędzić czas na ... czymś innym. Coś bardziej wymagającego. Coś bardziej złożonego. Coś więcej zabawy.

Chcesz dowiedzieć się o wzorcach, które mają znaczenie - dlaczego ich używać, kiedy ich używać, jak ich używać (a kiedy NIE należy ich używać). Ale nie chcesz tylko zobaczyć, jak wzorce wyglądają w książce, chcesz wiedzieć, jak wyglądają „na wolności”. W ich rodzimym środowisku. Innymi słowy, w rzeczywistych zastosowaniach. Chcesz także dowiedzieć się, w jaki sposób wzorce są używane w interfejsie API Java i jak korzystać z wbudowanej obsługi wzorców Java we własnym kodzie.

Chcesz poznać prawdziwe zasady projektowania OO i dlaczego wszystko, co szef powiedział ci o dziedziczeniu, może być błędne (i co zamiast tego zrobić). Chcesz dowiedzieć się, w jaki sposób te zasady pomogą następnym razem, gdy będziesz w strumieniu bez wzoru.

Co najważniejsze, chcesz nauczyć się „tajnego języka” Wzorów projektowych, abyś mógł trzymać swój własny ze swoim współpracownikiem (i zaimponować gościom na przyjęciu koktajlowym), kiedy od niechcenia wspomina o swoim oszałamiająco sprytnym użyciu Dowodzenia, Fasady, Pełnomocnika i Fabrycznie między łykami martini. Łatwo sprzeciwisz się swojemu głębokiemu zrozumieniu, dlaczego Singleton nie jest tak prosty, jak się wydaje, jak często Fabryka jest często niezrozumiana lub na prawdziwym związku między Dekoratorem, Fasadą i Adapterem.

Dzięki Head First Design Patterns unikniesz kłopotliwego myślenia, że ​​Decorator to coś z pokazu „Przestrzenie handlowe” ...


To. Jest to bardzo przystępna lektura, która całkowicie zmieniła sposób, w jaki podchodzę do inżynierii oprogramowania.
GSto

2
cała pierwsza seria head jest świetna, szczególnie dla początkujących deweloperów.
Thomas Stock

2
Uwielbiam tę książkę, ale absolutnie nie znoszę okładki! Mój kolega, który nie był programistą, przeszedł kiedyś przez moje biuro, zobaczył książkę i powiedział: „Najpierw główne wzorce projektantów ? Idziesz do branży modowej?”.
Pete

1
@Pete Dlaczego okładka może sprawić Ci więcej kłopotów. Najwyraźniej żyje podwójnie. fishbowl.pastiche.org/2005/08/12/…
Gordon

10

Tak, istnieje dobrze znana książka o wzorach projektowych: Wzory projektowe: elementy oprogramowania obiektowego wielokrotnego użytku, a autorzy często nazywani są „Gangiem Czterech” (GoF) i pojawia się w prawie wszystkich tekstach o wzorach projektowych.



To nie jest książka o wzorach projektowych. To katalog wzorów. Na początku jest krótkie wprowadzenie do wzorców projektowych, ale nie sądzę, że to wprowadzenie jest wystarczające.
Jörg W Mittag,

@ JörgWMittag Nie ma unikalnego procesu tworzenia wzorców projektowych, wzorce projektowe są stosunkowo małymi rozwiązaniami wielokrotnego użytku. Wzorce projektowe tworzone są w trakcie normalnych procesów tworzenia oprogramowania, co ich wyróżnia, ponieważ są one wielokrotnie wykorzystywane. Jedynym istotnym unikalnym procesem jest identyfikacja rozwiązania jako wzorca projektowego, a katalogi robią to doskonale.
yannis,

9

Wzorce projektowe: elementy oprogramowania obiektowego wielokrotnego użytku

alternatywny tekst

Z wikipedii :

Wzorce projektowe: elementy oprogramowania obiektowego wielokrotnego użytku to książka inżynierii oprogramowania opisująca powtarzające się rozwiązania typowych problemów w projektowaniu oprogramowania. Autorami książki są Erich Gamma, Richard Helm, Ralph Johnson i John Vlissides ze wstępem Grady Booch. Autorzy często określani są jako Gang of Four, GoF lub Go4. Książka podzielona jest na dwie części, przy czym pierwsze dwa rozdziały eksplorują możliwości i pułapki programowania obiektowego, a pozostałe rozdziały opisują 23 klasyczne wzorce projektowania oprogramowania. Książka zawiera przykłady w C ++ i Smalltalk.


3

Jedną z najlepszych stron z wzorami projektowymi jest Wiki Warda, pierwsza wiki. Zobacz http://c2.com/cgi/wiki?HistoryOfPatterns na stronie dobra startu w nim.

W 1987 r. Ward i Kent konsultowali się z grupą Tektronix Semiconductor Test Systems Group, która miała problemy z ukończeniem projektu. Postanowili wypróbować wzory, które badali. Podobnie jak Alexander, który powiedział, że mieszkańcy budynku powinni go zaprojektować, Ward i Kent pozwolili przedstawicielom użytkowników (trenerowi i inżynierom terenowemu) zakończyć projekt.

Ward wymyślił pięciokrotny „język”, który pomógł początkującym projektantom wykorzystać mocne strony Smalltalk i uniknąć jego słabości ...

Ward i Kent byli zaskoczeni (spartańską) elegancją interfejsu zaprojektowanego przez ich użytkowników. Podali wyniki tego eksperymentu na OOPSLA 87 w Orlando. Napisali stanowisko panelowe i zaprezentowali w warsztacie Norm Kerth na temat Skąd pochodzą przedmioty? Rozmawiali o wzorach, dopóki nie byli niebiescy na twarzy i osiągnęli wiele porozumienia, ale bez bardziej konkretnych wzorów nikt się nie rejestrował.

Tymczasem Erich Gamma był zajęty pisaniem i refleksją na temat projektowania obiektowego w ET ++ w ramach swojej pracy doktorskiej. Erich zdał sobie sprawę, że powtarzające się konstrukcje lub wzory są ważne. Pytanie naprawdę brzmiało, jak je uchwycić i przekazać.

Bruce Anderson wygłosił przemówienie na TOOLS 90, na którym obecny był ErichGamma; Erich lubił tę rozmowę. Bruce wygłosił referat na EcoopOopsla90 (Ottawa) i prowadził BOF o nazwie Toward an Architecture Handbook, w którym on, Erich Gamma, Richard Helm i inni rozmawiali o wzorach. To był pierwszy raz, kiedy Richard i Erich spotkali się i zdali sobie sprawę, że podzielają wspólne pomysły na temat kluczowych pomysłów związanych z pisaniem oprogramowania OO do wielokrotnego użytku.

Tuż przed ECOOP'91 Erich Gamma i Richard Helm, siedząc na dachu w Zurychu w upalny letni dzień, stworzyli bardzo skromne początki katalogu wzorów, które ostatecznie stały się DesignPatterns ...

Sprawy potoczyły się naprawdę podczas warsztatów OOPSLA, które Bruce prowadził w 1991 roku. Przypadkowo byli tam Erich Gamma, Richard Helm, Ralph Johnson i John Vlissides; później staną się Gangiem Czterech, który jest autorem książki Design Patterns ...


2

Myślę, że Refaktoryzacja do Wzorów może być użyteczna po prostu dlatego, że opisuje, w jaki sposób pewne desing / kod można przekształcić w wzorce w książce GoF. Może to pomóc w pokonaniu początkowej krzywej uczenia się. Aha, i zastanawia się również nad „Wzorowym szczęściem” :)

Można również znaleźć pierwsze trzy tomy architektury oprogramowania zorientowanego na wzorce.


1

Wzorce projektowe

Ta strona z samouczkami zawiera następujące podsekcje

  • Cel każdego wzoru
  • Struktura świata rzeczywistego dla wzoru projektowego
  • Opis problemu
  • Szczegółowa dyskusja na temat problemu
  • Lista kontrolna dotycząca sposobu dotarcia do wzoru
  • Praktyczne zasady przy dojściu do wzoru.
  • Fragmenty kodu dla wzorca projektowego, który obejmuje C #, C ++, Delphi, Java i PHP

Ta strona zawiera również przewodnik na temat Anti Patterns, UML i Refactoring.


Witryna SourceMaking na pierwszy rzut oka wygląda na uproszczoną, ale jest to naprawdę świetna referencja. Oprócz wzorców projektowych niektóre z antypateriałów dotyczących rozwoju, architektury i zarządzania projektami są przezabawne. Refaktoryzowane rozwiązania mogą pomóc ci uratować spotkanie, które nie jest w porządku. (Nieźle jak na wzór wzorcowy)
Cokolwiek

1

Oryginalna książka „Wzory projektowe: elementy oprogramowania obiektowego wielokrotnego użytku” jest dobrym źródłem informacji o wzorcach projektowych zorientowanych obiektowo.

Istnieje wiele innych książek. Kiedy potrzebuję krótkiej informacji, a moja książka GoF jest poza zasięgiem, Wikipedia zwykle ma wystarczającą ilość informacji na temat tych i innych wzorców projektowych.

To są te, których używam. Należy również zauważyć, że ludzie zaczęli stosować format wzorca do innych rzeczy, takich jak zarządzanie projektem.

Jeśli chcesz wiedzieć o antypatternach, o których powinieneś wiedzieć, znajdziesz dwie książki: „AntiPatterns: oprogramowanie do refaktoryzacji, architektury i projekty w kryzysie” oraz „Refaktoryzacja: ulepszanie projektu istniejącego kodu”, w której znajduje się sekcja kod pachnie, inna nazwa antypatternów.


1

„Zwinne zasady, wzorce i praktyki w języku C #” autorstwa Roberta C. Martina. Myślę, że on także ma wersję Java.

Ponadto nie jest to sam wzorzec, ale Domain Driven Design ma kilka świetnych koncepcji, nawet jeśli nie wybierzesz pełnego podejścia DDD.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

1

Jeśli jesteś zainteresowany wzorami projektowymi w C ++, wypróbuj Modern C ++ Design autorstwa Andrei Alexandrescu.

Ta książka mówi o tym, jak zaimplementować często używane wzorce, takie jak Factory, Singleton i Visitor w C ++. Mówi także o bardzo specyficznych dla C ++ tematach, takich jak inteligentne wskaźniki, metaprogramowanie szablonów i projektowanie klas oparte na zasadach.

Autor książek jest znanym autorytatywnym ekspertem

pionierskie prace nad projektowaniem opartym na polityce wdrożonym za pomocą metaprogramowania szablonów. Idee te zostały wyrażone w jego książce Modern C ++ Design i zostały po raz pierwszy zaimplementowane w jego bibliotece programistycznej, Loki. W swojej bibliotece MOJO zaimplementował także koncepcję „konstruktorów ruchów”. Wniósł wkład do C / C ++ Users Journal pod nazwą „Generic <Programming>” ...


1
czy mógłbyś wyjaśnić więcej na temat tego, co robi i do czego służy? „Tylko odpowiedzi” nie są mile widziane na Stack Exchange
gnat

@gnat: jak to jest?
Dima

cóż, twoja ostatnia edycja z pewnością wygląda na poprawę. Chociaż czytelnicy odpowiedź będzie prawdopodobnie korzystać z bardziej szczegółowe wyjaśnienie , kto jest Aleksandresku
komara

@gnat: skoro oczywiście wiesz, kim on jest, możesz edytować moją odpowiedź.
Dima
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.