Qu'est-ce que la programmation basée sur des modèles?

16

Quelqu'un peut-il expliquer l'obsession des modèles et des anti-modèles dans la programmation? Je demande parce que je n'ai absolument aucune idée de ce que signifient les motifs. Face à une tâche de programmation, je réfléchis un peu au problème, notez certaines structures de données qui, selon moi, seront pertinentes, prototyper une solution, séparer certains modules et itérer. Nulle part dans le processus je ne pense "Oh, j'ai besoin du modèle FunkyLookyTastic ici".

davidk01
la source
12
L'obsession des motifs est en quelque sorte un anti-motif
Anto
1
Sur le dernier point, je suis en partie d'accord. Il y a quelques modèles que je nommerai, mais certains modèles de manuels semblent être des variantes mineures les uns des autres, et le bit intéressant est généralement la façon dont vous adaptez le modèle pour l'adapter au cas spécifique, donc vous ne devriez certainement pas être dogmatique sur les choses.
Steve314
1
Vous programmez dans un langage dynamique? De nombreux modèles auxquels les gens font référence sont des moyens de contourner les limitations de Java.
johncip
De plus, le traitement de chaque problème séparément n'est pas adapté à la taille de l'équipe. Par exemple, avec un framework MVC, les modèles sont souvent normalisés mais les vues peuvent traiter des données dérivées. Il y a plusieurs façons de gérer cela, mais les gens ne devraient pas résoudre ce problème (potentiellement différemment) chaque fois qu'il est rencontré. Et ceux qui lisent le code ne devraient pas avoir à comprendre comment le problème X a été résolu dans ce cas, par opposition à tous les autres.
johncip

Réponses:

19

Un modèle est une approche courante pour résoudre un type de problème courant; Rien de plus et rien de moins. En les connaissant et en les comprenant, vous pouvez utiliser les expériences des autres pour vous guider vers le type de solution qui a bien fonctionné, éviter les écueils rencontrés dans le passé et discuter de la solution en utilisant une terminologie familière à ceux qui connaître ce modèle.

Bien sûr, vous pouvez trouver une bonne solution sans utiliser explicitement un modèle, et tout aussi bien proposer une mauvaise solution en essayant d'appliquer un modèle qui ne correspond pas vraiment à votre problème particulier. Je pense que «l'obsession» que vous observez vient généralement de personnes qui viennent de découvrir le concept, et pensent qu'il est plutôt plus puissant qu'il ne l'est réellement. La plupart des gens les reconnaîtront rapidement pour ce qu'ils sont: un outil utile, pas une balle magique.

Les anti-modèles, en revanche, sont des comportements couramment observés qui ont tendance à réduire la qualité du code. Encore une fois, il est utile de connaître et de comprendre certains d'entre eux afin d'éviter un tel comportement et d'essayer de le corriger (avec des arguments motivés) lorsque vous l'observez dans d'autres. Certains décriraient la surutilisation des modèles comme un anti-modèle.

Mike Seymour
la source
1
Par exemple, les fameux modèles orientés objets en gang de quatre ont été compilés à partir de l'expérience des auteurs et des personnes avec lesquelles ils étaient en contact. La raison pour laquelle certains modèles ont plusieurs noms - ils ont été réinventés indépendamment et nommés plusieurs fois. La plupart des programmeurs réinventeront naturellement quelques modèles laissés à eux-mêmes - et quelques antipatterns, bien sûr.
Steve314
3
l '«obsession» que vous observez vient généralement de personnes qui viennent de découvrir le concept - surtout vrai, à mon humble avis. il y a ceux, je crois, qui pensent que vous devez aborder un problème avec des modèles prêts ... et si votre solution ne comprend pas de modèles évidents, alors votre solution est mauvaise ... nous devrions prendre le temps d'apprendre les modèles, comment ils sont utilisés, et quand et quand ne pas les utiliser - ils font partie de notre boîte à outils
IAbstract
9

Les modèles sont à la fois la connaissance distillée des programmeurs dans un livre de cuisine et un moyen utile pour les programmeurs de communiquer.

Comme d'autres réponses le suggèrent, les modèles sont vraiment des solutions communes à des problèmes courants. L'avantage est que vous pouvez souvent obtenir de meilleures solutions en utilisant un modèle existant ou découvrir des pièges probables avant de commencer à coder.

