Que faire si je n'utilise pas de modèles de conception logicielle? [fermé]

17

À quels types de problèmes puis-je faire face si je n'utilise pas de modèles de conception logicielle? Pouvez-vous me parler des problèmes d'approche de la conception en utilisant des techniques orientées objet standard?

iStudent
la source
24
Un certain nombre de modèles de conception de logiciels sont assez évidents. Vous devez tous les connaître très bien pour vous assurer que vous ne les utilisez pas - probablement suffisamment bien pour que vous puissiez aussi bien les utiliser!
James McLeod
18
En tant que point secondaire à @JamesMcLeod, de nombreux "modèles de conception" sont très évidents et les choses que tout le monde ferait de toute façon. Pourquoi leur donnons-nous des noms, alors? Aux fins de communication. "J'utilise le modèle X" a une densité sémantique beaucoup plus grande que d'expliquer votre solution dans l'espoir que l'autre extrémité ira "Oh oui! Je l'ai fait aussi, sauf que j'ai appelé mes variables ...".
Phoshi
6
@AJMansfield Certains des pires codes que j'ai vu impliquaient un enthousiasme excessif pour les modèles de conception.
Erik Reppen
5
@ErikReppen le blâme pour la surutilisation des modèles de conception doit être attribué à la personne qui le fait. De mon point de vue, le problème central n'est pas dans les modèles de conception eux-mêmes, mais dans la généralisation excessive (en partie en raison du manque de supervision architecturale) et la suringénierie (parfois par des comités d'ingénieurs).
rwong
5
"Design Patterns" est un lexique, pas une technique.
Kaz Dragon

Réponses:

76

Vous manquez le point.

Les modèles de conception existent intrinsèquement lors de la conception de logiciels, tout comme les modèles structurels existent dans le monde. Même si vous ne connaissez pas le nom des choses, vous finirez par constater que certaines structures physiques sont bien adaptées à certains problèmes. Vous constaterez qu'une forme triangulaire de barres de bois / métal / etc. est une structure très stable, mais uniquement sur un plan. Vous constaterez que les briques carrées présentent certains avantages par rapport aux rondes ...

De même, certaines structures logicielles sont en quelque sorte uniques ou optimales. Vous finirez par les trouver et les utiliser peu importe si vous connaissez leurs noms . C'est le cœur de ce que sont les modèles de conception - ce sont des noms pour ces structures que les programmeurs expérimentés connaissent et utilisent de toute façon. Il donne aux programmeurs la possibilité de communiquer de manière beaucoup plus uniforme et succincte. Il permet également aux programmeurs de réfléchir plus consciemment au concept de modèles.

Donc, les deux points clés que j'essaie de faire:

  1. Vous ne pouvez pas ne pas utiliser de modèles de conception.
  2. En ne connaissant pas les noms des choses que vous utilisez, vous aurez du mal à travailler en équipe.
Telastyn
la source
12
+1: Tout à fait raison. J'ai commencé le développement OO avant que les modèles de conception ne deviennent connus ou populaires. Oui, nous avons également inventé des choses comme des usines, des singletons et quelque chose qui, lorsque vous le regardiez sous un jour lumineux, ressemble au modèle de stratégie. Le fait est maintenant que je connais des modèles de conception Je sais que les usines étaient OK mais auraient pu être mieux faites, les Singletons ont été mal faites et ce qui aurait pu être un modèle de stratégie aurait été beaucoup mieux s'il avait en fait été un modèle de stratégie.
Binary Worrier
3
... En savoir plus sur les modèles de conception et apprendre à les utiliser correctement vous fait gagner beaucoup de temps, vous êtes moins susceptible d'essayer de réinventer la roue, vous empêche de vous diriger vers une mauvaise conception et de créer de mauvaises solutions. Aspirez-le et apprenez les modèles, utilisez-les lorsqu'ils fonctionnent pour vous et ne les utilisez pas lorsqu'ils ne le feront pas.
Binary Worrier
1
Et cela résume exactement mon point de vue sur les modèles. Ce sont de merveilleux outils pour communiquer ce que vous faites avec d'autres personnes. Vous ne les construisez jamais exactement, car chaque problème est différent. Mais ils sont une idée, une direction et un ensemble approximatif de directives à suivre, et il est facile d'expliquer aux autres ce que vous faites.
Matt D
+1 pour la comparaison avec les structures physiques. J'ajouterais que cela aide à construire une maison si vous savez déjà qu'une "ferme" est une bonne structure pour supporter la charge d'un toit, plutôt que d'expérimenter et d'espérer qu'elle ne s'effondre pas.
kdgregory
39

