SlideShare ist ein Scribd-Unternehmen logo
1 von 40
TOP 5 DES MEILLEURES
FAÇON D'AMÉLIORER
VOTRE CODE .NET

Write once
read many.
INTRODUCTION
 Legacy code is code
without tests
 Michael Feather dans
Working effectively with
legacy code

 Sans une
maintenance
constante, le code se
dégrade rapidement
 Nous devons
détecter et éliminer
les "code smell"
© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

2
MES 5 AMÉLIORATIONS
1. Simplifier les conditionnels
2. Supprimer la documentation
3. Clarifier les contrats
4. Réduire le scope
5. Éliminer le code mort
© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

3
SIMPLIFIER LES CONDITIONNELS –
POURQUOI?

1
2
3
4
5






Réduit la
Améliore
Améliore
Améliore

complexité
la lisibilité
la maintenabilité
la réutilisabilité

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

4
SIMPLIFIER LES CONDITIONNELS–
QUAND?

1
2
3
4
5







il y a plus d'une condition (and / or);
il y a trop de code dans le body;
la condition est basée sur un type;
il y a des if imbriqués
il y a plusieurs décisions basées sur la même information (if
/ else if / switch case)

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

5
SIMPLIFIER LES CONDITIONNELS –
COMMENT?

1
2
3
4
5

 Refactor conditional statement








Decompose conditional
Consolidate conditional expression
Consolidate duplicate conditional fragments
Introduce null object
Flatten nested if
Don't use negative
Keep conditional statement lean

 Avoid conditional statement
 Replace conditional with polymorphism
 Replace conditional logic with strategy
 Replace conditional dispatcher with command

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

6
DECOMPOSE CONDITIONAL
1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

7
CONSOLIDATE CONDITIONAL EXPRESSION
1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

8
CONSOLIDATE DUPLICATE CONDITIONAL
FRAGMENTS

1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

9
INTRODUCE NULL OBJECT
1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

10
FLATTEN NESTED IF
1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

11
DON'T USE NEGATIVE
1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

12
KEEP CONDITIONAL STATEMENT LEAN
1

 Autant que possible, avoir une seule condition

2

 Utilisez une méthode pour combiner plusieurs
condition

4
5

 SIMPLIFIER LES
CONDITIONNELS

3

 Inverser le if si la plupart (ou tout) le code se
trouve dans la branche true
 Attention à la double négation

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

13
REPLACE CONDITIONAL WITH
POLYMORPHISM

1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

14
REPLACE CONDITIONAL LOGIC WITH
STRATEGY

1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

15
REPLACE CONDITIONAL DISPATCHER WITH
COMMAND

1
2

4
5

SIMPLIFIER LES
CONDITIONNELS

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

16
1

SUPPRIMER LA DOCUMENTATION –
POURQUOI?

2
3
4

 Améliore la lisibilité
 Améliore la maintenabilité
 Évite les commentaires désuet

5

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

17
1

SUPPRIMER LA DOCUMENTATION –
QUAND?

2
3
4
5

 Chaque fois qu'un commentaire est autre chose que de
l'information (utile), une intention, une clarification, un
avertissement, un TODO ou une amplification.
 Le commentaire est le seul contenu d'un bloc de code
 Catch vide

 Le commentaire décrit, ligne par ligne, le code
 Exemple:





//
//
//
//

Getting connection string from configuration
Opening connection
Retrieving data
Closing connection

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

18
SUPPRIMER LA DOCUMENTATION –
COMMENT?

1
2
3
4
5

 Remplacez les commentaires par une bonne nomenclature
 Extract method
 Utilisez des noms significatifs

 Écrivez des commentaires utiles
 Respectez la nomenclature (MSDN: Guidelines for names)





Properties
Enums
Events
Methods

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

19
EXTRACT METHOD
1
2

4
5

SUPPRIMER LA
DOCUMENTATION

3

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

20
UTILISEZ DES NOMS SIGNIFICATIFS
1

 Nommez selon l'intention / évitez le mapping

2

4
5

 Évitez la désinformation

 SUPPRIMER LA
DOCUMENTATION

3

 d  elapsedDays

 AccountList  Accounts

 Assurez-vous d’avoir une distinction significative
 amount  invoiceTotal, invoiceSubTotal

 Utilisez des noms prononçables
 genymdhms  generationTimestamp

 Utilisez un nom pour nommer une classe
 Utilisez un verbe pour nommer une méthode
 Ne soyez pas créatif, utilisez les nom standards
 Destroy, Kill, Obliterate  Delete

 Domaine de solution ↔ domaine du problème

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

