refactor, the third commandment

Download Refactor, the third commandment

If you can't read please download the document

Upload: nicola-pietroluongo

Post on 11-Apr-2017

343 views

Category:

Software


3 download

TRANSCRIPT

REFACTOR THE THIRD COMANDEMENTby Nicola Pietroluongo

@niklongstone

Nicola Pietroluongo @niklongstone

Nicola Pietroluongo @niklongstone

TDD CYCLE

Its a process of restructuring an existing code, altering its internal structure without changing its external behavior.

Nicola Pietroluongo @niklongstone

DEFINITION OF REFACTORING

Code will look cleanEasy to understandEasy to editEasy to mantain

Nicola Pietroluongo @niklongstone

WHY REFACTORING?

Nicola Pietroluongo @niklongstone

WHAT TO DO BEFORE

Announce the refactoring

Build a sandbox environment

Use a version control system (Git)

Remember coding standards

Remember OO design principle SOLID

Write or improve the test

Nicola Pietroluongo @niklongstone

COMMON REFACTORINGS

Change Signature

Extract (Method, Variable, ...)

Pull Members up

Push Members down

Rename

Safe Delete

UNDERSTAND THE BEHAVIOUR

Nicola Pietroluongo @niklongstone

HOW TO START A REFACTORING

USE AN IDE

Nicola Pietroluongo @niklongstone

HOW TO START A REFACTORING

START TO INSPECT

Nicola Pietroluongo @niklongstone

HOW TO START A REFACTORING

Nicola Pietroluongo @niklongstone

LEVEL OF REFACTOR

FUNCTIONS/
METHODS

CLASSES/OBJECTS

APPLICATION/DESIGN

AT FUNCTION / METHOD LEVEL

Nicola Pietroluongo @niklongstone

REFACTORING

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

LONG MEHTODCODE DUPLICATIONNO STANDARDS..

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

NAMING

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

NAMING

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

COMPLICATE CONDITIONALS

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

COMPLICATE CONDITIONALS

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

SWITCH

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

SWITCH

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

ERROR CODES

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

ERROR CODES

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

PARAMETERS

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

PARAMETERS

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

GHOST PARAMETERS

WHY THIS IS BAD?

Nicola Pietroluongo @niklongstone

GHOST PARAMETERS

AT CLASSES / OBJECTS LEVEL

Nicola Pietroluongo @niklongstone

REFACTORING

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

DIVERGENT CHANGE

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

DIVERGENT CHANGE

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

CONSTRUCTORS

WHY THIS IS BAD?

Nicola Pietroluongo @niklongstone

CONSTRUCTORS

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

PRIMITIVE OBSESSION

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

PRIMITIVE OBSESSION

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

MESSAGE CHAIN

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

MESSAGE CHAIN

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

INAPPROPRIATE INTIMACY

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

INAPPROPRIATE INTIMACY

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

REFUSED BEDQUEST

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

REFUSED BEDQUEST

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

TRAITS FREAKTRICK OR TRAIT

WHAT'S WRONG...?

Nicola Pietroluongo @niklongstone

TRAITS FREAKTRICK OR TRAIT

AT APPLICATION / DESIGN LEVEL

Nicola Pietroluongo @niklongstone

REFACTORING

LAZY CLASS

Nicola Pietroluongo @niklongstone

A CLASS DOESN'T DO ENOUGH COULD BE REMOVED

SHOTGUN SURGERY

Nicola Pietroluongo @niklongstone

DATA ABSTRACTION

Nicola Pietroluongo @niklongstone

DATA ACCESS LAYERDBBUSINESS LOGIC LAYERPRESENTATION LAYER

PARALLEL INHERITANCE HIERARCHIES

Nicola Pietroluongo @niklongstone

MoverDriver+openWindows()Vehicle+getOperator(Mover)CarMotorbike

Rider+moveHandGrip()

PARALLEL INHERITANCE HIERARCHIES

Nicola Pietroluongo @niklongstone

MoverDriver+openWindows()Vehicle+getOperator(Mover)CarMotorbike

Rider+moveHandGrip()

Pilot+moveFlaps()Plane

PARALLEL INHERITANCE HIERARCHIES

Nicola Pietroluongo @niklongstone

Mover+accelerate()+brake()Vehicle+setFuel()CarTrip__construct(Driver)+accelerate()+openWindow()...MotorbikeTrip__construct(Rider)+accelerate()+brake()...

RESPONSIBILITY

Nicola Pietroluongo @niklongstone

Check constructors, extends and implements
Composition over inheritance

Check namespacing and folder structure

SOME TOOL

Nicola Pietroluongo @niklongstone

REFACTORING

$ sed -i 's/UglyClass/PrettyClass/g' /folder/myfile.php

$ find /folder/src -type f -exec \ sed -i 's/UglyClass/PrettyClass/g' {} \;

Nicola Pietroluongo @niklongstone

SED

Nicola Pietroluongo @niklongstone

PHPCS (and phpcbf)

Nicola Pietroluongo @niklongstone

PHPUNIT + XDEBUG (Change Risk Analyzer and Predictor)

Nicola Pietroluongo @niklongstone

XHPROF

$ phpmd src/ text design,codesize

$ /src/File.php:26 The class File has 12 methods. Consider refactoring File to keep number of methods under 10.

Nicola Pietroluongo @niklongstone

PHPMD

Nicola Pietroluongo @niklongstone

PhpMetrics

Scisr (http://iangreenleaf.github.io/Scisr/)

Rephactor (http://rephactor.sourceforge.net/user-guide.php)

phpdepend.org

phpqatools.org

https://github.com/ziadoz/awesome-php#code-analysis

Nicola Pietroluongo @niklongstone

OTHER RESOURCES

Nicola Pietroluongo @niklongstone

THANKS

IMPROVE THE CODE, IMPROVE YOURSELF

Twitter: @niklongstoneGithub: github.com/niklongstoneWebsite: www.nicolapietroluongo.com

Code: github.com/niklongstone/php-refactoring

Nicola Pietroluongo @niklongstone

THANKS