refactoring

Post on 24-Dec-2014

1.425 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

RefactoringImproving The Design of Existing Code

Reporter:Jiayun Zhou <jiayun.zhou@iisigroup.com>

Date :2011/07/13

Outline

Introduction

Bad Smells & Refactorings

Conclusion

Copyright by IISI. All rights reserved 2

Introduction

Eclipse 1.0 – Nov 2001

Copyright by IISI. All rights reserved 4

Eclipse 2.0 – Jun 2002

Copyright by IISI. All rights reserved 5

Eclipse 2.1 – Mar 2003

Copyright by IISI. All rights reserved 6

Eclipse 3.7 – Jun 2011

Copyright by IISI. All rights reserved 7

Copyright by IISI. All rights reserved 8

Martin Fowler

Copyright by IISI. All rights reserved 9

Kent Beck

Copyright by IISI. All rights reserved 10

Bad Smells & Refactorings

Bad Smell

If it stinks, change it.

-Grandma Beck,discussing child-rearing philosophy

Copyright by IISI. All rights reserved 12

WTF

Copyright by IISI. All rights reserved 13

What the Fxxk

Copyright by IISI. All rights reserved 14

Copyright by IISI. All rights reserved 15

Good Programmer

• 30% Good Habits

• 30% English

• 40% Passion, Talent, Practice, and Everything Else

Copyright by IISI. All rights reserved 16

Duplicated Code (Bad Smell)

DRY

(Don't Repeat Yourself)

Copyright by IISI. All rights reserved 17

Duplicated Code (Bad Smell)

DRY

(Don't Repeat Yourself)

vs.

WET

(We Enjoy Typing)

Copyright by IISI. All rights reserved 18

Pull Up Method(Refactoring)

Copyright by IISI. All rights reserved 19

Pull Up – 1 (Eclipse)

Copyright by IISI. All rights reserved 20

Pull Up – 2 (Eclipse)

Copyright by IISI. All rights reserved 21

Pull Up – 3 (Eclipse)

Copyright by IISI. All rights reserved 22

Pull Up – 4 (Eclipse)

Copyright by IISI. All rights reserved 23

Pull Up – 5 (Eclipse)

Copyright by IISI. All rights reserved 24

Long Method (Bad Smell)

• Short methods are good

• Whenever we feel the need to comment something, we write a method instead

• Method name explains the intention

Copyright by IISI. All rights reserved 25

Extract Method(Refactoring)

Copyright by IISI. All rights reserved 26

Extract Method – 1 (Eclipse)

Copyright by IISI. All rights reserved 27

Extract Method – 2 (Eclipse)

Copyright by IISI. All rights reserved 28

Extract Method – 3 (Eclipse)

Copyright by IISI. All rights reserved 29

Conditionals and loops also give signs for extractions.

Use Decompose Conditional to deal with conditional expressions.

With loops, extract the loop and the code within the loop into its own method.

Copyright by IISI. All rights reserved 30

Large Class (Bad Smell)

• Trying to do too much

• Shows up as too many instance variables

• Duplicated code cannot be far behind

Copyright by IISI. All rights reserved 31

Extract Class(Refactoring)

Copyright by IISI. All rights reserved 32

Extract Class – 1 (Eclipse)

Copyright by IISI. All rights reserved 33

Extract Class – 2 (Eclipse)

Copyright by IISI. All rights reserved 34

Extract Class – 3 (Eclipse)

Copyright by IISI. All rights reserved 35

Long Parameter List(Bad Smell)

• Hard to understand

• Become inconsistent and difficult to use

• Forever changing them as you need more data

Copyright by IISI. All rights reserved 36

Replace Parameter with Method (Refactoring)

Copyright by IISI. All rights reserved 37

Preserve Whole Object(Refactoring)

Copyright by IISI. All rights reserved 38

Introduce Parameter Object(Refactoring)

Copyright by IISI. All rights reserved 39

Introduce Parameter Object –01 (Eclipse)

Copyright by IISI. All rights reserved 40

Introduce Parameter Object –02 (Eclipse)

Copyright by IISI. All rights reserved 41

Introduce Parameter Object –03 (Eclipse)

Copyright by IISI. All rights reserved 42

Comments (Bad Smell)

• They are sweet smell

• Don't use as a deodorant

Copyright by IISI. All rights reserved 43

Conclusion

How to refactor safely?

Copyright by IISI. All rights reserved 45

Unit Test

Copyright by IISI. All rights reserved 46

Copyright by IISI. All rights reserved 47

How about the translation?

Copyright by IISI. All rights reserved 48

中譯

你可以選擇每個 class 和函式的名字,這給了你一個解釋自己意圖的機會。class 或函式內部則解釋實現這個意圖的作法。如果class 和函式內部又以「更小單元的意圖」來編寫,你所寫的程式碼就可以「與其結構中的大部分重要資訊溝通」。 (p.61)

Copyright by IISI. All rights reserved 49

原文

Choosing the name of each class and the name of each method gives you an opportunity to explain what you intend. The internals of the class or method explain how the intention is realized. If the internals also are written in terms of intention in yet smaller pieces, you can write code that communicates most of the important information about its own structure.

Copyright by IISI. All rights reserved 50

Copyright by IISI. All rights reserved 51

我的翻譯

你可以選擇每個 class 和函式的名字,這給了你一個解釋自己意圖的機會。class 或函式內部則解釋實現這個意圖的作法。如果class 和函式內部又以「更小單元的意圖」來編寫,你所寫的程式碼就可以「表達出它自己結構的大部分重要資訊」。

Copyright by IISI. All rights reserved 52

盡信書不如無書

Copyright by IISI. All rights reserved 53

Copyright by IISI. All rights reserved 54

琴鍵有限,琴藝無限

Copyright by IISI. All rights reserved 55

Headquarter

6F., No.7, Sec. 2, Xianmin Blvd., Banqiao Dist., New Taipei City 22041, Taiwan(R.O.C.)

TEL : +886-2-8969-1969 FAX : +886-2-8969-3359

- Thank You -

top related