21
PROPERTIES
1

3
4
5

 SUPPRIMER LA
DOCUMENTATION

2

 Utilisez le PascalCase naming
 Nommez les propriété avec un nom ou un adjectif
 N'utilisez pas de noms qui pourraient être
confondu avec une méthode Get
 Préfixez les booléen avec Can, Is ou Has

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

22
ENUMS
1

3
4
5

 SUPPRIMER LA
DOCUMENTATION

2

 Considérez le premier
élément comme valeur par
défaut
 Utilisez le PascalCasing
naming
 Les Enum simples doivent
utiliser le singulier
 Les Enum de type Bit fields
devraient utiliser le pluriel
er avoir l'attribut Flags
 Les valeurs des Enum de
type bit fields doivent être
coherentes (Read & Write
== ReadWrite)

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

23
EVENTS
1

3
4
5

 SUPPRIMER LA
DOCUMENTATION

2

 Utilisez le PascalCase naming
 Nommez les événement avec un verbe au
present progressive pour les pré-événements et
au passé pour les post-événements
 Fournissez une version virtual de l'événement
 Fournissez une façon d'annuler un pré événement

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

24
EVENTS
1

3
4
5

 SUPPRIMER LA
DOCUMENTATION

2

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

25
METHODS
1

 Utilisez des verbes pour nommer les méthodes

2

4
5

 SUPPRIMER LA
DOCUMENTATION

3

 ProcessPayment

 Exprimez clairement le retour attendu lors de
l'appel de la méthode
 CreateCustomer
 GetInvoice

 Utilisez une nomenclatue uniforme (Get, Fetch ou
Retrieve mais pas tous dans le même contexte)

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

26
1

CLARIFIER LES CONTRATS –
POURQUOI?

2
3
4

 Améliore la performance
 Améliore la lisibilité
 Améliore la reutilisabilité

5

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

27
CLARIFIER LES CONTRATS– QUAND?

1
2
3
4
5






Il y a trop de paramètres (combien est -ce?)
Un méthode fait plus d'une chose
Une méthode utilise des paramètre out
Vous avez besoin de valeur par défaut

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

28
1

CLARIFIER LES CONTRATS–
COMMENT?

2
3
4
5

 Réduisez le nombre de paramètres
 Introduce parameter object
 Create overload with less parameters
 Use default value

 Les ouputs
 La valeur de retour
 Les paramètres out

 Overload dans le bon ordre

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

29
2
3
4
5

CLARIFIER LES CONTRATS

1

INTRODUCE PARAMETER OBJECT

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

30
2
3
4
5

CLARIFIER LES CONTRATS

1

CREATE OVERLOAD WITH FEWER
PARAMETERS

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

31
2
3
4
5

CLARIFIER LES CONTRATS

1

USE DEFAULT VALUE

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

32
1

RÉDUIRE LE SCOPE – POURQUOI?

2
3
4

 Évite les effets de bords
 Améliore la réutilisabilité
 Améliore la maintenabilité

5

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

33
1

RÉDUIRE LE SCOPE – QUAND?

2
3

 Un field est utilisé par trop peu de méthodes
 Les membres publiques expose le comportement interne

4
5

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

34
1

RÉDUIRE LE SCOPE – COMMENT?

2
3
4
5

 Visibilité
 protected
 private
 internal

 Responsabilité
 Déplacer un field vers une méthode
 Scinder un classe
 Déplacer un variable près de son utilisation

 Durée de vie
 Créer les instances au besoin
 Éviter de garder des références inutiles

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

35
ÉLIMINER LE CODE MORT –
POURQUOI?

1
2
3
4
5







Parcequ'il le faut
Améliore la maintenabilité
Améliore la performance
Améliore la lisibilité
100% de couverture de test

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

36
1

ÉLIMINER LE CODE MORT – QUAND?

2
3
4

 Vous savez que le code est mort
 Vous pensez que le code est mort
 Vous voulez que le code soit mort

5

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

37
1

ÉLIMINER LE CODE MORT – COMMENT?

2
3
4
5

 Identifiez et retirez le code mort
 Effacez le code
 Compilez
 Roulez les tests

 Qu'est-ce que du code mort?
 Du code en commentaire
 Toutes lignes de code non couverte par un test unitaire

 Outils
 Il existe des outils qui supprime automatiquement le code non
