it-swarm-fr.com

Les modèles de conception sont-ils généralement une force pour le bien ou le mauvais?

J'ai entendu dire que cela a fait valoir que les modèles de conception sont la meilleure chose depuis le pain tranché. J'ai également entendu dire que cela a fait valoir que les schémas de conception ont tendance à exacerber le "deuxième syndrome du système", qu'ils sont massivement surutilisés et qu'ils font que leurs utilisateurs pensent qu'ils sont de meilleurs concepteurs qu'ils ne le sont vraiment.

J'ai tendance à rentrer plus près de l'ancien camp, mais récemment, j'ai vu des conceptions où presque toutes les interactions sont remplacées par une relation d'observateur et que tout est un singleton.

Donc, compte tenu des avantages et des problèmes, sont des modèles de conception généralement bonne ou mauvaise, et pourquoi?

33
Fishtoaster

Les modèles de conception sont une langue, pas de conseils pour écrire un programme ou un contrat. Leur utilisation principale est une explication A Posteriori Comment un composant ou un système était (ou sera) mis en œuvre. Au lieu d'aller dans trop de détails, vous pouvez simplement dire quelques mots qui peuvent décrire la mise en œuvre assez bien pour que l'auditeur puisse comprendre comment cela fonctionne et ce qui y était important.

Alex: Hé, comment les fichiers de configuration sont-ils créés?

Bob: Ils sont générés par une usine, qui réside dans config.h.

Maintenant, Alex sait que la création de fichiers de configuration implique des préparations non triviales, car sinon leur création ne serait pas enfermée dans une usine.

Cependant, si Bob était un phony à tête motrice et il suffit d'utiliser des modèles ici et là, Alex ne pouvait rien dire à propos de la création de configuration, car Bob a utilisé usine tout au long de l'usine. Cela conduirait également à une complexité excessive dans le programme.

Donc, programme d'abord, puis les modèles de tape dans votre code, et non inversement. C'est comme ça qu'ils sont utilisés efficacement.

54
P Shved

les modèles de conception sont géniaux. Lorsqu'il est utilisé correctement, ils rendent le code plus maintenu, plus facile à lire et à utiliser. Une partie d'être un bon programmeur consiste à savoir quand arrêter et voir que tout refactoring supplémentaire dépassera les avantages. L'utilisation de schémas de conception ne fait que quelqu'un un bon programmeur, mais sachant quand et où les utiliser. Tout comme avec autre chose dans ce monde modèle de conception peut être pris à l'extrême et être maltraité. Je sais que je cherche toujours (et que je serai depuis longtemps) pour cet équilibre parfait dans mon code où chaque modèle de conception a un but et tombe parfaitement en place comme un puzzle de jigsaw.

14
ysolik

Les modèles de conception sont excellents, s'ils sont utilisés correctement.

Il est utile de rappeler que l'idée de motifs de conception est originaire d'architecture. L'architecture peut varier sauvagement. Cependant, de nombreuses idées de base sont présentes dans n'importe quel bâtiment. De cette manière, pensez aux modèles en tant que blocs de construction de design. Il est important de noter que tous les bâtiments n'incluent pas tous les modèles architecturaux possibles.

Dis que vous concevez une maison. Plutôt que d'avoir la porte d'entrée ouverte sur la rue, vous voulez une zone abritée avant d'entrer dans la maison, c'est-à-dire un antérieur. Cette zone conviendra à un certain motif. À savoir, il aura deux entrées, des murs et probablement un toit. Remarque, le motif ne spécifie pas les portes, les fenêtres ou le nombre de murs. Dans la plupart des implémentations, il y aura deux portes, quatre murs et peut-être des fenêtres. Cependant, le motif décrit une zone fermée avec deux entrées. On mène à l'antéromoom lui-même de l'extérieur de la maison et l'autre conduit au reste de la maison. La clé ici, c'est que si vous voulez une antérieureuse, vous devez enfermer une zone et fournir deux entrées dans cette zone.

Les problèmes typiques présentant des modèles de conception dans la programmation sont plus utilisés et la conviction qu'ils sont des balles d'argent pour résoudre tout problème. Ils ne sont pas. Ce sont des moyens de communiquer et de penser à des idées de programmation utiles. Si les bits de syntaxe d'une langue particulière sont les briques et le mortier, les modèles décrivent des moyens utiles de les organiser pour répondre à certains besoins.

10
George Marian

Je considère que les conceptions de conception plus de " conseils " qu'un contrat inchangable qui doit absolument être suivi. Pourquoi? Précisément pour la raison que vous avez mentionnée. Après un modèle de conception dans tout ce qui conduit à un gros gâchis de code qui défait le but d'utiliser un motif en premier lieu.

