@ 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. :-)
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.
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 .
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.
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.
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?
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.
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ć.
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).
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.
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).
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.
Odpowiedzi:
Jestem pewien, że najczęściej spotykaną jest „Wielka kula błota”. Niestety dla nas wszystkich.
http://en.wikipedia.org/wiki/Big_ball_of_mud
źródło
MVC i jego odmiany są zdecydowanie jednym z najlepszych wzorów.
źródło
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 .
źródło
Obserwator
Jeśli kiedykolwiek korzystałeś z wydarzenia. Użyłeś Observera.
źródło
Dekorator
Dodaj funkcjonalność do obiektu w czasie wykonywania poprzez kompozycję. Mój osobisty faworyt.
Edycja: Również fabryka jest prawdopodobnie jedną z najczęstszych.
źródło
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.
źródło
Wzór strategii
Jeśli kiedykolwiek używałeś wstrzykiwania zależności, użyłeś wzorca strategii.
źródło
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?
źródło
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.
źródło
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:
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ć.
źródło
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).
źródło
$_SESSION
zmiennej PHP .Interpretator
Rzadko wdrażane, często używane. Selektory XPATH, XSLT, Regex, jQuery itp.
źródło
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).
źródło
Specyfikacja
Nie sądzę, że jest wymieniony w GoF, ale ciągle używam jego odmian.
źródło
Najczęściej stosowanym wzorem projektowym jest oczywiście Spaghetti .
źródło
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.
źródło