+ All Categories
Home > Technology > Refactoring

Refactoring

Date post: 09-May-2015
Category:
Upload: dhaval-dalal
View: 777 times
Download: 0 times
Share this document with a friend
24
Refactoring Dhaval Dalal software-artisan.com @softwareartisan
Transcript
Page 1: Refactoring

RefactoringDhaval Dalal software-artisan.com @softwareartisan

Page 2: Refactoring

[email protected]

John Thompson, the hatter makes and sells hats for ready money!

Refactoring Metaphor

Page 3: Refactoring

[email protected]

John Thompson, the hatter makes and sells hats for ready money!

Refactoring Metaphor

Page 4: Refactoring

[email protected]

John Thompson, the hatter makes and sells hats for ready money!

Refactoring Metaphor

Page 5: Refactoring

[email protected]

John Thompson, the hatter makes and sells hats for ready money!

Refactoring Metaphor

Page 6: Refactoring

[email protected]

Refactoring Metaphor

John Thompson

Page 7: Refactoring

[email protected]

What is Refactoring?

Refactoring means improving the design after it has been written.

Martin Fowler.

Page 8: Refactoring

[email protected]

Why Should I Refactor?

! Development is a process of Discovery and code constantly evolves.

! Refactoring is a code curative technique, just as Sleep is a Curative Agency for the body playing part in repairing mechanism of the body.

5

Page 9: Refactoring

[email protected]

Why Should I Refactor?

Martin Fowler.

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. The purpose of refactoring is to make the software easier to understand and modify.

Page 10: Refactoring

[email protected]

Why Should I Refactor?

! It improves the design of software " By repairing a highly coupled, non-

cohesive design.

! Helps to find bugs faster.

! Helps to Program Faster.

Page 11: Refactoring

[email protected]

Code Smells…lets code along! Duplicate Code

! Switch Statements

! Long Method

! Long Parameter List

! Large Class

! Speculative Generality Kent Beck

If it Stinks, Change it!

! Indecent Exposure

! Divergent Change

! Shotgun Surgery

! ...and many more.

Page 12: Refactoring

[email protected]

Deodorize With Fresheners…code along! Encapsulate Collections ! Encapsulate Downcast ! Replace Error Code with Exception ! Introduce Variable ! Introduce Symbolic Constants ! Rename Method/Variable ! Remove Control Flag ! Simplify Conditionals ! Simply Nested Conditionals with Guard Clauses ! Move Method ! Chain Multiple Constructors/Methods ! Replace Type Code with Enums or Class

Page 13: Refactoring

[email protected]

Stronger Deodorizing Agents…! Replace Array with Object

! Replace conditionals with Polymorphism

! Replace Type Code with State/Strategy

! Introduce Null Object ...and many more

Page 14: Refactoring

[email protected]

General Principles in Refactoring

! From Near to Far. " That which is obvious and close to us now

is the starting point, a.k.a the inflection point.

" That which is abstract is the goal.

! Take baby-steps.

11

Page 15: Refactoring

[email protected]

Refactoring Cycle

12

Choose on appropriate

Refactoring to applyApply Refactoring

Run ALL Tests (Get GREEN Bar)

Reached Desired

Structure?

Yes

No

Page 16: Refactoring

[email protected]

Undertaking Big Refactorings (Bridge Replacement Metaphor)! Let traffic continue to

flow on old bridge.

13

! Create new refactored implementation.

! Create another bridge side-by-side the old one.

! Take an Interface-oriented approach.

! House the old code in one implementation.

! When the new bridge is ready, delink traffic from the old one and re-route it over the new bridge.

! Use the new impl. by replacing the old one.

Page 17: Refactoring

[email protected]

Refactoring To Patterns! Arrive to pattern via series of small

refactorings. " Rigorously apply OO principles along-side

continuous refactoring. # SRP, OCP, LSP, ISP, DIP (SOLID) etc...

" You will eventually evolve to some known pattern.

! When you “intuit” that a pattern will readily apply. " Approach this in baby steps.

14

Page 18: Refactoring

[email protected]

Refactoring and Legacy Code! Code without tests is Legacy.

" Does anyone still create this? " Michael Feathers’ has an excellent book on

this. # Working Effectively with Legacy Code

! Refactoring code without tests is like performing a tight-rope walk without any safety net underneath.

15

Page 19: Refactoring

[email protected]

Motivators and Inhibitors

Page 20: Refactoring

[email protected]

As in many things the answer lies in balancing opposing forces,

especially when its difficult to make hidden Business Value explicit.

Pragmatic Vs Dogmatic

Agility Vs Fragility

17

When to Refactor?

Page 21: Refactoring

[email protected]

Views on Refactoring! A traditionalist view on Refactoring is

re-work!

! In reality, it is responding to new information as it arrives.

! At the same time, avoid “Major Refactorings” " Do initial architecture envisioning.

18

Page 22: Refactoring

[email protected]

No Silver Bullet

Martin Fowler

Refactoring is no “silver bullet”, yet it is a valuable tool, a pair of silver pliers that helps you keep good grip on your code. Without refactoring, the design of the program will decay.

Page 23: Refactoring

[email protected]

References! Refactoring

" Martin Fowler.

! Refactoring to Patterns " Joshua Kerievsky.

! Refactoring Motivations " Jay Fields’ Blog

! Creating an Agile Culture to drive organizational Change " David Anderson

Page 24: Refactoring

Thank You!Dhaval Dalal

[email protected]


Recommended