Apprentissage / mise en œuvre de modèles de conception (pour les débutants) [fermé]


85

Je suis un programmeur débutant et amateur confus qui essaie de comprendre cela, alors pardonnez-moi si ma question est un peu décalée ou n'a pas beaucoup de sens.

Je vois beaucoup de questions sur le SO tournant autour de l'utilisation de modèles de conception, et je me demande si quelqu'un a de bonnes ressources pour apprendre et mettre en œuvre des modèles de conception? Je comprends l'idée générale et je sais comment / quand utiliser quelques-uns d'entre eux (Singletons, méthodes Factory) mais je sais que je passe à côté.

(Juste au cas où cela importerait, ma langue de préférence est C # mais je pourrais apprendre des exemples dans d'autres langues)

Réponses:


84

Modèles de conception Head First

texte alternatif

et la page Wikipédia Design Pattern sont les meilleures ressources pour les débutants. FluffyCat est une autre bonne ressource en ligne gratuite pour les modèles de conception en Java et PHP .

Le livre Gang of Four est l'endroit où aller par la suite, mais il est assez avancé, alors j'attendrais que vous ayez une bonne compréhension des autres ressources.


4
Des exemples de code C # pour les modèles de conception Head First sont disponibles sur msquaredweb.com/DesignPatterns
toolkit

5
J'ai regardé ce livre ... je l'ai détesté. J'ai donc pris le livre du GoF et appris tout sur les modèles de conception à partir de là. C'était plutôt sec, mais beaucoup plus instructif.
Thomas Owens

1
J'ai d'abord pensé que le livre tête première allait être complètement nauséabond (il est lourd de métaphore, en plus, et a un ton très conversationnel) .. mais c'est en fait vraiment inventif et instructif; Je suis très heureux d'avoir pris le risque et de l'avoir acheté. Imo, choisir gang-of-four = masochisme inutile.
codeinthehole

2
J'ai trouvé le livre tête première complètement nauséabond. Cela passe tellement de temps à être «amusant» que je pense que cela communique mal les idées clés - elles se perdent. Le lire, c'est comme regarder papa essayer d'être cool. Mais le livre du GoF est l'autre extrême et donc pas pour tout le monde.
Draemon

2
@Bill: Je sais, mais je suis d'accord avec les commentaires de @Thomas et @Draemon. Des amis non orientés vers la programmation qui ont recommandé cette série de livres pour les algorithmes des classes de programmation, les ont détestés et se sont retrouvés sur des livres plus «secs» parce que la quantité d'informations par page était plus élevée. Ce n'est qu'une question de préférence. Je lis des livres techniques depuis mon plus jeune âge et je suis allé dans un lycée hautement technique, cela a dû m'habituer à lire des livres «secs». Je préfère les livres qui n'ont pas d'animaux qui me parlent et qui se détournent, mais plutôt des informations simples à assimiler.
Esteban Küber

27

Les modèles de conception sont excellents pour diverses raisons:

  1. vous donne un point de départ pour résoudre les problèmes courants.
  2. donne aux développeurs un vocabulaire pour parler de certaines façons de résoudre les problèmes de manière très compacte.
  3. Lorsque vous travaillez avec des développeurs qui connaissent les modèles de conception et que vous utilisez des modèles de conception dans vos solutions, ils comprendront les solutions beaucoup plus rapidement.

Mais lorsque votre objectif est simplement d'apprendre des modèles de conception, je pense que vous manquez les principes fondamentaux. Tous les modèles de conception sont basés sur des principes plus communs. Cohésion élevée, principe ouvert fermé de couplage faible, DRY, principe de substitution de Liskov, etc. Pour ces principes fondamentaux, je lirais les livres suivants dans cet ordre:

  1. Analyse et conception orientées objet Head First (Head First) [ILLUSTRATED] (Broché)
  2. Application d'UML et de modèles (Couverture rigide)
  3. Principes, modèles et pratiques Agile en C # (série Robert C.Martin) (Couverture rigide)

Après cela, vous êtes prêt pour le gang de base de quatre modèles de conception

  1. Head First Design Patterns (Head First) [ILLUSTRATED] (Broché)
  2. La Bible
  3. Un joli site web (n'achetez rien, ça ne vaut pas la peine) http://dofactory.com/Patterns/Patterns.aspx (certaines implémentations de ce site valent la peine d'être discutées

La prochaine étape:

  1. Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series) (Couverture rigide)
  2. Les livres POSA

Et rappelez-vous toujours: le motif n'est pas le but!


2
Je pense que les fondamentaux de l'OO (encapsulation, héritage, polymorphisme, etc.) suffisent à la connaissance pour commencer à apprendre les modèles de conception. Vous pouvez apprendre les autres principes (cohésion élevée, principe ouvert fermé de couplage faible, DRY, principe de substitution de Liskov, etc.) à travers des modèles d'apprentissage.
Bill the Lizard

Je suis d'accord que vous pouvez apprendre des modèles de conception avec uniquement les principes de base d'OO. Mais ensuite, vous arrivez au point que vous pouvez faire fonctionner un modèle sans encore comprendre pleinement pourquoi c'est un bon design, quels compromis vous avez faits et comment vous pouvez faire des variations dans les modèles.
KeesDijk

20

J'ajouterais que le livre Design Patterns du "Gang of four" est une bible pour tous ceux qui s'intéressent sérieusement aux modèles de design.


12
Ou pour tous ceux qui veulent dire à leurs amis programmeurs qu'ils ont lu le livre Gang of Four :)
Dave Markle

14

Mon conseil:

Lisez beaucoup sur les modèles de différentes sources.

Essayer de forcer autant de modèles que possible dans tout le code que vous écrivez car ce point ne donnera pas de bons résultats. Au lieu de cela, laissez les informations reposer dans votre cerveau pendant un moment (lire: des mois).

Tout à coup, vous vous surprendrez à tomber sur un problème ou un morceau de code et vous vous souviendrez vaguement que vous avez vu quelque chose qui pourrait fonctionner comme une solution à ce problème particulier. Il est maintenant temps de rechercher les détails du modèle auquel vous pensez et d'essayer de l'appliquer.

C'est ce qui a fonctionné pour moi, de toute façon.


9

Modèles de conception

Ce site de didacticiel contient les sous-sections suivantes

  • Intention de chaque modèle de conception
  • Structure du monde réel pour le modèle de conception
  • Une déclaration de problème
  • Discussion détaillée sur le problème
  • Liste de contrôle sur la façon d'arriver à un modèle
  • Règles de base pour arriver au modèle.
  • Extraits de code pour le modèle de conception qui comprend C #, C ++, Delphi, Java et PHP

Ce site contient également un guide sur les Anti Patterns , UML et Refactoring .


J'ai trouvé le site Web très utile. Bons exemples clairs.
Augustas




4

Je recommanderais de jeter un œil à la quintologie de Jean Paul Boodhoo (?) Sur la démystification des modèles de conception sur DNRtv, URL fournies ci-dessous. Les vidéocasts concernent notamment Singleton, Abstract Factory, la différence étant que vous pouvez le regarder coder pendant qu'il discute de la théorie. Bon à surveiller pendant le déjeuner un jour de semaine pluvieux.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92


DnrTV est en panne! C'est vraiment dommage car les projections d'écran de Boodhoo sont informatives. Avez-vous vu les vidéos hébergées ailleurs? Avez-vous les fichiers vidéo, je serais heureux de les garder en ligne.
Stephan Luis

4

Une annotation aux commentaires ci-dessus.

Une référence rapide pour les modèles GOF

Voici un bon endroit où vous pouvez démarrer dofactory.com/patterns/patterns.aspx - Vous pouvez trouver un lien vers chaque modèle, ainsi que les implémentations correspondantes.

Cependant, rappelez-vous que ce sont des modèles GOF. Vous devrez peut-être également lire et comprendre des modèles avancés, une fois que vous aurez acquis une expertise suffisante en OOAD. Head First Design Patterns est un bon début, et après quelques progrès, optez pour les modèles d'architecture d'application d'entreprise de Martin Fowler.

Application de modèles de conception - Le processus de pensée

Un autre aspect principal - L'application de modèles de conception est aussi important que de simplement les connaître. La lecture de ces articles peut également vous aider.

Application de modèles de conception, partie I

Application de modèles de conception, partie II

J'espère que cela t'aides


3

Head First Design Patterns est un bon modèle comme d'autres déjà notés. Outre cela, bien sûr le livre original et les modèles de conception C #. Il existe également de bons sites Web déjà mentionnés.

Outre l'auto-apprentissage, je recommande sérieusement de démarrer ou d'assister à un groupe d'étude des modèles dans votre région. Voir A Learning Guide To Design Patterns pour des explications et un bon ordre pour étudier les modèles. Nous l'avons fait et je peux honnêtement dire que je ne comprendrais pas autant que je le fais maintenant. Une réunion hebdomadaire avec d'autres personnes intéressées vous permet de rester étonnamment discipliné lorsque vous apprenez quelque chose d'abstrait comme des modèles de conception.

Bonnes études!


3

Avant de dépenser de l'argent sur des livres, je recommanderais l'excellente page de modèles de conception de Wikipedia . Aussi pour quelque chose de différent sur Google pour les «screencasts de modèles de conception» ou pour rechercher des «modèles de conception» sur YouTube . Obtenir les mêmes informations présentées différemment aide souvent à réduire le sou.

Le livre Gang of Four est le texte définitif sur les modèles les plus connus, mais il n'est pas si facile à lire et avec des exemples C ++, tout le monde n'est pas le préféré.

Le texte Head First Design Patterns est beaucoup plus accessible mais ne contient qu'un sous-ensemble des modèles Gang of Four.

Le plus important est de comprendre où et pourquoi un modèle particulier est utile. Ensuite, recherchez sur le Web des exemples de mise en œuvre dans la langue de votre choix et expérimentez jusqu'à ce que vous "compreniez". Comprenez un modèle avant de passer au suivant. Tout le monde comprend certains modèles mieux que d'autres (et il y en a des centaines de moins connus).

Continuez simplement à vous brancher.



2

Patterns of Enterprise Application Architecture (Couverture rigide) par Martin Fowler

Refactoring to Patterns (Couverture rigide) par Joshua Kerievsky

Intégration continue: améliorer la qualité des logiciels et réduire les risques (Broché) par Paul Duval et.al.

Beyond Software Architecture: Creating and Sustaining Winning Solutions (Broché) par Luke Hohmann


2

Les modèles de conception sont comme n'importe quelle fonction de bibliothèque, lisez-les à leur sujet, puis quand un problème survient, le modèle de conception sera dans votre "Boîte à outils". Il existe de nombreux livres de modèles de design, tous modelés d'après les modèles de conception originaux "Gang of four".

Pour tous les programmeurs, je pense que et le livre Refactoring de Fowler sont les exigences minimales absolues.


Les livres de la POSA n'étaient pas "calqués sur le livre du GOF" - le GOF était le premier à être publié - ils étaient en production au même moment.
Tim

1
Juste pour éviter toute confusion, je tiens à dire que la plupart des modèles de conception ne sont PAS implémentés dans une bibliothèque. De nombreux modèles sont formés en combinant des classes de bibliothèque ensemble.
Bill the Lizard

J'ai fait croire qu'ils pouvaient être faits dans une bibliothèque - désolé, merci pour la clarification, Bill. Les modèles de conception sont généralement comme des bibliothèques, mais des choses que vous ne pouvez généralement pas METTRE dans une bibliothèque - comme différentes manières d'interagir entre des classes inconnues.
Bill K


2

Les modèles de conception originaux livre original est un incontournable pour tous les programmeurs.

C'est un excellent livre à tous les niveaux: mise en page, clarté, perspicacité, profondeur. C'est l'un de ces grands livres que vous lisez d'abord d'un bout à l'autre, puis que vous utilisez comme référence jusqu'à ce que vous le sachiez littéralement sur le bout des doigts.

Vous pouvez commencer par la page Wikipédia , mais offrez-vous aussi le grand livre.



2

Si vous lisez à propos des modèles de conception, vous remarquerez que Java semble en avoir quelques-uns implémentés.

Regardez la source de n'importe quel framework et vous pouvez glaner des informations sur les modèles de conception. Personnellement, je ne les vois pas parfaitement s'intégrer à mon code, parfois les exemples dans les livres et les tutoriels semblent un peu idéalisés, en particulier pour le codeur solitaire.

Les modèles de conception ne sont pas pour les codeurs paresseux.


2

Pour moi et mes collègues étudions le Design Pattern qui suit le Pattern Study Group . Ils préparent une liste de chaque modèle que nous devrions apprendre dans l'ordre et ont également les questions d'ouverture qui font plus de discussion en groupe.


1

Je suggère également d'avoir une timidité à Refactoring to Patterns une fois que vous avez lu Head First Design Patterns.

Remarque: les exemples de code sont en Java, mais devraient être très similaires aux exemples C # ...


1

Cela n'a pas trop de sens pour moi pour quelqu'un avec très peu d'expérience de se plonger trop profondément dans les modèles de conception. C'est formidable de savoir qu'ils existent, mais à ce stade, vous devriez vous concentrer davantage sur d'autres choses plutôt que sur l'apprentissage des modèles de conception.

Ils sont utiles dans le contexte d'un problème - en tant que concept pour un développeur nouveau / débutant, ils n'ont vraiment pas trop de valeur pratique en dehors de la forme sachant que vous devez les utiliser quand et où vous le pouvez.

EDIT Pour clarifier - de nombreux modèles de conception sont le résultat de problèmes rencontrés dans certains domaines. On ne peut guère s'attendre à ce qu'un nouveau programmeur (IMO) connaisse le ou les modèles de conception à utiliser pour un ensemble de problèmes. Tout comme nous obtenons une poignée d'algorithmes dans les études CS, nous avons besoin de comprendre ce que nous pouvons faire avec les modèles et leurs avantages, mais quand une personne construit encore Hello World ou découvre stl, il n'y a pas beaucoup de besoin pratique de modèles de conception. Les motifs sont excellents. Mais ils ne sont pas la solution miracle.

(CASE non plus (outils), ni n'est / n'était UML, ni SCRUM, ni TDD, ni STL, ni Java, ni XML, etc.) Ce ne sont que des aspects de notre profession et traiter ces sujets comme le second venir est naïf.


Mais si vous ne connaissez pas les modèles, vous ne saurez pas s'il y en a un qui résout votre problème particulier. Oui, en tant que débutant, il est peu probable que vous ayez BESOIN d'un modèle, mais il est important d'apprendre les modèles avant que ce besoin ne se manifeste.
Elie

Je pense que j'ai couvert cela dans mon message ...
Tim

Vous devez avoir plus que simplement savoir qu'ils existent ... vous devez savoir comment ils fonctionnent et le genre de situations où ils sont utilisés. C'est un peu plus que des connaissances superficielles. Cela peut prendre des années avant d'utiliser un modèle, mais lorsque vous le faites, ce n'est pas le moment de l'apprendre.
Elie

Vous dites donc qu'un débutant doit apprendre et comprendre des dizaines ou plus de modèles? Qu'est-ce qui sort de la table en attendant? Je ne discute pas contre les modèles. Et je ne pense pas non plus qu'apprendre les spécificités d'un pattern JIT soit une mauvaise chose. L'apprentissage des modèles avant d'autres choses IMO n'est pas utile
Tim

1

Les modèles comprennent le vocabulaire de haut niveau que les programmeurs utilisent pour parler de conception abstraite. Si vous réutilisez une solution abstraite, il est utile de s'y référer par son nom. Si vous inventez un motif, il est professionnel de faire une petite vérification pour vous assurer qu'il n'a pas déjà reçu de nom. S'il a été nommé, la description peut être utile.

Après avoir codé ne serait-ce qu'un tout petit peu, vous remarquerez que vous écrivez quelque chose de similaire à ce que vous avez codé auparavant. C'est un modèle. Même s'il s'agit d'un minuscule motif, cela vaut la peine de le remarquer. Y a-t-il un meilleur modèle? Voyez-vous certains modèles minuscules coopérer pour résoudre un problème plus vaste? Eh bien, la prochaine fois, lorsque vous voulez résoudre un problème plus important, le modèle entier vous vient à l'esprit comme un seul morceau. Remplir les lignes de code détaillées devient mécanique.

Plus vous remarquez des modèles, plus la programmation devient facile et plus vous apprécierez certains des modèles les plus grands et les meilleurs élaborés par d'autres programmeurs. Essayez de maîtriser le modèle MVC. D'une manière ou d'une autre, des variations apparaissent partout, même dans de minuscules décisions de conception.


1

Une fois que vous avez compris le concept, parcourez le code source ou la conception d'Eclipse, plein de très bons exemples de ces modèles (pas de surprise, Gamma était l'un des concepteurs).


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.