Ceux qui ne se souviennent pas du passé sont condamnés à le répéter.

Vous ne rencontrerez aucun problème spécifique autre que ceux soulevés par votre conception. Et avec le temps, vous finirez par utiliser les modèles sans en être conscient, vous venez de passer du temps à les découvrir par vous-même. Connaître les motifs au préalable les rend plus faciles à repérer dans la conception et présente l'avantage majeur qu'ils sont prouvés par un certain nombre de personnes.

Tout ce qui est développé aujourd'hui est basé en grande partie sur des connaissances antérieures, cela n'aurait aucun sens de l'ignorer. Imaginez construire un gratte-ciel aujourd'hui sans connaître les problèmes rencontrés par les gens qui ont construit des cathédrales il y a quelques centaines d'années.

devnull
la source
10
"Chaque citation a une citation égale et opposée." "Nous devons déchirer le passé si nous voulons vraiment mériter l'avenir." (OK que l'on était Hitler, alors il vaut probablement mieux l'ignorer ....)
Russell
20

À quels types de problèmes puis-je faire face si je n'utilise pas de modèles de conception logicielle?

Vous aurez le problème de ne pas pouvoir écrire de logiciel.

Les variables sont un modèle de conception.

Les méthodes sont un modèle de conception.

Les opérateurs - addition, soustraction, etc. - sont un modèle de conception.

Les déclarations sont un modèle de conception.

Les valeurs sont un modèle de conception.

Les références sont un modèle de conception.

Les expressions sont un modèle de conception.

Les classes sont un modèle de conception.

...

Tout ce que vous faites dans la programmation à tout moment est un modèle de conception . La plupart du temps, le motif est tellement ancré dans votre pensée que vous avez cessé de le considérer comme "un motif de conception". Les choses que vous devez apprendre comme "le motif singleton" et ainsi de suite sont simplement des motifs qui n'ont pas (encore) été cuits dans la langue que vous utilisez.

Pouvez-vous me parler des problèmes d'approche de la conception en utilisant des techniques orientées objet standard?

Non, je n'ai aucune idée de ce que signifie cette question. Les modèles de conception sont des "techniques standard orientées objet" - c'est ce qui en fait des modèles de conception . Un modèle de conception est une technique standard pour résoudre un problème particulier, en particulier (mais pas nécessairement ) dans un langage orienté objet.

Eric Lippert
la source
1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.- C'est (presque) la définition d'un modèle de conception - une construction de code flexible / facilement réutilisable utilisée pour surmonter une limitation dans le langage lui-même, qui est facile à communiquer aux autres. Une fois qu'il fait partie du langage, ce n'est plus un modèle de conception.
Izkata
1
@Izkata: Donc, votre position est que, disons, le modèle d'observateur est impossible en C # parce que C # a le modèle d'observateur intégré dans le langage sous la forme d'événements? C'est bête. Le bit spécifique au langage qui est pertinent pour un modèle est la manière canonique d'implémenter le modèle dans le langage. Bien sûr, les modèles de conception peuvent être utilisés dans des langues qui les prennent en charge directement; c'est tout l'intérêt de les soutenir directement!
Eric Lippert
Je n'ai jamais dit impossible, j'essayais d'impliquer inutile . Java, par exemple , n'a pas d'événements, il utilise donc le modèle de conception pour les simuler.
Izkata
@Izkata: Je suis confus alors. Vous avez dit qu'une fois qu'un modèle fait partie du langage, il n'est plus un modèle. "Le modèle d'observateur" est-il donc un modèle en Java mais pas un modèle en C #?
Eric Lippert
1
Ou, pour le dire autrement, un modèle de conception est tout ce qu'un programmeur fait, qui peut être décrit en anglais. Je ne suis pas sûr d'être entièrement d'accord avec la définition, mais je pense qu'elle reflète fidèlement ce que vous dites et n'a au moins l'avantage d'aucun jugement subjectif ce qui compte comme modèle. C'est une propriété d'analyse de ce que font les programmeurs, et bien sûr, il n'est pas possible pour un programmeur d'agir d'une manière qui ne peut pas être analysée :-)
Steve Jessop
4

