SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Well-crafted software
un code maintenable avec le principe de responsabilité
                      unique

     Guillaume Gardais, Nicolas Capponi - Agile Grenoble 2012




                                                                1
Contrat de session                                         2




 SOLID / GRASP
                                      Des solutions magiques




             Principe de Responsabilité Unique
Qui sommes nous ?                    3




               Kelkoo depuis 2010

                 Développeur
               Architecte logiciel

    @Wace99


               Kelkoo depuis 2003

                 Développeur
               Architecte logiciel

   @ncapponi
Institut Médico Légal du Code                              4
                            avec
Nicolas dans le rôle du Docteur Robert « Uncle Bob » Martin
        Guillaume dans le rôle de l’Etudiant Codeur
Indices                                                5



          Beaucoup de variables d'instances, de
  1       méthodes, de lignes de codes, de classes

      Décrire la classe en une phrase: sans OU,
  2   sans ET

          Nom de classe générique: Manager, Process,
  3       Service, Helper, Tools

          Code dupliqué: responsabilité diluée entre
  4       plusieurs éléments
Indices (suite)                             7




  5    Métrique : LCOM4


  6    Métrique : complexité cyclomatique


  7    Métrique : package cohésion
Radiographie du cadavre   9
Solution: Diviser                    10




1   1 classe pour 1 responsabilité
Solution: Facade                           11




2   Simplifier l’utilisation de « Cart »
Solution: Interface                12




3    Séparer les responsabilités
Solution: Visiteur               13




4    Respecter l’encapsulation
Quelle solution choisir ?   14
Un peu de théorie                                        15




                                  Principe de
                           responsabilité unique (SRP)

                             Une classe ne doit avoir
                             qu’une seule raison de
 Robert Martin 1995/2002
                                    changer

                            Chaque responsabilité est
                             un axe de changement
Conclusion                      16




                     Contexte



      SRP est un principe,
         pas une règle
Merci                                          17




        Code, références:
        https://github.com/ncapponi/srp-2012




         @Wace99
         @ncapponi
18
Identifier les responsabilités                                             20


       Product              Architecte        Marketing


                                                                Rôle




                                                               Familles de
                                                                fonctions
Ajouter        Enlever    Stockage            Contenu du
Un produit     Un produit en BDD Sérialise    Mail à envoyer


        Cart            CartRepository       MailBuider        Module
Gestion du changement                          21




    Dégradation lors des
        évolutions



                       Réévaluer les axes de
                           changements
                        à chaque évolution
Quelques concepts                                      22



                                    Couplage:
       Rigidité:
                             faire évoluer l’un sans
chaine de dépendances
                                 modifier l'autre



        Fragilité : en touchant un module, on
       casse un comportement dans un autre
         modèle apparemment indépendant

Contenu connexe

Similaire à Un code maintenable avec le principe de responsabilite unique

Faire du-code-centre-sur-l-humain devoxx
Faire du-code-centre-sur-l-humain devoxxFaire du-code-centre-sur-l-humain devoxx
Faire du-code-centre-sur-l-humain devoxxVISEO
 
OCTO - Les pratiques des geants du web
OCTO - Les pratiques des geants du webOCTO - Les pratiques des geants du web
OCTO - Les pratiques des geants du webOCTO Technology
 
OCTO 2012 : Les pratiques des geants du web
OCTO 2012 : Les pratiques des geants du web OCTO 2012 : Les pratiques des geants du web
OCTO 2012 : Les pratiques des geants du web OCTO Technology
 
La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012Jean-Marc Fontaine
 
La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012Jean-Marc Fontaine
 
DODMTL 2019 - Agile et DevOps chez Croesus
DODMTL 2019 - Agile et DevOps chez CroesusDODMTL 2019 - Agile et DevOps chez Croesus
DODMTL 2019 - Agile et DevOps chez CroesusMartin Deslongchamps
 
Projets collaboratifs : faites la difference avec Confluence !
Projets collaboratifs : faites la difference avec Confluence !Projets collaboratifs : faites la difference avec Confluence !
Projets collaboratifs : faites la difference avec Confluence !Ideo - Groupe Netapsys
 
