Selon vous, quel modèle de conception est le plus populaire?
Selon vous, quel modèle de conception est le plus populaire?
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
MVC et ses variations sont certainement l'un des meilleurs modèles de conception.
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 .
Observateur
Si vous avez déjà utilisé un événement. Vous avez utilisé Observer.
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.
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.
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.
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?
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).
$_SESSION
variable PHP .
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).
Je ne pense pas qu'il soit répertorié dans le GoF, mais j'utilise des variations de celui-ci tout le temps.
Le motif de conception le plus fréquemment utilisé est, évidemment, les spaghettis .
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.