MaÃŪtrisez les principes SOLID : Câest la seule façon dâÃĐcrire du code propre !
āļāļąāļ
- āđāļāļĒāđāļāļĢāđāđāļĄāļ·āđāļ 29 āļĄāļī.āļĒ. 2024
- ðĻðŧâðŧ DÃĐmarrer votre carriÃĻre de DÃĐveloppeur Professionnel :
www.angularsenior.fr/apply
***
Aujourd'hui, on va transformer votre maniÃĻre de coder avec Angular en utilisant les 5 principes SOLID.
Je vais vous montrer comment ces cinq principes peuvent rendre votre code plus propre, plus efficace, et vous faire gagner un temps fou. Il vous faut les 5 car ils sont tous reliÃĐs et marchent entre eux pour maximiser le rÃĐsultat !
Bon visionnage,
Simon.
***
00:00 : Introduction
03:35 : Single Responsability Principle (SRP)
09:42 : Open-Closed Principle (OCP)
13:29 : Liskov Substitution Principle (LSP)
15:27 : Interface Segregation Principle (ISP)
17:50 : Dependency Inversion Principle (DIP)
20:59 : RÃĐsumÃĐ sur feuille A4
Merci Simon pour ces explications claires (comme d'hab !)
Merci beaucoup, super bien expliquÃĐ avec des exemples assez concret et des petits tips en plus (Le vert sur les PR) !
Excellent comme d'habitude, merci!
Merci beaucoup pour cette vidÃĐo ! Tu expliques super bien !
Explications trÃĻs utiles et vraiment accessibles. Merci ! Tu qs vraiment une trÃĻs bonne pÃĐdagogie !
Toujours au top ð
TrÃĻs instructif, merci!
Vous m'avez manquez coach j'espere que vous allez super, bon retour parmi nous
Excellente vidÃĐo, merci beaucoup pour tes explications.
Merci à toi pour le retour. Bon code !
Merci pour cette explication ð
TrÃĻs bonne vidÃĐo, en complÃĐment et/ou en ajout, je pense qu'une explication concernant les architectures n-Tiers et les diffÃĐrentes couches qu'on retrouve gÃĐnÃĐralement dans serait gÃĐniale. MÊme, si il y'a d'autres architectures possibles, le n-Tiers reste une trÃĻs bonne base et une bonne application des principes SOLID.
Tellement enrichissant !!
Content que vous ayez pu vous enrichir ! ð° jâespÃĻre que câest lÃĐgal !
excellent sujet, merci ð
Super le rappel SOLID trÃĻs bien expliquÃĐ. :)
Mais il ne faut pas oublier qu'une architecture parfaite est une archi qui rÃĐpond aux problÃĐmatiques et à la complexitÃĐ d'une app à un instant T. Un surdÃĐcoupage pour un composant qui fait 100 lignes de code, parce qu'on veut qu'il soit SOLID, c'est souvent une aberration qui crÃĐÃĐ plus de mal que de bien. Il faut partir du principe que le refactoring fait partie intÃĐgrante de l'ÃĐvolution du code.
Ainsi, on ÃĐvite les middleman inutiles, les interfaces en trop, bref on reste vraiment YAGNI et KISS (qui sont 2 acronymes qui imho peuvent s'utiliser à toutes les sauces. :) )
Une archi, c'est un peu comme un organisme vivant en fait.
Merci pour ces explications concises et de qualitÃĐ.
Merci à toi pour ton retour !
Bon code,
Simon.
Super tips!
Vraiment top ! Merci
Merci à toi pour le retour, bon code !
Super intÃĐressant merci pour ta vidÃĐo
Avec plaisir, bon code à vous.
Simon.
Excellent :)
Petite prÃĐcision pour OCP, l'acronyme prÊte a confusion: Open-closed principle, pour bien le comprendre, il faut le voir sous cette angle : open for extension, but closed for modification. En claire: On peut ÃĐtendre une classe mais pas la modifier. Un exemple de ce principe est le design paterne des Observer chez Rx, Lior Chamla explique trÃĻs bien le OCP dans sa sÃĐrie sur Rxjs
En programmation orientÃĐe objet, le principe ouvert/fermÃĐ (open/closed principle) affirme qu'une classe doit Être à la fois ouverte (à l'extension) et fermÃĐe (à la modification). Il correspond au ÂŦ O Âŧ de l'acronyme SOLID. ÂŦ Ouverte Âŧ signifie qu'elle a la capacitÃĐ d'Être ÃĐtendue. ÂŦ FermÃĐe Âŧ signifie qu'elle ne peut Être modifiÃĐe que par extension, sans modification de son code source.
L'exemple utilisÃĐ pour l'OCP me parait bancal, car outre le volume de code final dÃĐmultipliÃĐ (donc, plus il y a de ligne, moins c'est maintenable... à contrario du KISS), ca n'ÃĐlude pas qu'un moment donnÃĐ il faut faire un dÃĐcoupage par type pour utiliser la bonne stratÃĐgie, là oÃđ il fallait dÃĐterminer le bon calcul: on ne fait que dÃĐplacer le pb...
Hello superbe vidÃĐo ! Bravo pour ton travail il apporte de la VA pour beaucoup je pense ! Je crois comprendre certains des principes grÃĒce à toi et je tâavoue que jâai du mal à comprendre comment organiser un projet en terme de dossier et oÃđ placer les diffÃĐrents fichiers. Ce serait super dâavoir une vidÃĐo là dessus ou bien un simple lien vers un screenshot me suffirait amplement ! Penses tu pouvoir rÃĐaliser mon souhait ? A bientÃīt !
Nice!!
Super merci pour les explications, pourrais tu reprendre ces principes avec des petites vidoes dÃĐdiÃĐes et bien expliquÃĐes oÃđ on crÃĐe un petit projet en explicant ces principes ?
Câest Madame Mac Michu, ta prof dâanglais au collÃĻge. Attention, a-t-on dit dr[i]ven and not dr[aÃŊ]ven ð. Merci pour cette piqÃŧre de rappel !.
Madame Mac Michuð
Merci de suivre vos ÃĐlÃĻves
@@louqmaneinoussa6649 Madame Mac Michiouuu ð
@@Khalid15325 autant pour moi ð
@@louqmaneinoussa6649 No problem ð
Je vous aime madame Mac Michou, vous Êtes trop chou ð ð
Trop bien
mercið
Bonjour et merci pour ces explications ! Est-il possible de nous mettre à disposition la feuille de synthÃĻse finale ? Merci d'avance !
C'est exactement ce que j'allais demander, mÊme en 1080p la feuille A4 n'est pas trÃĻs lisible, un petit PDF ça serait parfait !
Merci pour la vidÃĐo !
TrÃĻs bonne vidÃĐo, est ce que quelqu'un sait si la vidÃĐo tutoriel sur Angular est construite suivant les principes SOLID?
Petite remarque vis à vis de la solution que tu proposes pour la violation de Liskov, à la base si on voulait que carrÃĐ hÃĐrite de rectangle, c'ÃĐtait pour partager une partie du code avec rectangle, faire hÃĐriter les deux de shape corrige certe la violation de liskov mais on perd ce qu'on cherchait à faire au passage, qui est faisable en partie si on dÃĐfinit la relation entre des interface en lecture seule de carrÃĐ et de rectangle (cà d des interfaces qui n'exposent que les get pour width / height)
Bonjour, merci pour votre retour. Ce n'est pas possible de le faire au niveau de Shape ?
@@codeursenior je ne pense pas car si, avec square hÃĐritant de rect, on avait une hypothÃĐtique fonction area(rect) = rect.width * rect.height, on pouvait, comme attendu, utiliser area pour square, mais si (aprÃĻs la refacto introduisant shape), on rÃĐÃĐcrit area pour qu'elle prenne shape en argument on se retrouve avec un rÃĐsultat erronÃĐ pour area(circle) par exemple, et si on ne rÃĐcrit pas area et qu'elle garde rect en argument, on ne peut plus l'utiliser pour square (qui ÃĐtait le genre de choses qu'on souhaitait pouvoir faire en faisant hÃĐriter square de rectangle au dÃĐpart)
C'est trÃĻs intÃĐressant, mais j'ai un peu l'impression que c'est 50 nuances de "il faut fragmenter son code" avec plus ou moins toujours le mÊme argument : "comme ça quand ca pÃĻte, il n'y a qu'un petit fragment qui pÃĻte". Alors c'est pas nul, je sais que je fragmente moi mÊme pas assez mes codes, juste que c'est plus un seul grand principes avec 5 cas gÃĐnÃĐraux typiques ou ce principes s'applique plutÃīt que 5 grands principes.
Dâun point de vue novice, cela peut ressembler à ca. LâexpÃĐrience dans le domaine permet dâapprofondir sa rÃĐflexion la dessus :
Les principes SOLID sont bien plus quâune simple fragmentation du code. Ils fournissent un cadre pour concevoir des logiciels robustes, maintenables et ÃĐvolutifs. Chaque principe a une intention et une justification spÃĐcifiques. Expliquons-les un par un pour illustrer pourquoi ils ne se limitent pas à âfragmenter son codeâ:
1. S - Single Responsibility Principle (SRP):
âĒ Intention: Une classe devrait avoir une seule raison de changer.
âĒ Justification: En veillant à ce que chaque classe ait une seule responsabilitÃĐ, nous facilitons la maintenance et la comprÃĐhension du code. Cela ne signifie pas simplement diviser le code, mais sâassurer que chaque division a un objectif clair.
2. O - Open/Closed Principle (OCP):
âĒ Intention: Les logiciels doivent Être ouverts à lâextension, mais fermÃĐs à la modification.
âĒ Justification: Ce principe nous encourage à penser à lâextensibilitÃĐ. Au lieu de modifier constamment le code existant (ce qui peut introduire des erreurs), nous devrions pouvoir ÃĐtendre les comportements existants de maniÃĻre modulaire.
3. L - Liskov Substitution Principle (LSP):
âĒ Intention: Les objets dâune classe dÃĐrivÃĐe doivent pouvoir remplacer ceux dâune classe de base sans affecter la correction du programme.
âĒ Justification: Il ne sâagit pas seulement de fragmentation, mais de sâassurer que les sous-classes maintiennent la vÃĐritable essence ou le contrat de la classe de base.
4. I - Interface Segregation Principle (ISP):
âĒ Intention: Les clients ne devraient pas Être forcÃĐs de dÃĐpendre des interfaces quâils nâutilisent pas.
âĒ Justification: Cela ÃĐvite dâavoir des interfaces âmonolithiquesâ ou âtout-en-unâ qui peuvent Être encombrantes ou non intuitives pour les clients. Cela favorise la clartÃĐ et la pertinence des interfaces pour chaque client.
5. D - Dependency Inversion Principle (DIP):
âĒ Intention: Les modules de haut niveau ne devraient pas dÃĐpendre des modules de bas niveau. Les deux devraient dÃĐpendre des abstractions.
âĒ Justification: Ce principe favorise lâinversion du contrÃīle et la dÃĐpendance sur des abstractions, non sur des dÃĐtails concrets. Il guide la structure du code pour quâelle soit moins fragile face aux changements et plus modulaire.
En somme, les principes SOLID ne sont pas simplement des rÃĻgles pour diviser le code. Ils reprÃĐsentent une philosophie de conception logicielle qui encourage la cohÃĐsion, la dÃĐcouplage, et la modularitÃĐ, tout en mettant lâaccent sur la crÃĐation dâun code maintenable et ÃĐvolutif.
Merci
Avec plaisir, bon code. Simon.
Bonjour,
Merci pour les explications !
J'ai juste un problÃĻme pour la comprÃĐhension par l'exemple que tu as fait, car je trouve que c'est semblable a OCP.
En programmation orientÃĐe objet, le principe ouvert/fermÃĐ (open/closed principle) affirme qu'une classe doit Être à la fois ouverte (à l'extension) et fermÃĐe (à la modification). Il correspond au ÂŦ O Âŧ de l'acronyme SOLID. ÂŦ Ouverte Âŧ signifie qu'elle a la capacitÃĐ d'Être ÃĐtendue. ÂŦ FermÃĐe Âŧ signifie qu'elle ne peut Être modifiÃĐe que par extension, sans modification de son code source.
Comment appliquer les principes SOLID en front endroit, sur React par exemple ?
EntiÃĻrement d'accord (mÊme si SOLID ne s'applique pas nÃĐcessairement à tous les stacks / frameworks).
Hello, merci pour votre commentaire. Avez vous des exemples de stack ou de frameworks sur lesquelles les principes SOLID ne sâappliquent pas ? Bon code, Simon.
Top merci
ð
meric simon.
Bonjour Simon ! Que penses-tu du livre "Clean Code" de Robert C. Martin ?
Ses conseils sont directement dans la ligne de clean code
Oncle Bob aka Robert C. Martin est une rÃĐfÃĐrence en la matiÃĻre. Ce livre est à lire à plusieurs reprises dans ta carriÃĻre.
Bonjour,
Aurais-tu des conseils plus spÃĐcifiques dans le design de script ? Il me semble que cette vidÃĐo (qualitative) serve surtout du langage de programmation que du script.
En te remerciant,
Les principes SOLID sâapplique principalement pour la programmation orientÃĐ objet. Jâimagine que par script vous entendez la programmation procÃĐdurale, ou ces principes ne sâappliquent pas à la base.
@@codeursenior Oui tout à fait. Ce sur quoi je travaille (c'est pas mon domaine mais j'en ai besoin) tient de quelque chose plus procÃĐdural en effet (visual basic, donc orientÃĐ objet aussi cela dit). Du coup, dans cette veine, auriez-vous quelques bonnes pratiques du mÊme genre ? Je n'en trouve pas...
@@elcarryboo9344 Hello, non rien de pertinent à dire ! Vous trouverez mieux ailleurs sur le procÃĐdural. Bon code, Simon.
Peux tu partager tes notes ?
Tu laisses pas assez longtemps le code à l'image
la barre espace c'est pas mal mdr
@@hydrogen6110 j'ai plus les explications aprÃĻs
Sur pause. Tu lis et assimile le code et rÃĐÃĐcoute l'explication
Augmentation positive de 0.5 ðŪ
L'inversion de dÃĐpendance permet à une couche infÃĐrieure d'envoyer des messages à la couche supÃĐrieure tout en respectant le principe de sÃĐgrÃĐgation d'interface
Voici la rÃĐponse de ChatGPT, il a ÃĐtÃĐ meilleur que moi ce qui est rare et surprenant :
"
Cette affirmation est en partie vraie. L'inversion de dÃĐpendance peut effectivement permettre à une couche infÃĐrieure de communiquer avec une couche supÃĐrieure grÃĒce aux abstractions, mais ce n'est pas vraiment le but principal du DIP. Le DIP vise principalement à dÃĐcoupler les modules pour la flexibilitÃĐ et la maintenance. Le fait que la couche infÃĐrieure "envoie des messages" à la couche supÃĐrieure est plutÃīt une consÃĐquence de cette dÃĐpendance inversÃĐe, mais cela peut Être rÃĐalisÃĐ de diffÃĐrentes maniÃĻres et pas seulement par l'inversion de dÃĐpendance.
Quant au respect du principe de sÃĐgrÃĐgation d'interface, il est indÃĐpendant du DIP mais peut Être utilisÃĐ conjointement pour s'assurer que les interfaces (abstractions) utilisÃĐes dans l'inversion de dÃĐpendance sont propres et spÃĐcifiques à leurs responsabilitÃĐs.
"
Qu'est ce c'est principe fonctionne avec react js ?!
Ãa fonctionne avec tous les langages et framework OOP, dont react fait parti
@@LordGerbito merci de ta rÃĐponse.
DDD=domain driven design ð
La Base c est de faire une conception avant de coder. Meme si elle est legere elle vous permettra d avoir une glibale du projet de poser les bases. Et ensuite n empeche de revoir cette conception au cours du codage.
Je suppose que vous vouliez dire âune vision globale du projet avant de poser les basesâ. Je suis intÃĐressÃĐ par ce type de pratique, qui consiste à concevoir le plan avant de crÃĐer. Je mâÃĐtais renseignÃĐ sur les diagrammes de classes avec lâUML. Mais je me demandais sâil existe des façons logiques, thÃĐoriques, des questions à poser pour orienter notre conception dans le bon sens. Existe-t-il des ouvrages ou des cours pour apprendre à faire une conception efficace ?
Oui, realiser un dossier de conception à l ancienne, biensure c est inutile pour les petits projet. Bien que...
UML peut aider, j ai lu UML 2 en action tres bon bouquin.
Un autre nouquin qui mais qu il faut avoir lu car il vous donne la demarche c est UML2 modeliser une application web.
Il doit exister des bouquins plus recent, mais ca fait maintenant quelques annÃĐes que je ne fais plus de projet au forfait...
pour un dev, ne pas oublier le BSP, non pas le board support package (trÃĻs utile), mais plus genetalement il s'agit du bon sens paysan, trop souvent oubliÃĐ.
*generalement
Et le YOP ? TH-cam Only Principle : quand on parle de code, on ne montre que du code
Et l'UML ?
Quand ton propre code commence à te faire chier, il est temps de faire marche arriÃĻre.
"Câest la seule façon dâÃĐcrire du code propre !"
Ah bon. Donc il n'existait pas de code propre avant l'invention de SOLID ?
C'est comme Bruno Latour qui disait qu'un pharaon ne pouvait pas Être mort de la tuberculose car Koch n'a dÃĐcouvert le bacille qu'au 19ÃĻme siÃĻcle.
On respectait ces principes avant qu'ils ne soient formalisÃĐs et nommÃĐs. Ou on s'exposait à des problÃĻmes.
Quand on voit tout le code dÃĐgueu à reprendre... apparemment meme aujourd'hui c'est pas souvent respectÃĐ...
Les explications ne sont pas claires dsl. On comprend dans les grandes lignes mais pas suffisant pour mettre en pratique
Hello, merci pour ton retour. Cette vidÃĐo se veut gÃĐnÃĐraliste, chaque point de SOLID mÃĐriterait une vidÃĐo complÃĻte et plus dÃĐtaillÃĐ sur le sujet. Je me note ça !
Bon code,
Simon.
Tu as un truc dans les oreilles.
Trop fort ton principe de coder des donnÃĐes en dur et d'essayer d'amÃĐliorer ta merde aprÃĻs coup
AmÃĐliorer la merde est mon mÃĐtier. Quâest ce que vous essayez de nous apporter sinon ?