Telerik JavaScript Framework Telerik Software Academy Hybrid Mobile Applications.
When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior...
-
Upload
gwendoline-watkins -
Category
Documents
-
view
215 -
download
0
Transcript of When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior...
![Page 1: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/1.jpg)
Refactoring: Improving the
Quality of Existing Code
When and How to Refactor? Refactoring Patterns
Alexander Vakrilov
Telerik Corporationwww.telerik.
com
Senior Developer and Team Leader
![Page 2: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/2.jpg)
What is Refactoring?
It is a step by step process that turns the bad code into good code Based on "refactoring patterns"
well-known recipes for improving the code
2
Refactoring means "to improve the design and quality of existing source code without changing its external behavior".
Martin Fowler
![Page 3: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/3.jpg)
Code Refactoring What is refactoring of the source code? Improving the design and quality of
existing source code without changing its behavior
Step by step process that turns the bad code into good code (if possible)
Why we need refactoring? Code constantly changes and its
quality constantly degrades (unless refactored)
Requirements often change and code needs to be changed to follow them
3
![Page 4: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/4.jpg)
When to Refactor? Bad smells in the code indicate need of refactoring
Refactor when you Add a new method or class
Fix an existing bug
Reviewing someone else’s code
Unit tests guarantee that refactoring does not change the behavior If there are no unit tests, write
them4
![Page 5: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/5.jpg)
Code Smells Duplicated code Long method Large class Long parameter list Switch statements Temporary field Bad comments / comments for bad code
Improper naming Data members are public
5
![Page 6: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/6.jpg)
Code Smells (2) Global variables Overused primitives Divergent change Shotgun surgery Feature envy Middle man Speculative generality Inappropriate Intimacy
6
![Page 7: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/7.jpg)
Data Level Refactorings Replace a magic number with a
named constant Rename a variable with more
informative name Replace an expression with a
method Introduce an intermediate variable Convert a multi-use variable to a
multiple single-use variables Convert a data primitive to a class Change an array to an object Encapsulate a collection
7
![Page 8: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/8.jpg)
Statement Level Refactorings
Decompose a boolean expression Move a complex boolean expression into a well-named boolean function
Return as soon as you know the answer instead of assigning a return value (?)
Use break or return instead ofa loop control variable
Replace conditionals withpolymorphism
8
![Page 9: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/9.jpg)
Method Level Refactorings
Extract method Inline method Add / remove parameter Combine similar methods byparameterizing them
Separate methods whose behavior depends on parameters passed in
Pass a whole object rather than specific fields
Encapsulate downcast 9
![Page 10: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/10.jpg)
Class Level Refactorings
Change structure toclass and vice versa
Replace virtual routineswith data initialization
Pull members up / pushmembers down the hierarchy
Extract specialized code into a subclass
Combine similar code into a superclass 10
![Page 11: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/11.jpg)
Class Interface Refactorings
Move a method to another class Convert a class to two Delete a class Hide a delegating class Remove the man in the middle Introduce (use) an extension class Encapsulate an exposed member variable
11
![Page 12: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/12.jpg)
System Level Refactorings
Move class (set of classes) to another namespace
Provide a factory method instead of a simple constructor
Replace error codes with exceptions
Extract strings to resource files
12
![Page 13: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/13.jpg)
Refactoring Tips Save the code you start with
Make sure you have tests to assure the behavior after the code is refactored
Do refactorings one at a time
Keep refactorings small
Check-in and test often
Don’t underestimate small changes
13
![Page 14: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/14.jpg)
Refactoring PatternsWell-Known Recipes for Improving the
Code Quality
![Page 15: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/15.jpg)
Rafactoring Patterns When should we perform refactoring
of the code?
Bad smells in the code indicate need of refactoring
Unit tests guarantee that refactoring does not change the behavior
Rafactoring patterns Large repeating code fragments
extract repeating code in separate method
Large methods split them logically
Large loop body or deep nesting extract method
15
![Page 16: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/16.jpg)
Refactoring Patterns (2)
Refactoring patterns Class or method has weak cohesion
split into several classes / methods
Single change carry out changes in several classes classes have tight coupling consider redesign
Related data are always used together but are not part of a single class group them in a class
A method has too many parameters create a class to groups parameters together
A method calls more methods from another class than from its own class move it
16
![Page 17: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/17.jpg)
Rafactoring Patterns (3)
Refactoring patterns Two classes are tightly coupled
merge them or redesign them to separate their responsibilities
Public non-constant fields make them private and define accessing properties
Magic numbers in the code consider extracting constants
Bad named class / method / variable rename it
Complex boolean condition split it to several expressions or method calls
17
![Page 18: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/18.jpg)
Rafactoring Patterns (4)
Refactoring patterns Complex expression split it into few
simple parts
A set of constants is used as enumeration convert it to enumeration
Method logic is too complex and is hard to understand extract several more simple methods or even create a new class
Unused classes, methods, parameters, variables remove them
Large data is passed by value without a good reason pass it by reference
18
![Page 19: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/19.jpg)
Rafactoring Patterns (5)
Refactoring patterns Few classes share repeating
functionality extract base class and reuse the common code
Different classes need to be instantiated depending on configuration setting use factory
Code is not well formatted reformat it
Too many classes in a single namespace split classes logically into more namespaces
Unused using definitions remove them
Non-descriptive error messages improve them
Absence of defensive programming add it
19
![Page 20: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/20.jpg)
Code RefactoringLive Demo
![Page 21: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/21.jpg)
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезания
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно
?
? ? ??
?? ?
?
?
?
??
?
?
? ?
Questions?
?
Code Refactoring
http://academy.telerik.com
![Page 22: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/22.jpg)
Exercises Refactor the C# code from the Visual
Studio Project "12. Refactoring-Homework.zip" to improve its internal quality. You might follow the following steps:
1. Make some initial refactorings like: Reformat the code. Rename the ugly named variables.
2. Make the code testable. Think how to test console-based input /
output.
3. Write unite tests. Fix any bugs found in the mean time.
4. Refactor the code following the guidelines from this chapter. Do it step by step. Run the unit tests after each major change.
22
![Page 23: When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.](https://reader037.fdocuments.us/reader037/viewer/2022110101/56649ef25503460f94c0366e/html5/thumbnails/23.jpg)
Free Trainings @ Telerik Academy
C# Programming @ Telerik Academy csharpfundamentals.telerik.com
Telerik Software Academy academy.telerik.com
Telerik Academy @ Facebook facebook.com/TelerikAcademy
Telerik Software Academy Forums forums.academy.telerik.com