L'autre avantage est lorsque vous parlez à quelqu'un de votre code. Les modèles sont un autre type de jargon qui condensent de longues descriptions en quelques mots. Essayez d'expliquer "alors nous avons un observateur ajouté par l'usine" sans se référer aux modèles. Vous pouvez le faire, mais cela prend beaucoup de temps.


la source
2
+1 pour la communication. La routine quotidienne se passe beaucoup plus facilement lorsque tout le monde est sur la même longueur d'onde et a un lexique commun.
Ampt
3

La plupart des développeurs grinceront des dents à tout nouveau paradigme ou méthodologie qui entre en jeu. Je l'ai fait quand j'ai entendu parler des modèles de conception pour la première fois. Les modèles de conception sont exactement ce que leur nom suggère: une conception ou un modèle pour créer des classes et modéliser leur comportement et leur interaction de manière prévisible

Jetez un œil aux maisons. Ils ont quelques similitudes. Chaque maison a un séjour, une cuisine, une chambre, une salle de bains, des toilettes pour un minimum. Personne ne construira une maison sans salle de bain, non? Les appartements ont un modèle différent des bunglows. Les châteaux ont un modèle complètement différent. Les vêtements aussi ont des motifs. Une veste et une chemise formelle ont toutes deux le même design de base, mais elles ont des comportements différents: vous ne porterez pas de veste de cow-boy pour une interview. De même, les classes et leurs actions peuvent être regroupées en fonction de leur comportement et de leur conception. En regardant les éléments communs dans leurs comportements, vous obtenez des modèles de conception pour les classes.

À mon sens, les modèles de conception ne sont importants que si la réutilisabilité et l'extensibilité sont les principales préoccupations. Si vous créez de petites applications (disons moins de 10 classes), vous n'en aurez peut-être pas du tout besoin. Mais les grands projets, en particulier ceux qui ont de grandes équipes qui y travaillent et qui ont une longue maintenance et des cycles d'ajout de fonctionnalités, auront certainement besoin de modèles. Ce n'est même pas une option dans les grands projets.

Jetez un œil à quelques tutoriels en ligne sur les modèles. Wikipedia a une bonne série d'articles. Ce site est bon aussi: http://sourcemaking.com/ . Si vous êtes un programmeur expérimenté, vous constaterez que vous avez rencontré quelques modèles, peut-être même mis en œuvre quelque chose de similaire vous-même sans le savoir sous un nom particulier.

Ne les ignorez pas complètement! Vous les trouverez peut-être utiles à l'avenir, sinon maintenant. La clé pour aborder les modèles de conception avec un esprit ouvert est de demander: "Que se passera-t-il si je n'utilise pas de modèles de conception?" Les modèles ne sont pas conçus comme des «remèdes» (bien que vous puissiez les utiliser comme remède à un problème); ils incarnent plutôt le dicton "mieux vaut prévenir que guérir".

Tout de même, je mettrais en garde contre une obsession de mettre en œuvre des modèles où et quand vous voyez un petit prétexte pour l'utiliser. J'ai rencontré ce problème dans un projet où l'architecte était convaincu que sans DP, le projet serait un désastre complet. Nous avons eu une réunion de groupe où les ingénieurs ont changé de conception et ont souligné que de nombreux modèles qu'il recommandait n'auraient aucune utilité autre que de montrer "wow look at the beautiful patterns". Il a fallu beaucoup de convaincant et quelques négociations pour réduire le nombre de lieux où les modèles étaient utilisés uniquement en fonction des besoins.

DPD
la source
1

Les personnes qui ont répondu sont correctes en termes de "programmation basée sur des modèles" comme on le pense normalement. J'ai une définition légèrement différente que je trouve plus pertinente pour ce que je fais et j'ai tendance à utiliser la «programmation basée sur des modèles» pour décrire une approche de plugin plutôt qu'une approche de planification.

Depuis que je programme des plugins jQuery, un plugin de cloud CMS et des plugins de commerce électronique, la «programmation basée sur des modèles» dans cette perspective signifie examiner la technologie de base et les cas d'utilisation existants et frapper les plus statistiquement pertinents. Les plugins en particulier doivent être très basés sur des modèles afin qu'ils s'intègrent bien dans le contexte de programmation.

Cependant, il est préférable d'appliquer un modèle APRÈS avoir vu des cas d'utilisation valides sur plusieurs projets afin qu'il soit statistiquement valide pour une réutilisation.

Jason
la source