Un code maintenable avec le principe de responsabilite unique
-
Upload
nicolas-capponi -
Category
Technology
-
view
943 -
download
1
description
Transcript of Un code maintenable avec le principe de responsabilite unique
![Page 1: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/1.jpg)
1
Well-crafted softwareun code maintenable avec le principe de responsabilité
unique
Guillaume Gardais, Nicolas Capponi - Agile Grenoble 2012
![Page 2: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/2.jpg)
2Contrat de session
SOLID / GRASPDes solutions magiques
Principe de Responsabilité Unique
![Page 3: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/3.jpg)
3Qui sommes nous ?
@Wace99
@ncapponi
Kelkoo depuis 2010
DéveloppeurArchitecte logiciel
Kelkoo depuis 2003
DéveloppeurArchitecte logiciel
![Page 4: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/4.jpg)
4Institut Médico Légal du Code
avecNicolas dans le rôle du Docteur Robert « Uncle Bob »
MartinGuillaume dans le rôle de l’Etudiant Codeur
Application
![Page 5: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/5.jpg)
5Indices
2 Décrire la classe en une phrase: sans OU, sans ET
Beaucoup de variables d'instances, de méthodes, de lignes de codes, de classes1
3 Nom de classe générique: Manager, Process, Service, Helper, Tools
4 Code dupliqué: responsabilité diluée entre plusieurs éléments
![Page 6: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/6.jpg)
![Page 7: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/7.jpg)
7Indices (suite)
5 Métrique : LCOM4
Métrique : complexité cyclomatique6
7 Métrique : package cohésion
![Page 8: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/8.jpg)
![Page 9: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/9.jpg)
9Radiographie du cadavre
![Page 10: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/10.jpg)
10Solution: Diviser
1 1 classe pour 1 responsabilité
![Page 11: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/11.jpg)
11Solution: Facade
2 Simplifier l’utilisation de « Cart »
![Page 12: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/12.jpg)
12Solution: Interface
3 Séparer les responsabilités
![Page 13: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/13.jpg)
13Solution: Visiteur
4 Respecter l’encapsulation
![Page 14: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/14.jpg)
14Quelle solution choisir ?
![Page 15: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/15.jpg)
15Un peu de théorie
Principe de responsabilité unique (SRP)
Une classe ne doit avoir qu’une seule raison de
changer
Chaque responsabilité est un axe de changement
Robert Martin 1995/2002
![Page 16: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/16.jpg)
16Conclusion
SRP est un principe, pas une règle
Contexte
![Page 17: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/17.jpg)
17
Code, références:https://github.com/ncapponi/srp-2012
Merci
@Wace99@ncapponi
![Page 18: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/18.jpg)
18
![Page 19: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/19.jpg)
![Page 20: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/20.jpg)
20Identifier les responsabilités
Rôle
Familles de fonctions
ModuleCart CartRepository MailBuider
Architecte
Stockageen BDD Sérialise
Product Marketing
AjouterUn produit
EnleverUn produit
Contenu duMail à envoyer
![Page 21: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/21.jpg)
21Gestion du changement
Dégradation lors des évolutions
Réévaluer les axes de changements
à chaque évolution
![Page 22: Un code maintenable avec le principe de responsabilite unique](https://reader035.fdocuments.fr/reader035/viewer/2022062709/558e67e11a28ab9b218b475f/html5/thumbnails/22.jpg)
22Quelques concepts
Couplage: faire évoluer l’un sans
modifier l'autre
Rigidité: chaine de dépendances
Fragilité : en touchant un module, on casse un comportement dans un autre
modèle apparemment indépendant