Speeding up web_application

Post on 18-Jul-2015

177 views 0 download

Tags:

Transcript of Speeding up web_application

Anand Bait

Developer

Allerin Tech Pvt Ltd

Refactoring Code

Making code better, may not be faster

Better structured, better built

More readable, more understandable

Easy to work with

Easy to add new features

Easy to spot and fix bugs

Keeping code in control

Improving existing code

Contents Introduction to Refactoring

Method-Level Refactoring

Class and Condition Focused Refactoring

Data Focused Refactoring

Communication and High Level Refactoring

Conclusion

What ‘REFACTORING’ is? Techniques of improving code that already exists

No rules that anyone can blindly follow to improve code

Techniques of recognize issues as per consciousness

Applied without thinking will be dangerous

What ‘REFACTORING’ is NOT? Not debugging

Not adding feature

Not changing observable behavior of code

Not performance improving

Why to use?

When to use? Write – Scan – Refactor at the end : INCORRECT

Write – Scan – Refactor regularly : CORRECT

Code reviews

How to use?

Code smell Duplicated code

Long methods

Comments

Doesn’t tell what to do but tells us what to notice

Method Level Refactoring Preparing to refactor

Grouping refactorings together

Using the Extract Method refactoring

Extract Method with parameters and variables

Common code smells for Extract Method

Using IDEs for the Extract Method refactoring

The Inline Method refactoring

Refactorings that remove temps

Refactorings that add temps

Preparing to refactor Requirement of automated testing vs manual testing

Grouping refactorings together Individual Method(name? parameters? Temp

variables? Duplicate? Too much in method?)

Context of method in class (right class? similarity with other methods class)

Communication between classes(inheritance)

Extract Method refactoring Smaller and specific is better

Provides reusability

Ease of overriding while using inheritance

Extract Method with parameters

Parameters should be related to the method

Extract Method with variables Temporary variables can be extracted

Code smells for using Extract Method Long method

Comments(having comments vs need comments)

Inline Method refactoring Removing method that adds no value

Refactoring to remove temps Increase temptation to write longer methods

Change temps to small methods

Refactoring to add temps Split temporary variables

Introduce explaining variables

Remove assignments to parameters

Split temporary variables Don’t use same temporary variable for different

purposes

Introduce explaining variables To improve readability

Introduce when a small method may not be required

Remove assignments to parameters

Add temporary variables that assigns value to parameters may give undesired results

Class and Condition Focused Refactoring Move Method

Extract Class and Inline Class

Making conditions easier to read

Replacing conditions with polymorphism

Replacing type code with subclasses

Move Method Move method from one class to another

When a method interact with multiple classes then move it to the class with which it interacts more

Code smell: feature envy, inappropriate intimacy, shotgun surgery

Extract Class and Inline Class Code smell: Large class

Making conditions easier to read Decompose conditionals

Consolidate conditionals

Consolidate duplicate conditionals

Replacing conditions with polymorphism

Conditions to check custom behavior

Replacing type code with subclasses Data can be categorized into subclasses

Data Focused Refactoring Moving and encapsulating fields

Working with data clumps

Simplifying method calls and parameter use

Pulling and pushing methods and fields

Moving and encapsulating fields If a field is more related and being used by the other

class

Working with data clumps Preserve whole object

(instead of parameters pass object)

Introduce parameter object

(minimize parameters list by creating a class for set of parameters)

Simplifying method calls and parameter use Rename method

Remove parameter

Add parameter

Parameterize method

(same behavior multiple methods)

De-parameterize method

(same type of parameter but different behavior depending on parameter)

Separate Query from Modifier

(split method with individual focus on functioning)

Pulling and pushing methods and fields

Pull up method

Pull up field

Push down method

Push down field

Communication and High-Level Refactoring

Refining hierarchies

Extract superclass, Extract subclass, collapse hierarchy

Communication refactoring

Code smell: message chain, middle man

Larger scale refactoring

Convert procedural to OO

Code smell: large classes, god classes, dumb data

Conclusion

References http://refactoring.com

Thank you