Comment étudier les modèles de conception? [fermé]

352

J'ai lu environ 4 à 5 livres sur les modèles de conception, mais je ne me sens toujours pas proche du niveau intermédiaire dans les modèles de conception?

Comment devrais-je étudier les modèles de conception?

Existe-t-il un bon livre pour les modèles de conception?

Je sais que cela ne viendra qu'avec l'expérience mais il doit y avoir un moyen de les maîtriser?

anand
la source
6
La meilleure façon d'apprendre le modèle de conception est de faire un projet. Lorsque vous voyez des modèles dans le projet que vous saurez quand les utiliser est ici un article qui enseigne étape de modèle de conception par étape avec un projet codeproject.com/Articles/1009532/...
Shivprasad Koirala
1
Jetez également un œil aux Antipatterns deviq.com/antipatterns
Développeur
Vous pouvez l'apprendre à partir d'ici, play.google.com/store/apps/…
Keyur Thumar
Probablement en retard, mais cela pourrait encore aider quelqu'un. Essayez geeksforgeeks.org/software-design-patterns pour comprendre les bases et les scénarios expliqués où ils peuvent être utilisés. M'a aidé à comprendre le fondement et le but de chaque modèle
zeetit
Voir aussi, Pluralsight: pluralsight.com/courses/patterns-library
ssmith

Réponses:

206

La meilleure façon est de commencer à coder avec eux. Les modèles de conception sont un excellent concept qui est difficile à appliquer en lisant simplement à leur sujet. Prenez quelques exemples d'implémentations que vous trouvez en ligne et construisez-les autour d'eux.

Une excellente ressource est la page Data & Object Factory . Ils passent en revue les modèles et vous donnent des exemples conceptuels et réels. Leur matériel de référence est également excellent.

Joseph Ferris
la source
11
Exactement! J'ai toujours été amusé par le fait que les logiciels relèvent de la "science informatique". Je peux voir l'argument du matériel, mais le logiciel rend la science très inexacte!
Joseph Ferris
Malheureusement, cette ressource n'est plus disponible :(.
5
@NielsW C'est en hausse, peut-être que ce n'était que temporairement en panne.
uthomas
211

J'ai lu trois livres et je ne comprenais toujours pas très bien les modèles jusqu'à ce que je lise Head First Design Patterns par OReilly. Ce livre m'a ouvert les yeux et m'a vraiment bien expliqué.

texte alternatif

Darren C
la source
14
C'est un peu étrange au début de lire un livre "sérieux" qui ressemble à ça, mais en continuant à lire, j'ai remarqué que je comprenais en fait des concepts pour un changement. Vaut vraiment le détour.
Tim Whitcomb
18
Je pense certainement que c'est le meilleur livre pour en apprendre davantage sur les modèles de conception. Le livre du GoF devrait être utilisé comme référence, une fois que vous les aurez mieux compris.
Bill the Lizard
vous avez mentionné avoir lu 3 livres ... avez-vous également lu celui-ci? amazon.com/… si oui, qu'en avez-vous pensé?
sivabudh
11
J'ai rencontré Erich Gamma (l'un des GoF) lors d'une conférence à Nantes, France en 2006 et il a dit que ce livre était en
vente supérieure au
1
Après avoir lu ce livre, OO avait du sens. @SimpleFellow Le livre du GoF est terne. Sans connaissance préalable des modèles de conception, il vous permet de dormir en un rien de temps. C'est cependant un bon ( le ) livre de référence et devrait faire partie de toute bibliothèque professionnelle avec DDD et P d'EAA.
mbx
93

Mes deux cents pour telle et vieille question

Certaines personnes déjà mentionnées, pratiquent et refactorisent. Je crois que le bon ordre pour en savoir plus sur les modèles est le suivant:

  1. Apprendre le développement piloté par les tests (TDD)
  2. Apprenez le refactoring
  3. Apprenez les modèles

La plupart des gens ignorent 1, beaucoup pensent qu'ils peuvent faire 2, et presque tout le monde va droit au 3.

Pour moi, la clé pour améliorer mes compétences logicielles était d'apprendre TDD. Le codage peut être long et long, mais écrire d'abord vos tests vous fait certainement beaucoup réfléchir à votre code. Si une classe a besoin de trop de passe-partout ou se casse facilement, vous commencez à remarquer les mauvaises odeurs assez rapidement