couvert par au moins un test

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

38
REFERENCES
 Refactoring – Improving the design of existing code
 Auteur: Martin Fowler
 Edition: Addison Wesley
 ISBN: 978-0-201-48567-7

 Refactoring to patterns (Martin Fowler signature)
 Auteur: Joshua Kerievsky
 Edition: Adison Wesley
 ISBN: 978-0-321-21335-1

 Clean code – a handbook of agile software craftsmanship
 Auteur: Robert C. Martin
 Edition: Prentice Hall
 ISBN: 978-0-132-35088-4

 Working effectively with legacy code
 Auteur: Michael C. Feather
 Edition: Prentice Hall
 ISBN: 978-0-13-117705-5

© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

39
LA FIN
 Questions?
 Rappelez-vous

Simplifier les
conditionnels

Supprimer la
documentation

Clarifier les
contrats

Réduire le
scope

Éliminer le
code mort

 Eric De Carufel
 eric@decarufel.net
 http://blog.decarufel.net
© Pyxis Technologies inc.

Top 5 des meilleures façon d'améliorer votre code

40

Weitere ähnliche Inhalte

Ähnlich wie Top 5 des meilleures façons d'améliorer votre code

Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeEric De Carufel
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsThierry Gayet
 
NDepend 5 en action par son créateur
NDepend 5 en action par son créateurNDepend 5 en action par son créateur
NDepend 5 en action par son créateurMicrosoft
 
TDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitTDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitEspritAgile
 
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeSoirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeTelecomValley
 
Assurer la conformité et la bonne santé d’un grand nombre de postes de travail
Assurer la conformité et la bonne santé d’un grand nombre de postes de travailAssurer la conformité et la bonne santé d’un grand nombre de postes de travail
Assurer la conformité et la bonne santé d’un grand nombre de postes de travailMicrosoft Décideurs IT
 
D8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpages
D8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpagesD8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpages
D8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpagesCERTyou Formation
 
meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023Frederic Leger
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Victor Coustenoble
 
M10266 formation-programmation-csharp-avec-microsoft-net-framework-4
M10266 formation-programmation-csharp-avec-microsoft-net-framework-4M10266 formation-programmation-csharp-avec-microsoft-net-framework-4
M10266 formation-programmation-csharp-avec-microsoft-net-framework-4CERTyou Formation
 
Gandi (re)fait le .point sur les nouvelles extensions de nom de domaine
Gandi (re)fait le .point sur les nouvelles extensions de nom de domaineGandi (re)fait le .point sur les nouvelles extensions de nom de domaine
Gandi (re)fait le .point sur les nouvelles extensions de nom de domaineGandi.net
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)CERTyou Formation
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesCERTyou Formation
 
Happy dev ... & ops
Happy dev ... & opsHappy dev ... & ops
Happy dev ... & opsQuentin Adam
 
Université de la performance
Université de la performanceUniversité de la performance
Université de la performancepkernevez
 
Techdays2011
Techdays2011 Techdays2011
Techdays2011 ALTER WAY
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 

Ähnlich wie Top 5 des meilleures façons d'améliorer votre code (20)

Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton code
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
 
NDepend 5 en action par son créateur
NDepend 5 en action par son créateurNDepend 5 en action par son créateur
NDepend 5 en action par son créateur
 
TDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitTDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroit
 
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeSoirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
 
Assurer la conformité et la bonne santé d’un grand nombre de postes de travail
Assurer la conformité et la bonne santé d’un grand nombre de postes de travailAssurer la conformité et la bonne santé d’un grand nombre de postes de travail
Assurer la conformité et la bonne santé d’un grand nombre de postes de travail
 
D8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpages
D8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpagesD8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpages
D8 lxp1fr formation-introduction-au-developpement-ibm-domino-xpages
 
Perf university
Perf universityPerf university
Perf university
 
meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023meetup devops aix-marseille - décembre 2023
meetup devops aix-marseille - décembre 2023
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?
 
M10266 formation-programmation-csharp-avec-microsoft-net-framework-4
M10266 formation-programmation-csharp-avec-microsoft-net-framework-4M10266 formation-programmation-csharp-avec-microsoft-net-framework-4
M10266 formation-programmation-csharp-avec-microsoft-net-framework-4
 
Gandi (re)fait le .point sur les nouvelles extensions de nom de domaine
Gandi (re)fait le .point sur les nouvelles extensions de nom de domaineGandi (re)fait le .point sur les nouvelles extensions de nom de domaine
Gandi (re)fait le .point sur les nouvelles extensions de nom de domaine
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages (1)
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
 
