J'ai toujours reconnu l'importance d'utiliser des modèles de conception. Je suis curieux de savoir comment les autres développeurs choisissent le plus approprié. Utilisez-vous une série de caractéristiques (comme un organigramme) pour vous aider à décider?
Par exemple:
Si les objets sont liés, mais que nous ne voulons pas spécifier de classe concrète, considérons Résumé
Lorsque l'instanciation est laissée aux classes dérivées, considérez Factory
Besoin d'accéder séquentiellement aux éléments d'un objet agrégé, essayez Iterator
ou quelque chose de similaire?
c#
design-patterns
Carl Sagan
la source
la source
Réponses:
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 unFlyweight
là-bas et peut-être unSingleton
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 :
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).
la source
Je me demande:
Le processus de choix d'un modèle logiciel n'est pas différent du processus de choix d'une structure de données, sauf qu'en choisissant une structure de données, vous évalueriez les performances et les caractéristiques de la mémoire de votre problème, et choisiriez la structure de données qui correspond le mieux à ces caractéristiques.
la source