Je suis intéressé à apprendre des modèles de conception et je voudrais savoir ce que l'on considère comme des livres de haut niveau dans l'apprentissage de ce sujet.
Existe-t-il un livre qui constitue la norme de facto pour décrire les meilleures pratiques, les méthodologies de conception et d'autres informations utiles sur les modèles de conception? Qu'en est-il de ce livre qui le rend spécial?
Design Patterns: Elements of Reusable Object-Oriented Software est très proche de ma définition d'un livre canonique sur les modèles de conception. Selon son article wikipedia (c'est moi qui souligne):
La date de publication originale du livre était le 21 octobre 1994 avec un copyright de 1995, et en juillet 2010, le livre était dans sa 38ème impression . Le livre a d'abord été mis à la disposition du public lors de la réunion de l'OOPSLA tenue à Portland, Oregon, en octobre 1994. Il a été très influent dans le domaine du génie logiciel et est considéré comme une source importante pour la théorie et la pratique de la conception orientée objet. Plus de 500 000 exemplaires ont été vendus en anglais et dans 13 autres langues .
Ward Cunningham , un pionnier des modèles de conception, maintient un catalogue en ligne des modèles du livre sur WikiWikiWeb . Et selon l'article de Wikipedia sur modèle de conception (encore une fois, je mets l'accent):
Les modèles de conception ont gagné en popularité en informatique après que le livre Design Patterns: Elements of Reusable Object-Oriented Software a été publié en 1994 par le soi-disant "Gang of Quatre "(Gamma et al.).
Il y a pas mal d'autres livres référencés dans le même article aussi remarquables dans le genre:
- Architecture logicielle orientée modèles Volume 1: Un système de modèles , par Douglas Schmidt, Michael Stal, Hans Rohnert et Frank Buschmann,
- Patterns of Enterprise Application Architecture par Martin Fowler,
- Modèles d'intégration d'entreprise: conception, construction et déploiement de solutions de messagerie ., Par Hohpe, Gregor et Bobby Woolf, et
- Head First Design Patterns , par Eric T. Freeman, Elisabeth Robson, Bert Bates et Kathy Sierra.
Parmi ceux que j'ai lus, le livre de Fowler est très influent et une bonne lecture. À certains moments, c'est un peu vague à mon goût, mais dans l'ensemble, c'est un livre agréable. Il y a un catalogue en ligne des modèles inclus dans le livre, avec des descriptions minimales.
J'ai également survolé les modèles de conception de Head First, et si vous avez lu un autre livre de la série Head First, il est de la même qualité et aussi agréable que la plupart des livres de la série :
Head First est une série de manuels d'introduction à de nombreux sujets, publiés par O'Reilly Media. Il met l'accent sur une combinaison peu orthodoxe, visuellement intensive, impliquant le lecteur de puzzles, de blagues, une conception et une mise en page non standard, et un style conversationnel engageant pour plonger le lecteur dans un sujet donné.
Le terme "modèle de conception" est quelque peu vague, car chaque solution générale réutilisable peut être considérée comme un modèle de conception. J'ai toujours remarqué une tendance à appliquer l'étiquette sur les solutions décrites dans l'un des livres notables que j'ai énumérés ci-dessus, et plus spécifiquement les livres Gang of Four et Fowler. Les modèles de conception ne suivent pas un processus de développement unique, ce sont des solutions logicielles normales qui sont extrêmement réutilisables et ils sont extrêmement difficiles à identifier .
Mais si vous comparez les catalogues en ligne des deux livres avec le contenu de livres spécifiques à une langue, vous remarquerez qu'ils sont souvent utilisés comme modèles. Je dirais donc que les deux livres sont très proches d'être des références canoniques, le livre GoF étant le plus important d'un point de vue historique, même si les deux livres sont limités à programmation orientée objet .
Le livre The Gang of Four - Design Patterns: Elements of Reusable Object-Oriented Software est probablement la chose la plus proche que nous ayons d'une norme industrielle sur les modèles de conception.
Pour une introduction plus accessible, Head First: Design Patterns est bon aussi. Ne vous laissez pas rebuter par la couverture "tendance", car c'est une bonne lecture et cela vous aidera probablement à comprendre les concepts du livre du GoF beaucoup plus facilement si vous le lisez d'abord.
À un moment donné, quelque part dans le monde, quelqu'un se débat avec les mêmes problèmes de conception de logiciels que vous. Vous savez que vous ne voulez pas réinventer la roue (ou pire, un pneu crevé), alors regardez les modèles de conception - les leçons apprises par ceux qui ont rencontré les mêmes problèmes. Avec Design Patterns, vous bénéficiez des meilleures pratiques et de l'expérience des autres, afin de pouvoir consacrer votre temps à ... autre chose. Quelque chose de plus difficile. Quelque chose de plus complexe. Quelque chose de plus amusant.
Vous voulez en savoir plus sur les modèles qui importent - pourquoi les utiliser, quand les utiliser, comment les utiliser (et quand NE PAS les utiliser). Mais vous ne voulez pas seulement voir à quoi ressemblent les motifs dans un livre, vous voulez savoir à quoi ils ressemblent "à l'état sauvage". Dans leur environnement natif. En d'autres termes, dans des applications réelles. Vous souhaitez également savoir comment les modèles sont utilisés dans l'API Java, et comment exploiter la prise en charge intégrée des modèles Java dans votre propre code.
Vous voulez apprendre les vrais principes de conception OO et pourquoi tout ce que votre patron vous a dit sur l'héritage peut être faux (et que faire à la place). Vous voulez savoir comment ces principes vous aideront la prochaine fois vous êtes dans un ruisseau sans motif de conception.
Plus important encore, vous voulez apprendre le "langage secret" des modèles de conception afin de pouvoir tenir le coup avec votre collègue (et impressionner les invités du cocktail) lorsqu'il mentionne avec désinvolture son utilisation incroyablement intelligente de Command, Facade, Proxy et Usine entre deux gorgées de martini. Vous pourrez facilement contrer votre compréhension approfondie de la raison pour laquelle Singleton n'est pas aussi simple qu'il y paraît, de la façon dont l'usine est si souvent mal comprise ou de la véritable relation entre le décorateur, la façade et l'adaptateur.
Avec les modèles de conception Head First , vous éviterez l'embarras de penser que Decorator est quelque chose du spectacle "Trading Spaces" ...
Oui, il existe un livre bien connu sur les modèles de conception: Design Patterns: Elements of Reusable Object-Oriented Software et les auteurs sont souvent appelés "The Gang of Four" (GoF) et sont référencés dans presque tous les textes sur les modèles de conception.
De wikipedia :
Design Patterns: Elements of Reusable Object-Oriented Software est un livre d'ingénierie logicielle décrivant des solutions récurrentes aux problèmes courants de conception de logiciels. Les auteurs du livre sont Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides avec une préface de Grady Booch. Les auteurs sont souvent appelés Gang of Four, GoF ou Go4. Le livre est divisé en deux parties, les deux premiers chapitres explorant les capacités et les pièges de la programmation orientée objet, et les chapitres restants décrivant 23 modèles classiques de conception de logiciels. Le livre comprend des exemples en C++ et Smalltalk.
L'un des meilleurs sites Web de modèles de conception est le wiki de Ward, le tout premier wiki. Voir http://c2.com/cgi/wiki?HistoryOfPatterns pour une bonne page de démarrage.
En 1987, Ward et Kent consultaient le groupe de systèmes de test de semi-conducteurs de Tektronix qui éprouvait des difficultés à terminer une conception. Ils ont décidé d'essayer les trucs de motifs qu'ils avaient étudiés. Comme Alexander qui a dit que les occupants d'un bâtiment devraient le concevoir, Ward et Kent ont laissé les représentants des utilisateurs (un formateur et un ingénieur de terrain) terminer la conception.
Ward a proposé un "langage" à cinq modèles qui a aidé les concepteurs novices à tirer parti des forces de Smalltalk et à éviter ses faiblesses ...
Ward et Kent ont été surpris par l'élégance (certes spartiate) de l'interface conçue par leurs utilisateurs. Ils ont rendu compte des résultats de cette expérience à OOPSLA 87 à Orlando. Ils ont rédigé une position de panel et présenté à l'atelier de Norm Kerth sur D'où viennent les objets? Ils ont parlé de motifs jusqu'à ce qu'ils soient bleus au visage, et a obtenu beaucoup d'accord, mais sans modèles plus concrets, personne ne s'inscrivait.
Pendant ce temps, Erich Gamma était occupé à écrire et à réfléchir sur la conception orientée objet dans ET ++ dans le cadre de sa thèse de doctorat. Erich avait réalisé que les structures ou motifs de conception récurrents étaient importants. La question était vraiment de savoir comment les capturer et les communiquer.
Bruce Anderson a donné une conférence à TOOLS 90 à laquelle ErichGamma était présent; Erich a aimé le discours. Bruce a donné un article à EcoopOopsla90 (Ottawa) et a dirigé un BOF intitulé Vers un manuel d'architecture où lui, Erich Gamma, Richard Helm et d'autres ont eu des discussions sur les modèles. C'était la première fois que Richard et Erich se rencontraient, et ils ont réalisé qu'ils partageaient des idées communes sur les idées clés derrière l'écriture de logiciels réutilisables OO.
Juste avant ECOOP'91, Erich Gamma et Richard Helm, assis sur un toit à Zurich un jour d'été étouffant, ont rassemblé les débuts très modestes du catalogue de modèles qui deviendra finalement DesignPatterns ...
Les choses se sont vraiment déroulées à l'atelier OOPSLA que Bruce a dirigé en 1991. Par coïncidence, Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides étaient tous là; ils deviendront plus tard le Gang of Four qui est l'auteur du livre Design Patterns ...
Je pense que le Refactoring to Patterns peut être utile simplement parce qu'il décrit comment certains desing/code peuvent être refactorisés en patterns dans le livre du GoF. Cela peut aider à surmonter la courbe d'apprentissage initiale. Oh et il envisage également sur 'Pattern-bonheur' :)
Vous pouvez également trouver les trois premiers volumes de l'architecture logicielle orientée modèle comme une bonne lecture.
Si vous êtes spécifiquement intéressé par les modèles de conception en C++, essayez Modern C++ Design par Andrei Alexandrescu.
Ce livre explique comment implémenter des modèles couramment utilisés comme Factory, Singleton et Visitor en C++. Il aborde également des sujets très spécifiques à C++ tels que les pointeurs intelligents, la métaprogrammation de modèles et la conception de classes basée sur des règles.
L'auteur du livre est un expert faisant autorité , connu pour son
travail de pionnier sur la conception basée sur les politiques mis en œuvre via la métaprogrammation de modèles. Ces idées sont articulées dans son livre Modern C++ Design et ont d'abord été implémentées dans sa bibliothèque de programmation, Loki. Il a également implémenté le concept "déplacer les constructeurs" dans sa bibliothèque MOJO. Il a contribué au C/C++ Users Journal Journal sous la signature "Generic <Programming>" ...
Le livre original, "Design Patterns: Elements of Reusable Object Oriented Software" est une bonne ressource pour les modèles de conception orientés objet.
Il existe de nombreux autres livres. Lorsque j'ai besoin d'une référence rapide et que mon livre GoF est hors de portée, Wikipédia a normalement suffisamment d'informations sur ces modèles de conception et d'autres.
Ce sont les principaux que j'utilise. Il convient également de noter que les gens ont commencé à appliquer le format de modèle à d'autres choses, telles que la gestion de projet.
Si vous voulez connaître les antipatterns, que vous devez connaître, il y a deux livres, "AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis" ainsi que "Refactoring: Improving the Design of Existing Code" qui a une section sur le code sent, un autre nom pour les antipatterns.
Ce site de tutoriel contient les sous-sections suivantes
Ce site contient également un guide sur Anti Patterns, UML et Refactoring.
"Principes, modèles et pratiques agiles en C #" par Robert C. Martin. Je pense qu'il a aussi une version Java du livre.
En outre, pas un modèle lui-même, mais la conception pilotée par le domaine a de très bons concepts même si vous n'optez pas pour l'approche DDD complète.
* Ubiquitous Language
* Code first approach (vs. DB first)
* etc.