79
Detangling Your JavaScript An Intro to JS Refactoring

Detangling Your JavaScript

Embed Size (px)

DESCRIPTION

This is an introduction to refactoring techniques for JavaScript code that works but is legacy, poorly written or otherwise "tangled."

Citation preview

Page 1: Detangling Your JavaScript

Detangling YourJavaScript

An Intro to JS Refactoring

Page 2: Detangling Your JavaScript

Chris PowersConsultant with //obtiva

http://obtiva.com@chrisjpowers

Page 3: Detangling Your JavaScript

3 Kinds of People Deal with Tangled Code

Page 4: Detangling Your JavaScript

Consultants

Page 5: Detangling Your JavaScript

New Hires

Page 6: Detangling Your JavaScript

...and Everyone Else!

Page 7: Detangling Your JavaScript

We all work with Tangled code on a

daily basis

Page 8: Detangling Your JavaScript

What is “Tangled” JavaScript?

Page 9: Detangling Your JavaScript

It is not BAD code!

Page 10: Detangling Your JavaScript

Bad code doesn’t work.

Page 11: Detangling Your JavaScript

Tangled code does work!

Page 12: Detangling Your JavaScript

Tangled code will become “bad” code eventually because...

Page 13: Detangling Your JavaScript

Tangled code is hard to read and understand.

Page 14: Detangling Your JavaScript

Tangled code is hard to update and maintain.

Page 15: Detangling Your JavaScript

Tangled code is easy to accidentally break.

Page 16: Detangling Your JavaScript

“Tangled code is code based on lost

requirements.”

- Noel Rappin

Page 17: Detangling Your JavaScript

Got Tangled Code?Do you...

Page 18: Detangling Your JavaScript

Option #1:Big Bang Rewrite

Page 19: Detangling Your JavaScript

Option #2:Detangle (Refactor)

Page 20: Detangling Your JavaScript

ALWAYS Detangle!NEVER Rewrite!

Page 21: Detangling Your JavaScript

Rewrites are tempting

Page 22: Detangling Your JavaScript

Coders want to Code!

Page 23: Detangling Your JavaScript

Writing codeis easier than reading code.

Page 24: Detangling Your JavaScript

You CANNOT rewrite code you don’t

understand.

Page 25: Detangling Your JavaScript

Your rewrite will likely miss requirements

Page 26: Detangling Your JavaScript

In your client’s eyes, your rewrite will be

worse than the original.

Page 27: Detangling Your JavaScript

What is Refactoring?

Page 28: Detangling Your JavaScript

Methodically improving code quality without

altering behavior.

Page 29: Detangling Your JavaScript

Making your complex code simple.

Page 30: Detangling Your JavaScript

Simple code is...

Page 31: Detangling Your JavaScript

#1Tested

Page 32: Detangling Your JavaScript

#2Reveals Intent

Page 33: Detangling Your JavaScript

#3DRY - Each piece of knowledge exists in

only one place

Page 34: Detangling Your JavaScript

#4Small

Page 35: Detangling Your JavaScript

Let’s Start Detangling...

Page 36: Detangling Your JavaScript
Page 37: Detangling Your JavaScript

First Things First:Set a Goal

Page 38: Detangling Your JavaScript

How much code needs to be refactored?

How deeply?

Page 39: Detangling Your JavaScript

Write a Test!

Page 40: Detangling Your JavaScript
Page 41: Detangling Your JavaScript

Why write tests?

Page 42: Detangling Your JavaScript

Makes the code simple

Page 43: Detangling Your JavaScript

Ensures BehaviorDoes Not Change

Page 44: Detangling Your JavaScript

Forces Developer to Understand

Requirements

Page 45: Detangling Your JavaScript

Refactoring #1Name the Anonymous

Functions

Page 46: Detangling Your JavaScript
Page 47: Detangling Your JavaScript

Refactoring #2Document

Responsibilities with Comments

Page 48: Detangling Your JavaScript
Page 49: Detangling Your JavaScript

Refactoring #3Extract Methods

Page 50: Detangling Your JavaScript
Page 51: Detangling Your JavaScript

Refactoring #4Improve Variable

Names

Page 52: Detangling Your JavaScript
Page 53: Detangling Your JavaScript

Refactoring #5Add Local Vars to Improve Legibility

Page 54: Detangling Your JavaScript
Page 55: Detangling Your JavaScript

Keep Extracting Functions

Page 56: Detangling Your JavaScript
Page 57: Detangling Your JavaScript

Refactoring #6Add Clarity with Underscore.js

Page 58: Detangling Your JavaScript
Page 59: Detangling Your JavaScript

Refactoring #7Isolate Display Logic

Page 60: Detangling Your JavaScript
Page 61: Detangling Your JavaScript

Refactoring #8Isolate DOM Manipulation

Page 62: Detangling Your JavaScript
Page 63: Detangling Your JavaScript

Refactoring #9Hide “Private”

Methods in Closures

Page 64: Detangling Your JavaScript
Page 65: Detangling Your JavaScript

Refactoring #10Scope Public Methods

in Namespaces

Page 66: Detangling Your JavaScript
Page 67: Detangling Your JavaScript

Refactoring #11Use Tiered

Sub-Namespaces

Page 68: Detangling Your JavaScript
Page 69: Detangling Your JavaScript

Refactoring #12Extend Namespaces(Don’t Overwrite)

Page 70: Detangling Your JavaScript
Page 71: Detangling Your JavaScript

Refactoring #13DRY Up Namespace

Initialization

Page 72: Detangling Your JavaScript
Page 73: Detangling Your JavaScript
Page 74: Detangling Your JavaScript

Resources

Page 78: Detangling Your JavaScript

http://javascriptmasters.com

Signup Code: ccc2011

ccc2011

Page 79: Detangling Your JavaScript

Got questions?@chrisjpowers