Une idée fausse clé dans le monde du codage actuel est que les modèles sont des blocs de construction. Vous prenez un AbstractFactory
ici et un Flyweight
là-bas et peut-être un Singleton
là-bas et vous les connectez avec XML et presto, vous avez une application qui fonctionne.
Ils ne sont pas.
Hmm, ce n'était pas assez gros.
Les motifs ne sont pas des blocs de construction
C'est mieux.
Un modèle est quelque chose que vous utilisez lorsque vous constatez que vous avez un problème - vous avez besoin d'une certaine flexibilité que le modèle fournit, ou que vous êtes tombé sur lorsque vous créez un petit langage dans le fichier de configuration et que vous dites «attendez un instant, arrêtez, c'est son propre interprète que j'écris - c'est un problème connu et résolu, utilisez un modèle d'interprète . "
Mais notez que c'est quelque chose que vous découvrez dans votre code, pas quelque chose avec lequel vous commencez. Les créateurs de Java n'ont pas dit "Oh, nous allons mettre un Flyweight dans l'entier" au début, mais ont plutôt réalisé un problème de performance qui pourrait être résolu par un flyweight .
Et donc, il n'y a pas de "diagramme de flux" que vous utilisez pour trouver le bon modèle. Le modèle est une solution à un type spécifique de problème qui a été rencontré à maintes reprises et dont les éléments clés sont distillés dans un modèle.
Commencer avec le Pattern, c'est comme avoir une solution et chercher un problème. C'est une mauvaise chose: cela conduit à une ingénierie excessive et finalement à une rigidité dans la conception.
Lorsque vous écrivez du code, lorsque vous réalisez que vous écrivez une usine, vous pouvez dire "ah ha! C'est une usine que je suis sur le point d'écrire" et utilisez votre connaissance du modèle d'usine pour écrire rapidement le prochain morceau de sans essayer de redécouvrir le modèle Factory. Mais vous ne commencez pas par "J'ai une classe ici, j'écrirai une usine pour qu'elle soit flexible" - parce que non.
Voici un extrait d'une interview avec Erich Gamma (de Gamma, Helm, Johnson et Vissides ): Comment utiliser les modèles de conception :
Essayer d'utiliser tous les motifs est une mauvaise chose, car vous vous retrouverez avec des conceptions synthétiques - des conceptions spéculatives qui ont une flexibilité dont personne n'a besoin. De nos jours, le logiciel est trop complexe. Nous ne pouvons pas nous permettre de spéculer sur ce qu'il devrait faire d'autre. Nous devons vraiment nous concentrer sur ce dont il a besoin. C'est pourquoi j'aime refactoriser les modèles. Les gens devraient apprendre que lorsqu'ils ont un type particulier de problème ou d'odeur de code, comme les gens l'appellent de nos jours, ils peuvent aller dans leur boîte à outils de modèles pour trouver une solution.
La meilleure aide pour le "quoi utiliser, quand" est probablement la page Wikipedia pour le modèle de conception de logiciels - la section "Classification et liste" décrit la catégorie dans laquelle chaque modèle se trouve et ce qu'il fait. Il n'y a pas d'organigramme; la description, il y a probablement le meilleur que vous trouverez comme un court extrait pour "quoi utiliser, quand."
Notez que vous trouverez différents modèles dans différents domaines de programmation. La conception Web a son propre ensemble de modèles tandis que JEE (pas la conception Web) a un autre ensemble de modèles. Les modèles de programmation financière sont complètement différents de ceux de la conception d'interface utilisateur d'application autonome.
Ainsi , toute tentative de les énumérer tous est par nature incomplète. Vous en trouvez un, découvrez comment l'utiliser, puis il devient finalement une seconde nature et vous n'avez plus besoin de penser à comment ou quand l'utiliser à nouveau (jusqu'à ce que quelqu'un vous demande de l'expliquer).