@Bigown: Vous devez alors "accepter" la réponse que vous avez le plus appréciée. Si vous n'aimez aucune des réponses, veuillez offrir une prime.
Macneil
2
voté pour fermer car pas constructif - il s'agit essentiellement d'un sondage. Sauf si quelqu'un a une étude empirique à citer, les réponses seront toutes des suppositions ou des favoris (ou des non-favoris) et les votes refléteront des sentiments personnels. Le résultat final sera une liste de modèles de conception sans profondeur. Par conséquent, pas constructif.
Steven A. Lowe
@Steven: Je suis sûr que Jay a raison avec The Big Ball of Mud. :-)
D'accord, lorsque vous démarrez un nouveau projet, tout est bien structuré et documenté, mais à l'approche de la date limite, tout finit comme une grosse boule de boue
Arturo Molina
3
@Arturo - C'est une des raisons possibles. Autres: 1) Petit projet démarré par un programmeur inexpérimenté qui connaît un succès inattendu, puis se développe au-delà de son objectif d'origine. 2) La tendance des programmeurs inexpérimentés affectés à la maintenance, qui n'ont alors pas de conseils ou de compréhension de l'architecture d'origine, alors ils piratent simplement les choses, et cela empire avec le vieillissement du système. 3) L'équipe utilise la mauvaise technologie, ou une nouvelle technologie qu'elle ne connaît pas et l'utilise mal sur un nouveau projet, et elle cratère avant la date limite :)
Jay
1
LOL - si je pouvais ajouter plus de points à vous, je le ferais. Excellente (et triste) observation.
luis.espinal
25
MVC et ses variations sont certainement l'un des meilleurs modèles de conception.
J'allais dire que la question du PO est plutôt idiote (je le crois toujours). Cependant, votre réponse est à peu près la bonne OMI. S'il y a un modèle (et ses variations) qui est à peu près utilisé de manière cohérente, c'est celui-ci. +1 pour votre bonne réponse.
luis.espinal
21
Si vous parlez de modèles de conception Gang-of-Four , je devrais dire Singleton . C'est une situation vraiment triste - presque comme si les programmeurs entendent parler de la magie des modèles de conception et s'arrêtent simplement après le premier.
Si vous parlez de modèles de style architectural (en d'autres termes, des modèles de conception qui s'étendent sur plusieurs classes ou couches), je devrais dire MVC . Quelques autres modèles populaires sont le modèle de référentiel et le localisateur de services .
C'est encore plus triste quand on considère que beaucoup de gens considèrent le Singleton comme un contre-modèle!
RichardOD
1
@RichardOD, triste que les gens le considèrent comme un quand il ne l'est pas, ou triste que les gens l'utilisent quand c'est un anti-modèle?
Matt Olenik
Ce que je veux dire, c'est que c'est triste qui est si populaire - il semble que ce soit un favori des interviews. La dernière fois que j'ai été interviewé, on m'a demandé comment je coderais un Singleton, et ma réponse a été que je n'utiliserais pas un conteneur IoC comme Unity pour gérer cela pour moi.
RichardOD
@RichardOD - ce n'est pas singleton qu'il est considéré comme un anti-modèle. C'est l'utilisation abusive de celui-ci qui est un anti-modèle. Très peu de cas exigent / nécessitent réellement un singleton, et dans les environnements avec des conteneurs qui contrôlent la granularité des ressources, ils ne sont même pas nécessaires. Quand vous voyez un singleton dans une base de code Java moderne, par exemple, qui est typiquement un drapeau rouge pour un anti-modèle d' utilisation (pas sur le modèle singleton lui - même.)
luis.espinal
@Jaco - J'aurais une opinion différente de vous. Je pense que le composite, la stratégie et le modèle (et leurs multiples réincarnations) sont devenus beaucoup, beaucoup plus répandus que le singleton, spécialement depuis que nous nous sommes concentrés sur la composition structurelle plutôt que sur l'héritage au cours de la dernière décennie.
luis.espinal
16
Observateur
Si vous avez déjà utilisé un événement. Vous avez utilisé Observer.
Pensez à n'importe quelle interface REST comme Twitter ou les API SO. Il cache un tas de trucs d'arrière-plan qui, au moins dans le cas des twitters, peuvent être horriblement complexes.
Est-ce que je me soucie dans quels tweets db tables @ apklusk sont stockés? Et qu'il a un cache rapide? Et que @shemnon a un si faible lectorat, les tweets sont toujours en mémoire? C'est la magie de la façade.
D'accord, stratégie en plus du modèle et du composite (et leurs multiples variations et combinaisons.)
luis.espinal
5
Pourquoi personne n'a encore mentionné l' itérateur ? Surtout avec toutes les cartes qui composent des structures de données complexes ... c'est celle que j'utilise le plus. Ou parlons-nous de modèles que nous ré-implémentons?
Je suis surpris que personne n'ait mentionné le modèle Factory, d'après mon expérience, c'est l'un des modèles les plus utilisés (et les plus maltraités). Si ce n'est pas le premier, le singleton devrait probablement être le premier, j'aurais pensé que ce serait une seconde proche.
En plus de ma réponse précédente, je vais en ajouter une nouvelle que j'ai rencontrée aujourd'hui de ma bête d'un projet hérité:
Copier coller
Pendant le débogage, je suis tombé sur un morceau de code appelant 2 fonctions de même nom:
if(x)
Func1
else
Func2
Func1 et Func2 avaient les mêmes paramètres. Je les ai retirés et j'ai fait une différence, et ils sont 100% identiques, sauf pour les appels Func1 Func3 et Func2 appelle Func4. Je les ai retirés et je les ai différenciés. 100% identique, sauf pour 1 ligne. Un programmeur précédent a donc décidé de copier et coller deux fonctions imbriquées de 50 lignes, au lieu d'ajouter un paramètre indicateur, à 2 fonctions privées utilisées à exactement 1 endroit. Ça me donne envie de pleurer.
En parlant de modèles de conception Gang-of-Four, je ne peux pas penser à un programme qui n'utilise pas le modèle Observer. De plus, comme Jaco l'a mentionné, Singleton est également très utilisé, malheureusement il est devenu un marteau (tout programmeur l'utilise même s'il n'est pas complètement nécessaire).
C'est drôle, mais je n'ai jamais eu besoin d'utiliser un Singleton. Si j'ai besoin d'un endroit pour conserver l'état global, je le mets dans un fichier de configuration et j'utilise une classe normale pour y accéder.
Robert Harvey
Bien sûr, dans ces cas, cela n'est pas nécessaire ... qu'en est-il lorsque vous avez vraiment besoin d'un objet pour effectuer un travail, de manière synchrone et thread-safe. Singleton n'est pas seulement pour maintenir l'état de certaines variables statiques, c'est un véritable objet avec un vrai travail à faire, etc.
Cristian
La seule fois où j'en ai vu le besoin, ce sont les connexions à la base de données. Cela dit, presque chaque classe "Service" (lire: similaire à l'usine) de ce projet à l'œuvre est un singleton, stocké dans la $_SESSIONvariable PHP .
Tarka
2
Interprète
Rarement implémenté, souvent utilisé. Sélecteurs XPATH, XSLT, Regex, jQuery, etc.
Je suis surpris que personne n'ait encore dit "Builder". Ou "Adaptateur". Ils ne sont probablement pas aussi exotiques que certains des autres mentionnés, mais je les utilise tout le temps. Factory et Abstract Factory sont également très courants (mais ils sont déjà pris).
Au niveau de la conception de logiciels, je dirais que le composite, la stratégie et le modèle (et dans une moindre mesure, l'usine) sont les plus largement utilisés. Au cours de la dernière décennie, nous avons constaté une préférence pour la composition plutôt que l'héritage lors de la construction de nos systèmes en utilisant une conception OO. En conséquence, la combinaison des modèles mentionnés ci-dessus joue un rôle beaucoup plus important que tous les autres OMI.
Sur le plan architectural, je plaiderais pour MVC sur l'entreprise et des modèles basés sur des machines d'état du côté embarqué des choses.
Réponses:
Je suis presque sûr que le plus courant est «The Big Ball of Mud». Malheureusement pour nous tous.
http://en.wikipedia.org/wiki/Big_ball_of_mud
la source
MVC et ses variations sont certainement l'un des meilleurs modèles de conception.
la source
Si vous parlez de modèles de conception Gang-of-Four , je devrais dire Singleton . C'est une situation vraiment triste - presque comme si les programmeurs entendent parler de la magie des modèles de conception et s'arrêtent simplement après le premier.
Si vous parlez de modèles de style architectural (en d'autres termes, des modèles de conception qui s'étendent sur plusieurs classes ou couches), je devrais dire MVC . Quelques autres modèles populaires sont le modèle de référentiel et le localisateur de services .
la source
Observateur
Si vous avez déjà utilisé un événement. Vous avez utilisé Observer.
la source
Décorateur
Ajoutez des fonctionnalités à un objet lors de l'exécution via la composition. Mon préféré.
Edit: Aussi Factory est probablement l'un des plus courants.
la source
Façade
Pensez à n'importe quelle interface REST comme Twitter ou les API SO. Il cache un tas de trucs d'arrière-plan qui, au moins dans le cas des twitters, peuvent être horriblement complexes.
Est-ce que je me soucie dans quels tweets db tables @ apklusk sont stockés? Et qu'il a un cache rapide? Et que @shemnon a un si faible lectorat, les tweets sont toujours en mémoire? C'est la magie de la façade.
la source
Modèle de stratégie
Si vous avez déjà utilisé l'injection de dépendance, vous avez utilisé le modèle de stratégie.
la source
Pourquoi personne n'a encore mentionné l' itérateur ? Surtout avec toutes les cartes qui composent des structures de données complexes ... c'est celle que j'utilise le plus. Ou parlons-nous de modèles que nous ré-implémentons?
la source
Je suis surpris que personne n'ait mentionné le modèle Factory, d'après mon expérience, c'est l'un des modèles les plus utilisés (et les plus maltraités). Si ce n'est pas le premier, le singleton devrait probablement être le premier, j'aurais pensé que ce serait une seconde proche.
la source
En plus de ma réponse précédente, je vais en ajouter une nouvelle que j'ai rencontrée aujourd'hui de ma bête d'un projet hérité:
Copier coller
Pendant le débogage, je suis tombé sur un morceau de code appelant 2 fonctions de même nom:
Func1 et Func2 avaient les mêmes paramètres. Je les ai retirés et j'ai fait une différence, et ils sont 100% identiques, sauf pour les appels Func1 Func3 et Func2 appelle Func4. Je les ai retirés et je les ai différenciés. 100% identique, sauf pour 1 ligne. Un programmeur précédent a donc décidé de copier et coller deux fonctions imbriquées de 50 lignes, au lieu d'ajouter un paramètre indicateur, à 2 fonctions privées utilisées à exactement 1 endroit. Ça me donne envie de pleurer.
la source
En parlant de modèles de conception Gang-of-Four, je ne peux pas penser à un programme qui n'utilise pas le modèle Observer. De plus, comme Jaco l'a mentionné, Singleton est également très utilisé, malheureusement il est devenu un marteau (tout programmeur l'utilise même s'il n'est pas complètement nécessaire).
la source
$_SESSION
variable PHP .Interprète
Rarement implémenté, souvent utilisé. Sélecteurs XPATH, XSLT, Regex, jQuery, etc.
la source
Je suis surpris que personne n'ait encore dit "Builder". Ou "Adaptateur". Ils ne sont probablement pas aussi exotiques que certains des autres mentionnés, mais je les utilise tout le temps. Factory et Abstract Factory sont également très courants (mais ils sont déjà pris).
la source
spécification
Je ne pense pas qu'il soit répertorié dans le GoF, mais j'utilise des variations de celui-ci tout le temps.
la source
Le motif de conception le plus fréquemment utilisé est, évidemment, les spaghettis .
la source
Au niveau de la conception de logiciels, je dirais que le composite, la stratégie et le modèle (et dans une moindre mesure, l'usine) sont les plus largement utilisés. Au cours de la dernière décennie, nous avons constaté une préférence pour la composition plutôt que l'héritage lors de la construction de nos systèmes en utilisant une conception OO. En conséquence, la combinaison des modèles mentionnés ci-dessus joue un rôle beaucoup plus important que tous les autres OMI.
Sur le plan architectural, je plaiderais pour MVC sur l'entreprise et des modèles basés sur des machines d'état du côté embarqué des choses.
la source