Le principal avantage de TDD est que vous perdez votre peur de refactoriser votre code et vous forcez à écrire des classes hautement indépendantes et cohérentes. Sans un bon ensemble de tests, il est tout simplement trop douloureux de toucher quelque chose qui n'est pas cassé. Avec le filet de sécurité, vous allez vraiment vous aventurer dans des changements drastiques de votre code. C'est le moment où vous pouvez vraiment commencer à apprendre de la pratique.

Arrive maintenant le point où vous devez lire des livres sur les modèles, et à mon avis, c'est une perte de temps complète d'essayer trop dur. J'ai seulement très bien compris les modèles après avoir remarqué que j'avais fait quelque chose de similaire, ou je pouvais l'appliquer au code existant. Sans les tests de sécurité, ni les habitudes de refactoring, j'aurais attendu un nouveau projet. Le problème de l'utilisation de modèles dans un nouveau projet est que vous ne voyez pas comment ils affectent ou modifient un code de travail. Je n'ai compris un modèle de logiciel qu'une fois que j'ai refactorisé mon code dans l'un d'eux, jamais quand j'en ai introduit un nouveau dans mon code.

SystematicFrank
la source
pouvez-vous recommander des livres pour TDD et refactoring principalement en C ++
et le
2
Vous aurez beaucoup de problèmes à trouver un contenu de qualité si vous vous limitez au C ++. De plus, le C ++ n'est pas le langage dans lequel vous souhaitez apprendre les tests, car techniquement, il manque de réflexion, ce qui rend à lui seul extrêmement difficile la construction de bons outils de test. C'est encore faisable, mais les communautés, les forums, la discussion et le nombre de personnes TDD sont une minorité au sein de C ++ à cause de cela. J'ai beaucoup travaillé avec, mais malgré ses points forts, ce n'est pas une langue conviviale pour les tests.
SystematicFrank
62

Derek Banas a fait des tutoriels sur YouTube pour dessiner des modèles que j'aime beaucoup:

http://www.youtube.com/playlist?list=PLF206E906175C7E07

Ils peuvent être un peu courts, mais son timing et sa présentation les rendent très agréables à apprendre.

Pedro Duarte
la source
35

Pratique, pratique, pratique.

Vous pouvez lire sur le violoncelle pendant des années et ne pas être en mesure de vous incliner devant un instrument et de faire quoi que ce soit qui ressemble à de la musique.

Les modèles de conception sont mieux reconnus comme un problème de haut niveau; celui qui n'est pertinent que si vous avez l'expérience nécessaire pour les reconnaître comme utiles. Il est bon que vous reconnaissiez qu'ils sont utiles, mais à moins que vous n'ayez vu des situations où ils s'appliqueraient ou se seraient appliqués, il est presque impossible de comprendre leur véritable valeur.

Ils deviennent utiles lorsque vous reconnaissez des modèles de conception dans le code des autres ou reconnaissez un problème dans la phase de conception qui correspond bien à un modèle; puis examinez le modèle formel, et examinez le problème, et déterminez quel est le delta entre eux, et ce que cela dit à la fois sur le modèle et le problème.

C'est vraiment la même chose que le codage; K&R est peut-être la «bible» de C, mais le lire plusieurs fois de bout en bout ne donne tout simplement pas une expérience pratique; il n'y a pas de remplacement pour l'expérience.

Paul Sonier
la source
5
+1. Je pense que beaucoup de novices sautent trop rapidement dans les modèles de conception et commencent à concevoir des systèmes construits autour d'usines abstraites, de singletons, d'observateurs, de visiteurs, etc., directement à partir du livre. Le résultat est souvent rigoureux, ne fait pas le meilleur usage du langage, et même pas bien conçu du point de vue du couplage / cohésion de base (ce dernier souffre surtout lorsque les modèles de conception sont mal mis en œuvre). Il faut de l'expérience pour décider où les modèles de conception sont appropriés, et encore plus pour décider de la façon la plus appropriée de les mettre en œuvre dans une langue particulière.
stinky472
25

Pratiquez la pratique pratique. Je pense que 4 à 5 livres sont même un exercice de lecture excessif sans une bonne quantité de pratique. La meilleure façon de le faire, je crois, est de commencer à refactoriser vos projets actuels en utilisant les modèles. Ou si vous n'avez aucun projet sur lequel vous travaillez activement, faites-le à votre façon, puis essayez de refactoriser les modèles .

