Mais conteúdo relacionado Semelhante a Top 5 des meilleures façons d'améliorer votre code (20) Mais de Eric De Carufel (6) Top 5 des meilleures façons d'améliorer votre code1. 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
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
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
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
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
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
Notas do Editor Pourquoi?Quand?Comment? Only one level of abstraction per methodSwitch case? Polymorphism? The nameshouldasnwer all big questionsThe code shouldbereadablelike a storyOne word per concept (i.e. State -> AddressState != SystemState) ** 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) Reduce number of parameters - Clean code chapter 3 (p. 40-43) 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 Dead procedure / function / methodDead variableDead parameterDead return valueDead event declarationDead enumeration / constantDead typeDead class / structDead interface