Management de projet agile vs classique pmi atlantic 20120322
Management de projet agile vs classique pmi atlantic 20120322Management de projet agile vs classique pmi atlantic 20120322
Management de projet agile vs classique pmi atlantic 20120322Jean-Luc MAZE
 
Les craft.wo.men Confiné.e.s - Agile en Seine 2021
Les craft.wo.men Confiné.e.s - Agile en Seine 2021Les craft.wo.men Confiné.e.s - Agile en Seine 2021
Les craft.wo.men Confiné.e.s - Agile en Seine 2021Agile En Seine
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns JavaVINOT Bernard
 
CelluForce | Déjeuner du GATE 5 avril 2013
CelluForce | Déjeuner du GATE 5 avril 2013CelluForce | Déjeuner du GATE 5 avril 2013
CelluForce | Déjeuner du GATE 5 avril 2013Sherbrooke Innopole
 
SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​Vincent Petetin
 
Livret bleu qualitelogicielle_gt-logiciellibre_systematic
Livret bleu qualitelogicielle_gt-logiciellibre_systematicLivret bleu qualitelogicielle_gt-logiciellibre_systematic
Livret bleu qualitelogicielle_gt-logiciellibre_systematicPascal Flamand
 
[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle
[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle
[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielleGreenLabCenter
 

Similaire à Un code maintenable avec le principe de responsabilite unique (17)

Méthodes agiles
Méthodes agilesMéthodes agiles
Méthodes agiles
 
Agile pour l'echafaud ATT2020.pptx
Agile pour l'echafaud ATT2020.pptxAgile pour l'echafaud ATT2020.pptx
Agile pour l'echafaud ATT2020.pptx
 
Initiation à l'agile
Initiation à l'agileInitiation à l'agile
Initiation à l'agile
 
Faire du-code-centre-sur-l-humain devoxx
Faire du-code-centre-sur-l-humain devoxxFaire du-code-centre-sur-l-humain devoxx
Faire du-code-centre-sur-l-humain devoxx
 
OCTO - Les pratiques des geants du web
OCTO - Les pratiques des geants du webOCTO - Les pratiques des geants du web
OCTO - Les pratiques des geants du web
 
OCTO 2012 : Les pratiques des geants du web
OCTO 2012 : Les pratiques des geants du web OCTO 2012 : Les pratiques des geants du web
OCTO 2012 : Les pratiques des geants du web
 
La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012
 
La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012
 
DODMTL 2019 - Agile et DevOps chez Croesus
DODMTL 2019 - Agile et DevOps chez CroesusDODMTL 2019 - Agile et DevOps chez Croesus
DODMTL 2019 - Agile et DevOps chez Croesus
 
Projets collaboratifs : faites la difference avec Confluence !
Projets collaboratifs : faites la difference avec Confluence !Projets collaboratifs : faites la difference avec Confluence !
Projets collaboratifs : faites la difference avec Confluence !
 
Management de projet agile vs classique pmi atlantic 20120322
Management de projet agile vs classique pmi atlantic 20120322Management de projet agile vs classique pmi atlantic 20120322
Management de projet agile vs classique pmi atlantic 20120322
 
Les craft.wo.men Confiné.e.s - Agile en Seine 2021
Les craft.wo.men Confiné.e.s - Agile en Seine 2021Les craft.wo.men Confiné.e.s - Agile en Seine 2021
Les craft.wo.men Confiné.e.s - Agile en Seine 2021
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
 
CelluForce | Déjeuner du GATE 5 avril 2013
CelluForce | Déjeuner du GATE 5 avril 2013CelluForce | Déjeuner du GATE 5 avril 2013
CelluForce | Déjeuner du GATE 5 avril 2013
 
SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​
 
Livret bleu qualitelogicielle_gt-logiciellibre_systematic
Livret bleu qualitelogicielle_gt-logiciellibre_systematicLivret bleu qualitelogicielle_gt-logiciellibre_systematic
Livret bleu qualitelogicielle_gt-logiciellibre_systematic
 
[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle
[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle
[WEBINAR] Kaliterre : 10 raisons d'intégrer l'éco-conception logicielle
 

Un code maintenable avec le principe de responsabilite unique

  • 1. Well-crafted software un code maintenable avec le principe de responsabilité unique Guillaume Gardais, Nicolas Capponi - Agile Grenoble 2012 1
  • 2. Contrat de session 2 SOLID / GRASP Des solutions magiques Principe de Responsabilité Unique
  • 3. Qui sommes nous ? 3 Kelkoo depuis 2010 Développeur Architecte logiciel @Wace99 Kelkoo depuis 2003 Développeur Architecte logiciel @ncapponi
  • 4. Institut Médico Légal du Code 4 avec Nicolas dans le rôle du Docteur Robert « Uncle Bob » Martin Guillaume dans le rôle de l’Etudiant Codeur
  • 5. Indices 5 Beaucoup de variables d'instances, de 1 méthodes, de lignes de codes, de classes Décrire la classe en une phrase: sans OU, 2 sans ET Nom de classe générique: Manager, Process, 3 Service, Helper, Tools Code dupliqué: responsabilité diluée entre 4 plusieurs éléments
  • 6.
  • 7. Indices (suite) 7 5 Métrique : LCOM4 6 Métrique : complexité cyclomatique 7 Métrique : package cohésion
  • 8.
  • 10. Solution: Diviser 10 1 1 classe pour 1 responsabilité
  • 11. Solution: Facade 11 2 Simplifier l’utilisation de « Cart »
  • 12. Solution: Interface 12 3 Séparer les responsabilités
  • 13. Solution: Visiteur 13 4 Respecter l’encapsulation
  • 15. Un peu de théorie 15 Principe de responsabilité unique (SRP) Une classe ne doit avoir qu’une seule raison de Robert Martin 1995/2002 changer Chaque responsabilité est un axe de changement
  • 16. Conclusion 16 Contexte SRP est un principe, pas une règle
  • 17. Merci 17 Code, références: https://github.com/ncapponi/srp-2012 @Wace99 @ncapponi
  • 18. 18
  • 19.
  • 20. Identifier les responsabilités 20 Product Architecte Marketing Rôle Familles de fonctions Ajouter Enlever Stockage Contenu du Un produit Un produit en BDD Sérialise Mail à envoyer Cart CartRepository MailBuider Module
  • 21. Gestion du changement 21 Dégradation lors des évolutions Réévaluer les axes de changements à chaque évolution
  • 22. Quelques concepts 22 Couplage: Rigidité: faire évoluer l’un sans chaine de dépendances modifier l'autre Fragilité : en touchant un module, on casse un comportement dans un autre modèle apparemment indépendant

Notes de l'éditeur

  1. Ce que vous verrez1Focus sur le principe de responsabilité unique (SRP)2 Indices pour détecter le non respect de RSP3 Approches pour respecter le SRP4 60% de code / 40% de slidesCe que vous ne verrez pasLes concepts SOLID, GRASPDes solutions magiques, des réponses toute faites
  2. Self presentation
  3. Institut médico-légal du codeEtudiant CodeurDocteur Robert « Uncled Bob » Martin
  4. Institut médico-légal du codeEtudiant CodeurDocteur Robert « Uncled Bob » Martin
  5. Institut médico-légal du codeEtudiant CodeurDocteur Robert « Uncled Bob » Martin
  6. Institut médico-légal du codeEtudiant CodeurDocteur Robert « Uncled Bob » Martin
  7. ++ implémentation séparée+ pas d’interface (inversion de dépendance) Client doit chercher quelle classe implémente quelle responsabilité- Couplage partiel entre classes d’implém.
  8. + implémentation séparée+ facilite utilisation par client Interface partage plusieursresponsabilités- Couplage partiel entre classes d’implémentation
  9. + chaque acteur a son interface Implémentation non séparée Client doit chercher quelle interface utiliser
  10. + implémentation séparée+ encapsulation préservée+ facilité d’ajout des fonctionnalités- couteux de changer la structure
  11. On a montré quelques solutions possibles pour respecter le SRPOn voit bien qu’il n’y pas de solution idéale.Quand ce sera à vous de faire un choix, il dépendra de votre contexteTout sera dans l’art du compromis.