C'est pourquoi je déteste des sites comme - Pratiques Java . Bien sûr, certaines des idées sont bonnes, mais l'auteur a ensuite décidé d'écrire un programme entier (plus un cadre) après chaque modèle de conception qu'il a mentionné. L'auteur a également écrit chaque article avec de grandes citations effrayantes faisant le lecteur pense que réel Java Les pratiques sont horribles et doivent être évitées comme la peste.

TL; DR: Utilisez des dessins de conception. Il suffit de ne pas les abuser

7
TheLQ

On dit souvent que les modèles de conception fournissent une solution prête à l'emploi pour les problèmes de programmation. Quel genre de problèmes sont-ils? "Comment puis-je modifier le comportement d'objet, mais isoler les changements du reste du système?"

Les modèles GOF sont reconnus pour fournir cette isolation (encapsulation) du reste du système, mais il est souvent difficile de savoir quelle partie du système reçoit une variabilité grâce à l'utilisation de leurs modèles de conception. Au lieu de suivre le régime de classification, ils ont proposé (créé, comportemental et structurel), j'ai chargé les différences de motifs et ont proposé deux autres régimes pour classer leurs schémas: la hiérarchie de cycle de vie et de l'encapsulation de composants.

design pattern encapsulation hierarchy

Comme vous pouvez le constater à partir de cette table pour la hiérarchie d'encapsulation, des modèles de conception peuvent être appliqués à tous les niveaux d'un composant. Mais cela aurait-il un sens? Le composant doit-il devoir fournir une variation comportementale au niveau de l'encapsulation proposé et est le modèle approprié utilisé pour ce niveau? Si ces questions ne sont pas correctement répondues, les modèles de conception sont probablement mal appliqués. Ce n'est pas parce qu'un pivot vertical pourrait être intégré à la cabine d'une voiture ne fait pas une idée intelligente.

0
Huperniketes

Les motifs de conception peuvent avoir un talent de vous dessiner, mais il en va de même pour le codage en général. Il est facile de se faire séduire en écrivant la boîte à outils ultime - il suffit de garder à l'esprit Yagni pour vous empêcher de vous arrêter de bien sûr, obtenez une idée de la manière dont la structure a besoin de l'application. IMO Ceci est juste à l'individu et une marque de leur expérience/son jugement.

0
sunwukung

Je préférerai ceux au milieu. Comme l'affiche souligné à juste titre, une compréhension des modèles ne fait pas de vous un bon développeur. D'autre part, une compréhension du modèle vous aidera à devenir un bon développeur.

Comprendre la relation des schémas et voir un modèle dans un projet (lors de la phase de conception), c'est ce qui vous fera un bon développeur.

0
gozie

Je pense que les Datterns design ne sont pas de quelque chose que vous essayez constamment d'appliquer à votre code. Pour moi, il s'agit principalement d'une langue commune pour les développeurs. Il est plus facile de dire "nous suivons un modèle de constructeur" que d'expliquer le tout encore et encore.

Je suis en train de relire modèles d'architecture d'applications d'entreprise en ce moment, car je trébuche sur beaucoup de code qui suit l'un des modèles de ce livre. Je ne pense pas que cela a été choisi intentionnellement de suivre l'un des modèles, mais cela aide définitivement si vous pouvez dire "c'est un script de transaction" et tout le monde a clairement compris ce que cela signifie.

Mais j'aime bien l'idée que vous pouvez choisir parmi un catalogue préparé de modèles, lorsque vous concevez une nouvelle fonctionnalité ou une nouvelle application. Pourquoi réinventer tout s'il existe des solutions éprouvées pour certains problèmes?

0
cringe

En utilisant une analogie à l'argent, un modèle de conception devrait être considéré comme une solution avec des coûts de coût en capital élevé, mais des coûts d'exploitation faibles. Les modèles de conception coûtent une fortune initiale en termes de codage supplémentaire, de verbacacité et du poids conceptuel de l'indirection supplémentaire qu'ils créent. Ils ont également tendance à verrouiller d'autres aspects de votre conception. Par exemple, l'utilisation de la méthode de modèle vous oblige à programmer dans un style fortement OO).

Toutefois, si vous devez résoudre beaucoup de problèmes étroitement liés qui varient de quelques façons ou devront certainement modifier un morceau de code fortement de manière spécifique à l'avenir, les coûts initiaux peuvent en valoir la peine parce que la conception Les modèles ajoutent une flexibilité à votre code. Les modifications ou la solution au second de votre ensemble de problèmes étroitement liés seront beaucoup plus faciles avec les modèles que non.

0
dsimcha

Les deux camps sont corrects - ils sont une force pour le bien lorsqu'il est utilisé correctement, une force pour de mauvaises si elles sont éclaboussées partout.

0
JohnL