Vous ne pouvez pas les apprécier pleinement si vous n'avez pas souffert des problèmes qu'ils résolvent. Et n'oubliez pas que ce ne sont pas des balles d'argent - vous n'avez pas besoin de les mémoriser et de les pousser à appliquer à la volée. Mes deux centimes..

utku_karatas
la source
15

Posez-vous ces questions:

Que font-ils?

Que découplent-ils / couplent-ils?

Quand devez-vous les utiliser?

Quand ne devez-vous pas les utiliser?

Quelle fonction de langue manquante les ferait disparaître?

Quelle dette technique encourez-vous en l'utilisant?

Existe-t-il un moyen plus simple de faire le travail?

gtrak
la source
14
et enfin demandez-vous d'où obtenir des réponses à toutes les questions mentionnées ci-dessus
Jatin Dhoot
@JatinDhoot en pensant ..
gtrak
8

J'ai trouvé qu'il est un peu difficile de comprendre ou de comprendre les avantages de certains modèles jusqu'à ce que l'un comprenne les problèmes qu'ils résolvent et l'autre (pire) la manière dont les problèmes ont été mis en œuvre.

À part les livres GOF et POSA, je n'en ai pas vraiment lu, je ne peux donc pas vous donner d'autres recommandations. Vraiment, il vous suffit d'avoir une compréhension des domaines de problèmes et je pense que de nombreux développeurs moins expérimentés peuvent ne pas être en mesure d'apprécier les avantages des modèles. Ce n'est pas léger contre eux. Il est beaucoup plus facile d'embrasser, de comprendre et d'apprécier de bonnes solutions lorsque l'on doit d'abord lutter avec de mauvaises alternatives.

Bonne chance

Tim
la source
+1 pour comprendre les problèmes qu'ils sont censés résoudre. Le défi est de voir les problèmes de première main (sur un vrai projet qui a une importance personnelle). Trop d'exemples de problèmes dans les livres sont (sur) simplifiés. L'une des raisons pour lesquelles j'aime le livre Head First Design Patterns est qu'ils montrent certains des problèmes avec les solutions naïves et à quel point ces solutions sont intenables. Ensuite, ils présentent le motif et sa propreté ... Consultez Decorator dans ce livre, par exemple.
Fuhrmanator
8

Beaucoup de bons exemples ont été donnés. Je voudrais en ajouter un:

Les mal utiliser. Vous n'avez pas besoin de le faire intentionnellement, cela se produira lorsque vous essayez de les appliquer dans votre ajustement de motif de conception initial. Pendant ce temps, chaque problème que vous verrez semblera correspondre exactement à un modèle de conception. Souvent, les problèmes semblent tous correspondre au même modèle de conception pour une raison quelconque (Singelton est un candidat principal pour cela).

Et vous appliquerez le motif et ce sera bien. Et quelques mois plus tard, vous devrez changer quelque chose dans le code et voir que l'utilisation de ce modèle particulier n'était pas si intelligent, car vous vous êtes codé dans un coin et vous devez refactoriser à nouveau.

Certes, ce n'est pas vraiment une réponse à faire et à apprendre en 21 jours, mais d'après mon expérience, c'est le plus susceptible de vous donner un bon aperçu de la question.

Joachim Sauer
la source
7

Avez-vous lu "Design Patterns Explained", par Allan Shalloway.

Ce livre est très différent des autres livres de modèles de conception car il ne s'agit pas tant d'un catalogue de modèles, mais présente principalement un moyen de décomposer un espace problématique qui correspond facilement aux modèles.

Les problèmes peuvent être décomposés en deux parties: les choses qui sont courantes et les choses qui varient. Une fois cela fait, nous mappons les choses courantes à une interface et les choses qui varient à une implémentation. En substance, de nombreux modèles entrent dans ce "modèle".

Par exemple, dans le modèle de stratégie, les éléments communs sont exprimés sous forme de contexte de stratégie et les parties variables sont exprimées sous forme de stratégies concrètes.

J'ai trouvé ce livre très stimulant en contraste avec d'autres livres de modèles qui, pour moi, ont le même degré d'excitation que la lecture d'un annuaire téléphonique.

Phillip Ngan
la source
6

Avez-vous essayé le livre Gang of Four?

Modèles de conception: éléments d'un logiciel orienté objet réutilisable