Happy dev ... & ops
Happy dev ... & opsHappy dev ... & ops
Happy dev ... & ops
 
Université de la performance
Université de la performanceUniversité de la performance
Université de la performance
 
Techdays2011
Techdays2011 Techdays2011
Techdays2011
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 

Mehr von Eric De Carufel

Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019Eric De Carufel
 
Architecture azure performante
Architecture azure performanteArchitecture azure performante
Architecture azure performanteEric De Carufel
 
Refactoring to Design Patterns
Refactoring to Design PatternsRefactoring to Design Patterns
Refactoring to Design PatternsEric De Carufel
 
Cqrs + event sourcing pyxis v2 - en
Cqrs + event sourcing   pyxis v2 - enCqrs + event sourcing   pyxis v2 - en
Cqrs + event sourcing pyxis v2 - enEric De Carufel
 
Dvcs mercurial - pyxis - eric de carufel
Dvcs   mercurial - pyxis - eric de carufelDvcs   mercurial - pyxis - eric de carufel
Dvcs mercurial - pyxis - eric de carufelEric De Carufel
 

Mehr von Eric De Carufel (6)

Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019
 
Architecture azure performante
Architecture azure performanteArchitecture azure performante
Architecture azure performante
 
Refactoring to Design Patterns
Refactoring to Design PatternsRefactoring to Design Patterns
Refactoring to Design Patterns
 
Cqrs + event sourcing pyxis v2 - en
Cqrs + event sourcing   pyxis v2 - enCqrs + event sourcing   pyxis v2 - en
Cqrs + event sourcing pyxis v2 - en
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
Dvcs mercurial - pyxis - eric de carufel
Dvcs   mercurial - pyxis - eric de carufelDvcs   mercurial - pyxis - eric de carufel
Dvcs mercurial - pyxis - eric de carufel
 