Comprendre le point d'un modèle de conception est plus important que de l'utiliser à la lettre. Certains modèles sont, à mon avis, idiots, du moins dans les paradigmes linguistiques auxquels je suis habitué. IMO, un programmeur qui utilise simplement les modèles de conception à l'aveuglette et sans vraiment les comprendre est un pire programmeur que celui qui voudrait réfléchir aux choses elles-mêmes. Mais quelqu'un qui se familiarise avec les idées et décide ensuite par lui-même si elles en valent la peine est probablement un programmeur beaucoup plus puissant que les deux.

Cela dit, je n'ai aucune idée! @ # $ Ing de l'intérêt du poids mouche et je n'ai pas honte de l'admettre. (voir les commentaires pour une autre entrée wikipedia qui a beaucoup aidé)

Je recommande l'entrée de wikipedia sur les modèles de conception. C'est très concis et clairement écrit. Très utile pour avoir une idée des raisons pour lesquelles on pourrait s'embêter avec un modèle de conception donné ou non. Personnellement, j'ai tendance à trouver les plus simples et les plus utiles et je n'hésiterais pas à modifier une implémentation donnée d'un modèle pour répondre à mes besoins.

Ce sont des idées, pas des plans. Dans certaines langues, ce ne sont pas du tout de bonnes idées. Dans d'autres, ils sont à juste titre considérés comme des compliments pour surmonter les faiblesses de conception d'un langage qui pourraient être mieux compensées par une complexité moindre. Quoi qu'il en soit, cela ne fait pas de mal de les examiner et d'essayer de comprendre les défis qu'ils sont censés surmonter avant de décider de vos propres solutions préférées.

À quels types de problèmes allez-vous faire face? Vous risquez de manquer des opportunités et de consacrer plus de temps aux problèmes que vous n'en aviez besoin, sauf si vous êtes un génie de la programmation qui a déjà tout compris. Il est important de garder un œil critique sur les idées de programmation populaires, mais cela ne fait jamais de mal de comprendre ce que les gens pensent qu'ils résolvent, car cela donnera plus de clarté à vos propres solutions / approches préférées.

Erik Reppen
la source
2
poids mouche (pas volant). Lisez le premier paragraphe (et seulement le premier paragraphe) de l' article de wikipedia , puis regardez Integer.valueOf (int) et considérez combien de fois cela évite de créer de nouveaux entiers pour des valeurs communes.
2
@MichaelT Et putain. Cela l'a énoncé beaucoup mieux que tout ce que j'ai vu. Merci.
Erik Reppen
Le problème que je vois avec la plupart des instructions de modèle de conception est qu'elles essaient de donner une vue d'ensemble du projet (le livre du GoF concerne l'écriture d'un traitement de texte - pas une petite tâche). Mais parfois, elles s'appliquent à des choses beaucoup plus petites (presque «triviales»). 7 lignes de code peuvent décrire proprement le poids mouche dans quelque chose que tout le monde utilise constamment. Beaucoup plus facile à comprendre que les grands projets ou les exemples artificiels.
1
@MichaelT Pour moi, c'est aussi un bon exemple de la façon dont obtenir un peu de clarté sur quelque chose est utile pour écrire du code en général, même si cette idée n'a pas d'utilisation immédiate dans mon langage principal, JavaScript, où l'héritage et les fermetures prototypiques sont généralement utilisés pour résoudre ce problème. problème. Avoir ce moment a-ha m'a encore donné quelques idées pertinentes.
Erik Reppen
2

Le principal problème auquel vous serez confronté est que vous réinventerez la roue . Ils sont appelés modèles car ils apparaissent souvent et de manière prévisible.

pgpb.padilla
la source
0

Même si vous suivez les modèles de conception, vous pourriez vous retrouver avec une mauvaise conception. Les modèles de conception sont naturels et vous finirez par en utiliser une saveur dans votre conception. Vous devrez vous efforcer de ne pas utiliser de motifs. Il n'y a aucune raison de condamner les modèles de conception, ce qui est plus important est de choisir les bons modèles pour vos besoins

ViSu
la source
-1

Vous utilisez des motifs de conception tout le temps sans vous en rendre compte. Un grand nombre de bibliothèques standard dans les langues populaires sont conçues avec des modèles de conception à l'esprit. Un exemple est la FileReaderbibliothèque de Java qui est conçue en utilisant le modèle de conception du décorateur . Parlant maintenant de votre propre code, vous n'êtes pas obligé d'utiliser des modèles de conception (dans la plupart des cas). Un modèle de conception est une «solution réutilisable à un problème courant» , ce qui signifie qu'il vous aidera à écrire du code plus propre et plus facile à gérer, c'est donc à vous de décider à quel point vous voulez éviter de vous retrouver avec du code spaghetti.

Savv
la source