Jaki jest najczęściej używany wzór projektowy? [Zamknięte]

24

Który wzór jest według Ciebie najbardziej popularny?

Tamara Wijsman
źródło
Oba, jeśli to możliwe ...
Tamara Wijsman
„zmienić zamiast polimorfizmu”?
mlvljr
@ Bigown: Powinieneś „zaakceptować” odpowiedź, która najbardziej Ci się podobała. Jeśli nie podoba Ci się żadna z odpowiedzi, zaoferuj nagrodę.
Macneil
2
głosował za zamknięciem, ponieważ nie jest konstruktywny - jest to w zasadzie ankieta. O ile ktoś nie ma cytowanych badań empirycznych, wszystkie odpowiedzi będą odgadnąć lub być faworytami (lub nie-faworytami), a głosy będą odzwierciedlać osobiste odczucia. Rezultatem końcowym będzie lista wzorów projektowych bez głębokości. Dlatego nie jest konstruktywny.
Steven A. Lowe,
@Steven: Jestem pewien, że Jay ma rację z The Big Ball of Mud. :-)
Tamara Wijsman

Odpowiedzi:

39

Jestem pewien, że najczęściej spotykaną jest „Wielka kula błota”. Niestety dla nas wszystkich.
http://en.wikipedia.org/wiki/Big_ball_of_mud

Sójka
źródło
Zgadzam się, kiedy zaczynasz nowy projekt, wszystko jest dobrze ustrukturyzowane i udokumentowane, ale w miarę upływu terminu wszystko kończy się jak wielka kula błota
Arturo Molina
3
@ Arturo - To jeden z możliwych powodów. Inne: 1) Mały projekt rozpoczęty przez niedoświadczonego programistę, który niespodziewanie odnosi sukces, a następnie wykracza poza swój pierwotny cel. 2) Tendencja niedoświadczonych programistów przydzielanych do konserwacji, którzy wtedy nie mają wskazówek ani nie rozumieją oryginalnej architektury, więc po prostu włamują się, a sytuacja pogarsza się z wiekiem systemu. 3) Zespół używa niewłaściwej technologii lub nowej technologii, której nie znają, i używa go słabo w nowym projekcie, i krater przed terminem :)
Jay
1
LOL - gdybym mógł dodać do ciebie więcej punktów, zrobiłbym to. Doskonała (i smutna) obserwacja.
luis.espinal
25

MVC i jego odmiany są zdecydowanie jednym z najlepszych wzorów.

ysolik
źródło
2
Chciałem powiedzieć, że pytanie PO jest głupie (nadal uważam, że tak jest). Jednak twoja odpowiedź jest prawie w porządku IMO. Jeśli istnieje jeden wzorzec (i jego odmiany), który jest właściwie używany konsekwentnie, to właśnie ten. +1 za dobrą odpowiedź.
luis.espinal
21

Jeśli mówisz o wzorach Gang-of-Four , musiałbym powiedzieć Singleton . To naprawdę smutny stan rzeczy - prawie tak, jakby programiści słyszeli o magii wzorców projektowych, a potem po prostu zatrzymywali się po pierwszym.

Jeśli mówisz o wzorach w stylu architektonicznym (innymi słowy, wzorach projektowych obejmujących wiele klas lub warstw), musiałbym powiedzieć MVC . Kilka innych popularnych to wzorzec repozytorium i lokalizator usług .

Jaco Pretorius
źródło
2
To jeszcze bardziej smutne, gdy weźmie się pod uwagę, że wiele osób uważa Singleton za antypattern!
RichardOD
1
@RichardOD, smutne, że ludzie uważają to za jedno, gdy tak nie jest, czy smutne, że ludzie używają go, gdy jest to anty-wzór?
Matt Olenik
Mam na myśli to, że to smutne, że jest tak popularne - wydaje się być ulubieńcem wywiadu. Ostatnim razem, gdy przeprowadzałem wywiad, zapytano mnie, jak kodować Singletona, a moją odpowiedzią było to, że nie użyłbym pojemnika IoC takiego jak Unity, aby sobie z tym poradzić.
RichardOD
@RichardOD - nie jest singleton, że jest uważany za anty-wzór. Wykorzystanie go w sposób niezgodny z przeznaczeniem stanowi anty-wzór. Bardzo niewiele przypadków faktycznie wymaga / potrzebuje singletonu, aw środowiskach z kontenerami kontrolującymi ziarnistość zasobów, nie są nawet potrzebne. Na przykład, gdy widzisz singleton w nowoczesnej bazie kodu Java, jest to zazwyczaj czerwona flaga dla użycia anty-wzorca (nie dotyczy samego wzorca singletonu).
luis.espinal
@Jaco - miałbym inne zdanie niż ty. Myślę, że kompozyt, strategia i szablon (i ich wielokrotne reinkarnacje) stały się o wiele bardziej powszechne niż singleton, szczególnie odkąd przez ostatnią dekadę koncentrowaliśmy się na strukturze strukturalnej nad dziedziczeniem.
luis.espinal
16

Obserwator

Jeśli kiedykolwiek korzystałeś z wydarzenia. Użyłeś Observera.

Steven Evers
źródło
To musi być zwycięzca!
Fredrik Wallenius
7

Dekorator