Top 5 des meilleures façons d'améliorer votre code

  • 1. TOP 5 DES MEILLEURES FAÇON D'AMÉLIORER VOTRE CODE .NET Write once read many.
  • 2. INTRODUCTION  Legacy code is code without tests  Michael Feather dans Working effectively with legacy code  Sans une maintenance constante, le code se dégrade rapidement  Nous devons détecter et éliminer les "code smell" © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 2
  • 3. MES 5 AMÉLIORATIONS 1. Simplifier les conditionnels 2. Supprimer la documentation 3. Clarifier les contrats 4. Réduire le scope 5. Éliminer le code mort © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 3
  • 4. SIMPLIFIER LES CONDITIONNELS – POURQUOI? 1 2 3 4 5     Réduit la Améliore Améliore Améliore complexité la lisibilité la maintenabilité la réutilisabilité © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 4
  • 5. SIMPLIFIER LES CONDITIONNELS– QUAND? 1 2 3 4 5      il y a plus d'une condition (and / or); il y a trop de code dans le body; la condition est basée sur un type; il y a des if imbriqués il y a plusieurs décisions basées sur la même information (if / else if / switch case) © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 5
  • 6. SIMPLIFIER LES CONDITIONNELS – COMMENT? 1 2 3 4 5  Refactor conditional statement        Decompose conditional Consolidate conditional expression Consolidate duplicate conditional fragments Introduce null object Flatten nested if Don't use negative Keep conditional statement lean  Avoid conditional statement  Replace conditional with polymorphism  Replace conditional logic with strategy  Replace conditional dispatcher with command © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 6
  • 7. DECOMPOSE CONDITIONAL 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 7
  • 8. CONSOLIDATE CONDITIONAL EXPRESSION 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 8
  • 9. CONSOLIDATE DUPLICATE CONDITIONAL FRAGMENTS 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 9
  • 10. INTRODUCE NULL OBJECT 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 10
  • 11. FLATTEN NESTED IF 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 11
  • 12. DON'T USE NEGATIVE 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 12
  • 13. KEEP CONDITIONAL STATEMENT LEAN 1  Autant que possible, avoir une seule condition 2  Utilisez une méthode pour combiner plusieurs condition 4 5  SIMPLIFIER LES CONDITIONNELS 3  Inverser le if si la plupart (ou tout) le code se trouve dans la branche true  Attention à la double négation © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 13
  • 14. REPLACE CONDITIONAL WITH POLYMORPHISM 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 14
  • 15. REPLACE CONDITIONAL LOGIC WITH STRATEGY 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 15
  • 16. REPLACE CONDITIONAL DISPATCHER WITH COMMAND 1 2 4 5 SIMPLIFIER LES CONDITIONNELS 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 16
  • 17. 1 SUPPRIMER LA DOCUMENTATION – POURQUOI? 2 3 4  Améliore la lisibilité  Améliore la maintenabilité  Évite les commentaires désuet 5 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 17
  • 18. 1 SUPPRIMER LA DOCUMENTATION – QUAND? 2 3 4 5  Chaque fois qu'un commentaire est autre chose que de l'information (utile), une intention, une clarification, un avertissement, un TODO ou une amplification.  Le commentaire est le seul contenu d'un bloc de code  Catch vide  Le commentaire décrit, ligne par ligne, le code  Exemple:     // // // // Getting connection string from configuration Opening connection Retrieving data Closing connection © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 18
  • 19. SUPPRIMER LA DOCUMENTATION – COMMENT? 1 2 3 4 5  Remplacez les commentaires par une bonne nomenclature  Extract method  Utilisez des noms significatifs  Écrivez des commentaires utiles  Respectez la nomenclature (MSDN: Guidelines for names)     Properties Enums Events Methods © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 19
  • 20. EXTRACT METHOD 1 2 4 5 SUPPRIMER LA DOCUMENTATION 3 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 20
  • 21. UTILISEZ DES NOMS SIGNIFICATIFS 1  Nommez selon l'intention / évitez le mapping 2 4 5  Évitez la désinformation  SUPPRIMER LA DOCUMENTATION 3  d  elapsedDays  AccountList  Accounts  Assurez-vous d’avoir une distinction significative  amount  invoiceTotal, invoiceSubTotal  Utilisez des noms prononçables  genymdhms  generationTimestamp  Utilisez un nom pour nommer une classe  Utilisez un verbe pour nommer une méthode  Ne soyez pas créatif, utilisez les nom standards  Destroy, Kill, Obliterate  Delete  Domaine de solution ↔ domaine du problème © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 21
  • 22. PROPERTIES 1 3 4 5  SUPPRIMER LA DOCUMENTATION 2  Utilisez le PascalCase naming  Nommez les propriété avec un nom ou un adjectif  N'utilisez pas de noms qui pourraient être confondu avec une méthode Get  Préfixez les booléen avec Can, Is ou Has © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 22
  • 23. ENUMS 1 3 4 5  SUPPRIMER LA DOCUMENTATION 2  Considérez le premier élément comme valeur par défaut  Utilisez le PascalCasing naming  Les Enum simples doivent utiliser le singulier  Les Enum de type Bit fields devraient utiliser le pluriel er avoir l'attribut Flags  Les valeurs des Enum de type bit fields doivent être coherentes (Read & Write == ReadWrite) © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 23
  • 24. EVENTS 1 3 4 5  SUPPRIMER LA DOCUMENTATION 2  Utilisez le PascalCase naming  Nommez les événement avec un verbe au present progressive pour les pré-événements et au passé pour les post-événements  Fournissez une version virtual de l'événement  Fournissez une façon d'annuler un pré événement © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 24
  • 25. EVENTS 1 3 4 5  SUPPRIMER LA DOCUMENTATION 2 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 25
  • 26. METHODS 1  Utilisez des verbes pour nommer les méthodes 2 4 5  SUPPRIMER LA DOCUMENTATION 3  ProcessPayment  Exprimez clairement le retour attendu lors de l'appel de la méthode  CreateCustomer  GetInvoice  Utilisez une nomenclatue uniforme (Get, Fetch ou Retrieve mais pas tous dans le même contexte) © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 26
  • 27. 1 CLARIFIER LES CONTRATS – POURQUOI? 2 3 4  Améliore la performance  Améliore la lisibilité  Améliore la reutilisabilité 5 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 27
  • 28. CLARIFIER LES CONTRATS– QUAND? 1 2 3 4 5     Il y a trop de paramètres (combien est -ce?) Un méthode fait plus d'une chose Une méthode utilise des paramètre out Vous avez besoin de valeur par défaut © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 28
  • 29. 1 CLARIFIER LES CONTRATS– COMMENT? 2 3 4 5  Réduisez le nombre de paramètres  Introduce parameter object  Create overload with less parameters  Use default value  Les ouputs  La valeur de retour  Les paramètres out  Overload dans le bon ordre © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 29
  • 30. 2 3 4 5 CLARIFIER LES CONTRATS 1 INTRODUCE PARAMETER OBJECT © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 30
  • 31. 2 3 4 5 CLARIFIER LES CONTRATS 1 CREATE OVERLOAD WITH FEWER PARAMETERS © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 31
  • 32. 2 3 4 5 CLARIFIER LES CONTRATS 1 USE DEFAULT VALUE © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 32
  • 33. 1 RÉDUIRE LE SCOPE – POURQUOI? 2 3 4  Évite les effets de bords  Améliore la réutilisabilité  Améliore la maintenabilité 5 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 33
  • 34. 1 RÉDUIRE LE SCOPE – QUAND? 2 3  Un field est utilisé par trop peu de méthodes  Les membres publiques expose le comportement interne 4 5 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 34
  • 35. 1 RÉDUIRE LE SCOPE – COMMENT? 2 3 4 5  Visibilité  protected  private  internal  Responsabilité  Déplacer un field vers une méthode  Scinder un classe  Déplacer un variable près de son utilisation  Durée de vie  Créer les instances au besoin  Éviter de garder des références inutiles © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 35
  • 36. ÉLIMINER LE CODE MORT – POURQUOI? 1 2 3 4 5      Parcequ'il le faut Améliore la maintenabilité Améliore la performance Améliore la lisibilité 100% de couverture de test © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 36
  • 37. 1 ÉLIMINER LE CODE MORT – QUAND? 2 3 4  Vous savez que le code est mort  Vous pensez que le code est mort  Vous voulez que le code soit mort 5 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 37
  • 38. 1 ÉLIMINER LE CODE MORT – COMMENT? 2 3 4 5  Identifiez et retirez le code mort  Effacez le code  Compilez  Roulez les tests  Qu'est-ce que du code mort?  Du code en commentaire  Toutes lignes de code non couverte par un test unitaire  Outils  Il existe des outils qui supprime automatiquement le code non couvert par au moins un test © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 38
  • 39. REFERENCES  Refactoring – Improving the design of existing code  Auteur: Martin Fowler  Edition: Addison Wesley  ISBN: 978-0-201-48567-7  Refactoring to patterns (Martin Fowler signature)  Auteur: Joshua Kerievsky  Edition: Adison Wesley  ISBN: 978-0-321-21335-1  Clean code – a handbook of agile software craftsmanship  Auteur: Robert C. Martin  Edition: Prentice Hall  ISBN: 978-0-132-35088-4  Working effectively with legacy code  Auteur: Michael C. Feather  Edition: Prentice Hall  ISBN: 978-0-13-117705-5 © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 39
  • 40. LA FIN  Questions?  Rappelez-vous Simplifier les conditionnels Supprimer la documentation Clarifier les contrats Réduire le scope Éliminer le code mort  Eric De Carufel  eric@decarufel.net  http://blog.decarufel.net © Pyxis Technologies inc. Top 5 des meilleures façon d'améliorer votre code 40