Rohit
la source
7
Je ne recommanderais pas ce livre comme un livre "révélateur" :)
Geo
73
Je le recommanderais comme un livre révélateur. Quelques pages de ce tome avant le coucher et votre insomnie appartiendront au passé.
Dónal
2
suis venu ici après quand je me suis endormi au milieu de la journée en lisant ce livre. recherché «comprendre les modèles de conception». trouvé le poste. trouvé le commentaire ci-dessus. fait ma journée. acceptez les autres, c'est un livre qui ferme les yeux
aimme
4

J'ai dirigé quelques groupes de discussion sur les modèles de conception ( notre site ) et j'ai lu 5 ou 6 livres sur les modèles. Je recommande de commencer par le livre Head First Design Patterns et d'assister ou de commencer un groupe de discussion. Le livre Head First peut sembler un peu Hasboro au début, mais la plupart des gens l'aiment après avoir lu un chapitre ou deux.

Utilisez la ressource exceptionnelle - Un guide d'apprentissage de Joshua Kereivisky pour concevoir des modèles pour l'ordre des modèles et pour aider votre groupe de discussion. Par expérience, le seul changement que je suggère à la commande est de mettre la stratégie en premier. La plupart des développeurs d'aujourd'hui ont connu une bonne ou une mauvaise incarnation d'une usine, donc commencer avec Factory peut conduire à beaucoup de conversations et de confusion au sujet du modèle. première rencontre.

JB Brown
la source
3

Je recommande HeadFirst DesignPattern. La lecture du livre ne suffit pas, après avoir assimilé les concepts dont vous avez besoin pour trouver les réponses à de nombreuses questions qui se posent dans votre esprit et essayer de trouver les applications réelles où ces modèles peuvent être utilisés. Je fais de même et j'ai commencé à poser des questions, même ces questions ont l'air idiotes.

Rajkumar Vasan
la source
2

Ma suggestion serait une combinaison d'implémenter quelques-uns d'entre eux et d'analyser certaines implémentations d'entre eux. Par exemple, dans .Net, il existe des utilisations de modèles d'adaptateur si vous regardez les adaptateurs de données, ainsi que quelques autres si l'on fait un peu de fouille dans le cadre.

JB King
la source
2

Je ne connais pas le meilleur livre, mais les puristes pourraient dire Design Patterns: Elements of Reusable Object-Oriented Software

En ce qui concerne mon préféré, j'aime les modèles de conception Head First publiés par O'Reilly. C'est écrit d'une voix conversationnelle qui me plaît. Quand je l'ai lu, j'ai revu mon code source en même temps pour voir s'il s'appliquait à ce que je lisais. Si c'était le cas, j'ai refactorisé. C'est ainsi que j'ai appris la chaîne de responsabilité.

Pratique - Pratique - Pratique.

Jason Slocomb
la source
2

Les modèles de conception ne sont que des outils - un peu comme les fonctions de bibliothèque. Si vous savez qu'ils sont là et leur fonction approximative, vous pouvez les extraire d'un livre en cas de besoin.

Il n'y a rien de magique dans les modèles de conception, et tout bon programmeur en a trouvé 90% avant la sortie des livres. Pour la plupart, je considère que les livres sont les plus utiles pour définir simplement les noms des différents modèles afin que nous puissions en discuter plus facilement.

Bill K
la source
2

La façon dont j'ai appris les modèles de conception consiste à écrire de nombreux logiciels vraiment terribles. Quand j'avais environ 12 ans, je n'ai aucune idée de ce qui était bon ou mauvais. Je viens d'écrire des tas de code spaghetti. Au cours des 10 prochaines années, j'ai appris de mes erreurs. J'ai découvert ce qui fonctionnait et ce qui ne fonctionnait pas. J'ai inventé de manière indépendante la plupart des modèles de conception courants, alors quand j'ai entendu pour la première fois ce que c'était, j'étais très excité d'en apprendre davantage, puis très déçu qu'il ne s'agissait que d'une collection de noms pour des choses que je connaissais déjà intuitivement. (cette blague sur l'apprentissage de C ++ en 10 ans n'est pas vraiment une blague)

Morale de l'histoire: écrivez beaucoup de code. Comme d'autres l'ont dit, pratiquez, pratiquez, pratiquez. Je pense que jusqu'à ce que vous compreniez pourquoi votre design actuel est mauvais et que vous cherchiez un meilleur moyen, vous n'aurez pas une bonne idée de l'endroit où appliquer les différents modèles de design. Les livres de modèles de conception devraient vous fournir une solution raffinée et une terminologie commune pour en discuter avec d'autres développeurs, et non une solution à coller à un problème que vous ne comprenez pas.