Dodaj funkcjonalność do obiektu w czasie wykonywania poprzez kompozycję. Mój osobisty faworyt.

Edycja: Również fabryka jest prawdopodobnie jedną z najczęstszych.

JD Isaacks
źródło
5

Fasada

Pomyśl o dowolnym interfejsie REST, takim jak Twitter lub interfejsy API SO. Ukrywa mnóstwo zaplecza, które, przynajmniej w przypadku Twittera, może być strasznie skomplikowane.

Czy obchodzi mnie, w których tweetach db table @ apklusk są przechowywane? I że ma szybką pamięć podręczną? I że @shemnon ma tak niską czytelność, że tweety zawsze nie mają pamięci? To magia fasady.

shemnon
źródło
5

Wzór strategii

Jeśli kiedykolwiek używałeś wstrzykiwania zależności, użyłeś wzorca strategii.

richeym
źródło
Uzgodnione, strategia oprócz szablonu i kompozytu (oraz ich wiele odmian i kombinacji)
luis.espinal
5

Dlaczego nikt jeszcze nie wspomniał o iteratorze ? Zwłaszcza ze wszystkimi mapami, które składają się na złożone struktury danych ... to ta, której najczęściej używam. Czy mówimy o wzorcach, które ponownie wdrażamy?

Na plażę
źródło
3

Dziwi mnie, że nikt nie wspominał o wzorcu Factory, z mojego doświadczenia, że ​​jest to jeden z najczęściej używanych (i również najbardziej nadużywanych) wzorów na rynku. Jeśli nie pierwszy, prawdopodobnie singleton powinien być pierwszy, pomyślałbym, że będzie to bliski sekund.

AlexC
źródło
3

Wraz z moją poprzednią odpowiedzią dodam nową, na którą wpadłem dzisiaj z mojej bestii z odziedziczonego projektu:

Kopiuj wklej

Podczas debugowania natrafiłem na fragment kodu wywołujący 2 funkcje o podobnych nazwach:

if(x)
   Func1
else
   Func2

Func1 i Func2 miały te same parametry. Wyciągnąłem je i zmieniłem, a są one w 100% takie same, z wyjątkiem wywołań Func1 Func3 i Func2 wywołań Func4. Wyciągnąłem je i zmieniłem. 100% to samo, z wyjątkiem 1 linii. Tak więc poprzedni programista postanowił skopiować i wkleić dwie 50-liniowe funkcje zagnieżdżone, zamiast dodawać parametr flagi, do 2 funkcji prywatnych używanych dokładnie w jednym miejscu. To sprawia, że ​​chcę płakać.

Jay
źródło
2

Mówiąc o wzorach Gang-of-Four, nie mogę wymyślić programu, który nie używa wzorca Observer. Ponadto, jak wspomniał Jaco, Singleton jest również bardzo używany, niestety stał się młotkiem (każdy programista używa go, nawet jeśli nie jest całkowicie potrzebny).

Cristian
źródło
1
Zabawne, ale nigdy nie musiałem używać Singletona. Jeśli potrzebuję jakiegoś miejsca do utrzymania stanu globalnego, umieszczam go w pliku konfiguracyjnym i używam normalnej klasy, aby uzyskać do niego dostęp.
Robert Harvey
Oczywiście w takich przypadkach nie jest to potrzebne ... co powiesz na to, kiedy naprawdę potrzebujesz jednego obiektu do wykonania zadania synchronicznie i bezpiecznego dla wątków. Singleton nie służy tylko do utrzymywania stanu niektórych zmiennych statycznych, jest to prawdziwy obiekt z prawdziwą robotą do wykonania itp.
Cristian
Jedynym czasem, kiedy widziałem taką potrzebę, są połączenia z bazą danych. To powiedziawszy, prawie każda klasa „Service” (czytaj: podobnie jak w fabryce) w tym projekcie w pracy jest singletonem, przechowywanym w $_SESSIONzmiennej PHP .
Tarka
2

Interpretator

Rzadko wdrażane, często używane. Selektory XPATH, XSLT, Regex, jQuery itp.

Jesse Millikan
źródło
1

Dziwi mnie, że nikt jeszcze nie powiedział „Konstruktor”. Lub „Adapter”. Prawdopodobnie nie są tak egzotyczne, jak niektóre inne wymienione, ale używam ich przez cały czas. Fabryka i fabryka abstrakcyjna są również bardzo popularne (ale są już zajęte).

Tim Claason
źródło
1

Specyfikacja

Nie sądzę, że jest wymieniony w GoF, ale ciągle używam jego odmian.

John Kraft
źródło
1

Najczęściej stosowanym wzorem projektowym jest oczywiście Spaghetti .

SK-logika
źródło
0

Na poziomie projektowania oprogramowania argumentowałbym, że kompozyt, strategia i szablon (oraz w mniejszym stopniu fabryka) są najczęściej używane. Przez ostatnią dekadę widzieliśmy wolę kompozycji niż dziedziczenia podczas budowania naszych systemów przy użyciu projektu OO. W rezultacie połączenie właśnie wspomnianych wzorów odgrywa znacznie ważniejszą rolę niż wszystkie inne IMO.

Architektonicznie opowiadałbym się za MVC w przedsiębiorstwie i wzorcami opartymi na automatach stanowych po osadzonej stronie rzeczy.

luis.espinal
źródło