Hinweis der Redaktion

  1. Pourquoi?Quand?Comment?
  2. Only one level of abstraction per methodSwitch case? Polymorphism?
  3. The nameshouldasnwer all big questionsThe code shouldbereadablelike a storyOne word per concept (i.e. State -> AddressState != SystemState)
  4. ** Use Intention-Revealing names (d -> elapsedInDays)** Avoid disinformation (AccountList -> Accounts)** Make meaningful distinction (moneyAmountvs money vs amount -> InvoiceTotal)** Use pronounceable names (genymdhms -> generationTimestamp** Avoid encoding (phoneString -> phone)** Avoid mental mapping (a -> account)** Class names -> noun not verbs** Method names -> verbs (SaveAccount)** Don't be cute. Use standard names (Destroy, kill, obliterate -> Delete)** Solution Domain Names (Interface) vs Problem Domain Names (Implémentation)
  5. Reduce number of parameters - Clean code chapter 3 (p. 40-43)
  6. Réduisez la visibilitéUtilisez les protectedUtilisez les privateUtilisez les InternalRéduisez le scopeDéplacez un field vers une méthodeScindez une classeDéplacer une variable près de son utilisationRéduisez la durée de vieInitialisation tardiveRéduisez les référencesLibérer tôt
  7. Dead procedure / function / methodDead variableDead parameterDead return valueDead event declarationDead enumeration / constantDead typeDead class / structDead interface