rmeador
la source
2

L'idée que lire des modèles de conception, les coder à l'entraînement ne va pas vraiment aider l'OMI. Lorsque vous lisez ces livres 1. Recherchez le problème de base qu'un modèle de conception particulier résout, en commençant par les modèles de création est votre meilleur pari. 2. Je suis sûr que vous avez écrit du code dans le passé, analysez si vous avez rencontré les mêmes problèmes que les modèles de conception visant à fournir une solution. 3. Essayez de repenser / refactoriser le code ou recommencez peut-être.

À propos des ressources, vous pouvez les vérifier

  1. www.dofactory.com
  2. Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series) par Erich Gamma, Richard Helm, Ralph Johnson et John M. Vlissides
  3. Patterns of Enterprise Application Architecture par Martin Fowler

1 est un démarrage rapide, 2 sera en étude approfondie .. 3 vous expliquera ou devrait vous faire penser ce que vous avez appris en 2 correspond aux logiciels d'entreprise.

Mes 2 cents ...

Perpetualcoder
la source
1

Je pense qu'il est également difficile d'étudier les modèles de conception. Vous devez en savoir plus sur la POO et quelques expériences avec le développement d'applications moyennes à grandes. Pour moi, j'étudie en tant que groupe de développeurs pour discuter. Nous suivons un guide d'apprentissage pour concevoir des modèles qu'ils ont terminé l'étude des modèles. Il y a des développeurs C # et JavaScript qui se rejoignent. C'est une chose fantaisiste pour moi, c'est que les codes d'écriture du développeur C # en JavaScript et le développeur JavaScript font la même chose pour les codes C #. Après avoir quitté une réunion, je fais également des recherches et je lis quelques livres à la maison pour les réviser. La meilleure façon de mieux comprendre et de me souvenir est de faire des blogs avec des exemples en C # et JavaScript ici http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Je suggérerais d'abord avant d'aller à chaque modèle de conception, veuillez comprendre le nom des modèles. De plus, si quelqu'un connaît le concept, veuillez simplement expliquer et donner un exemple non seulement de programmation mais également dans le monde de la lecture.

par exemple:

Méthode d'usine:

Lire le monde: je donne juste de l'argent 5 $, 10 $ ou 20 $ et cela produira de la pizza sans rien savoir de la façon dont elle produit, je reçois juste une petite, moyenne ou grande pizza en fonction de l'entrée d'argent afin que je puisse manger ou faire quoi que ce soit.

Programmation: Le client passe simplement la valeur du paramètre $ 5, $ 10 ou $ 20 à la méthode d'usine et il renverra l'objet Pizza. Ainsi, le client peut utiliser cet objet sans savoir comment il procède.

Je ne suis pas sûr que cela puisse vous aider. Cela dépend du niveau de connaissances des personnes qui participent à la réunion.

Vorleak Chy
la source
Le deuxième lien de réponse est mort.
Pang
1

Je pense que vous devez examiner certains des problèmes que vous avez rencontrés en tant que développeur où vous vous êtes arraché les cheveux après avoir dû réviser votre code pour la 10e fois en raison d'un autre changement de conception. Vous avez probablement une liste de projets où vous avez senti qu'il y avait beaucoup de retouches et de douleurs.

De cette liste, vous pouvez dériver les scénarios que les modèles de conception ont l'intention de résoudre. Y a-t-il eu un moment où vous avez dû effectuer la même série d'actions sur différents ensembles de données? Aurez-vous besoin de pouvoir évoluer vers une application mais souhaitez éviter de retravailler toute votre logique pour les classes existantes? Commencez par ces scénarios et revenez au catalogue des modèles et leurs problèmes respectifs qu'ils sont censés résoudre. Vous verrez probablement des correspondances entre le GoF et votre bibliothèque de projets.

David Robbins
la source
1

Pour un débutant, les modèles Head First Design feraient l'affaire, une fois que nous serons familiers avec tous les modèles, puis essayer de visualiser les objets en temps réel dans ces modèles.

Le livre vous aidera à comprendre les concepts de base, à moins que jusqu'à ce que vous ayez mis en œuvre dans le monde réel, vous NE POUVEZ être un MAÎTRE des MODÈLES DE CONCEPTION

gmhk
la source