ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Code Refactoring
THAY ??I NH? - L?I ?CH L?N
N?i dung
? T?i sao c?n code refactoring
? M? b?n
? C¨¢c k? thu?t refactoring
? Demo
T?c ?? ph¨¢t h¨¤nh ph?n m?m
Tuy¨ºn ng?n Agile
Ch¨²ng t?i ?? ph¨¢t hi?n ra c¨¢ch ph¨¢t tri?n ph?n m?m t?t h?n b?ng c¨¢ch th?c
hi?n n¨® v¨¤ gi¨²p ?? ng??i °ì³ó¨¢³¦ th?c hi?n. Qua c?ng vi?c n¨¤y, ch¨²ng t?i ?? ?i ??n vi?c
?¨¢nh gi¨¢ cao:
C¨¢ nh?n v¨¤ s? t??ng t¨¢c h?n l¨¤ quy tr¨¬nh v¨¤ c?ng c?;
Ph?n m?m ch?y t?t h?n l¨¤ t¨¤i li?u ??y ??;
C?ng t¨¢cv?i °ì³ó¨¢³¦h h¨¤ng h?n l¨¤ ?¨¤m ph¨¢n h?p ??ng;
Ph?n h?i v?i c¨¢c thay ??ih?n l¨¤ b¨¢m s¨¢t k? ho?ch.
M?c d¨´ c¨¢c ?i?u b¨ºn ph?i v?n c¨°n gi¨¢ tr?, nh?ng ch¨²ng t?i ?¨¢nh gi¨¢ cao h?n c¨¢c m?c ? b¨ºn tr¨¢i.
AgileAlliance.org
Chuy?n giao nhanh
Th?i gian
¡­
Iteration
Design is the key,
Planned Design is not ¡­
? Takeuchi & Nonaka: overlapping is better than sequential
Not efficient:
? Time consuming
? No backward
? No ¡°better idea¡± on the go
L¨¤m th? n¨¤o ?? t? ch?c ki?u ¡°Overlapping¡± nh? th? n¨¤y?
Simple Design l¨¤ g¨¬?
? Design s? ti?n ho¨¢ theo qu¨¢ tr¨¬nh
? KH?NG c?n c¨® design to¨¤n b? t? ??u. V?a ?? th?i
? L¨¤ m?t ph?n c?a quy tr¨¬nh ph¨¢t tri?n
? Ch??ng tr¨¬nh l?n l¨ºn th¨¬ design s? thay ??i theo
? Kh?ng ph?i l¨¤ chi?n thu?t ¡°code and fix¡±
7
Evolve
Simplicity
Rationale behind Simple Design
? ¡±T?o ra th? ??n gi?n nh?t c¨® th? ch?y ???c¡°
? ¡±Ch¨²ng ta s? kh?ng bao gi? c?n t?i n¨®¡°
? ??u t? cho m?u thi?t k?
? H? th?ng t?i gi?n
1. Ch?y to¨¤n b? test
2. R? m?c ?¨ªch
3. Kh?ng tr¨´ng l?p
4. C¨® ¨ªt l?p v¨¤ ph??ng th?c nh?t c¨® th?
8
Thi?t k? ?? Giao ti?p
? V? thi?t k? ra ?? th?o lu?n trong nh¨®m
? Ch? c?n ?? ?? l¨¤m r? gi?i ph¨¢p
? Ch? n¨ºn s? d?ng c¨¢c l?u ?? ??n gi?n, kh?ng m?t nhi?u c?ng
duy tr¨¬
? Gi? minh b?ch c¨¢c l?u ??
? Treo ? t??ng
? Khuy?n kh¨ªch m?i ng??i c?p nh?t
? ?? ? xem li?u m?i ng??i c¨® d¨´ng kh?ng, hay l¨¤ v?t x¨®
9
Thi?t k? ?? X?y d?ng
? ¡°Ph?n m?m ch?y t?t l¨¤ th??c ?o ch¨ªnh v? ti?n ??¡±
? Thi?t k? s? ???c chuy?n th¨¤nh t¨ªnh n?ng ch?y ???c, do ?¨®:
? Design ph?i chia ra ?? code ???c trong nh¨®m
? Ph?n t¨¢ch, interface, giao ti?p gi?a c¨¢c th¨¤nh ph?n
? Design ph?i ki?m th? ???c
? ¡°Ki?n tr¨²c s? c?n ph?i code¡±
10
Refactoring
? ?? c¨® thi?t k? ??n gi?n h?n
? Duy tr¨¬, c?p nh?t d? h?n
? L¨¤ m?t vi?c b?t bu?c ph?i l¨¤m
? ?? ? ??n m?u thi?t k? v¨¤ c¨¢c best practices
11
Image: http://www.testically.org
T¨¢i c?u tr¨²c m? ngu?n
? T¨¢i c?u tr¨²c m? ngu?n l¨¤ c¨¢c k? thu?t cho ph¨¦p ch?nh s?a m?
ngu?n n?i b? m¨¤ kh?ng l¨¤m thay ??i h¨¤nh vi c?a h? th?ng ??i
v?i b¨ºn ngo¨¤i
? T¨¢i c?u tr¨²c m? ngu?n nh?m m?c ?¨ªch ch¨ªnh:
? M? ngu?n d? duy tr¨¬ h?n
? M? ngu?n d? m? r?ng h?n
L?u ?: T¨¢i c?u tr¨²c m? ngu?n kh?ng ph?i lu?n lu?n gi¨²p t?ng hi?u n?ng
(performance) c?a thu?t ³Ù´Ç¨¢²Ô. Trong m?t s? tr??ng h?p, c¨® th? c?n hy sinh hi?u
n?ng ?? c¨® ???c m? ngu?n t?t h?n
Development Flow
Requirement
Analysis
UI Mocking
?Customer
discussion
Design Draft
?Design
Discussion
Code the
skeleton to
test the
design
Coding in
team
Refactoring
and
Refinement
Build the
increment
$
DevTeamPO
Collaboration:
Steps:
Artifacts:
As a super user,
I want to ¡­
A
B
IDo
Interface IDo{
//TODO ¡­
}
Class A{
//TODO ¡­
}
Class B:IDo{
//TODO ¡­
}
Interface IDo{
//TODO ¡­
}
Class A{
method1(){
//Mr. A codes here
}
}
Class B:IDo{
method1(){
//Mrs. B codes here
}
}
Class C{
}
$
PO
Ti?n ho¨¢ c?a c¨¢c Model
com.myapp.Models
com.myapp.Views
com.myapp.Controllers
Sprint 0
updated story
V1
M1
IDo
C1
V1
M1
IDo
C1
V2
M2
Sprint 1 Sprint 2
Product
Backlog
Items burnt
Items burnt
Initial Architecture Model1 Model 2
¡°Continuous¡± Architecting
Sprint #1: without layering
Presentation
Tier
Application
Layer
Business Layer
Data Access
Layer
Data Tier
¡°Continuous¡± Architecting
Sprint #2: refactoring to layers
16
Presentation Tier
Application
Layer
Business Layer
Data Access
Layer
Data Tier
¡°Continuous¡± Architecting
Sprint #3: architecting ¡°on the go¡±
17
Presentation Tier Application Layer Business Layer Data Access Layer Data Tier
CodeSmell
Ph??ng th?c d¨¤i qu¨¢
D?u hi?u:
? Qu¨¢ nhi?u d¨°ng code
? C¨® qu¨¢ nhi?u t?ng code
? ?? ph?c t?p cao
X? l?:
? T¨¢ch ph??ng th?c
? S? d?ng Parameter Object
? Ph?n t¨¢ch c¨¢c kh?i l?nh ?i?u
ki?n
19
L?p to qu¨¢
D?u hi?u:
? C¨® qu¨¢ nhi?u tr??ng
? C¨® qu¨¢ nhi?u ph??ng th?c
? C¨® qu¨¢ nhi?u d¨°ng code
X? l?:
? T¨¢ch l?p
? T¨¢ch l?p con
? T¨¢ch interface
20
Danh s¨¢ch tham s? d¨¤i qu¨¢
D?u hi?u:
? C¨® nhi?u h?n 3 ho?c 4 tham
s? cho m?t ph??ng th?c
X? l?:
? Thay th? tham s? b?ng l?i g?i
ph??ng th?c
? Gi? nguy¨ºn object
? Truy?n v¨¤o ??i t??ng
21
M? b? l?p
D?u hi?u:
? Hai ho?c nhi?u ?o?n m? nh¨¬n
g?n gi?ng nhau
X? l?:
? T¨¢ch ph??ng th?c
? T¨¢ch l?p cha
? Chuy?n th¨¤nh template method
? Thay th? thu?t ³Ù´Ç¨¢²Ô
22
Ghi ch¨²
D?u hi?u:
? C¨® nhi?u ghi ch¨² ?? gi?i th¨ªch
c¨¢c ?o?n m?
X? l?:
? T¨¢ch bi?n
? T¨¢ch ph??ng th?c
? Thay ??i t¨ºn ph??ng th?c
23
M?t s? d?ng °ì³ó¨¢³¦
M?t s? k? thu?t t¨¢i c?u tr¨²c
K? thu?t ??i t¨ºn bi?n
K? thu?t ??i t¨ºn ph??ng th?c
K? thu?t t¨¢ch bi?n
K? thu?t t¨¢ch h?ng
K? thu?t t¨¢ch ph??ng th?c
??i t¨ºn bi?n v¨¤ ph??ng th?c
? Thay ??i t¨ºn bi?n ho?c ph??ng th?c ?? tr? n¨ºn t?t h?n: d?
??c, c¨® ? ngh?a, th? hi?n ???c ? ngh?a, tu?n th? coding
convention
? Khi ??i t¨ºn bi?n ho?c ph??ng th?c c?n l?u ?:
? ??i t¨ºn t?i v? tr¨ª khai b¨¢o
? ??i t¨ºn t?i t?t c? c¨¢c v? tr¨ª c¨® s? d?ng bi?n ho?c ph??ng th?c
? N¨ºn s? d?ng t¨ªnh n?ng c?a IDE ?? ??i t¨ºn bi?n ho?c ph??ng
th?c
T¨¢ch bi?n
? Trong nhi?u tr??ng h?p, c¨¢c bi?u th?c ph?c t?p s? g?y kh¨®
hi?u
? T¨¢ch bi?n (Variable Extraction) l¨¤ k? thu?t gi¨²p ??n gi?n ho¨¢
c¨¢c bi?u th?c v¨¤ gi¨²p d? hi?u h?n
Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n
Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n
T¨¢ch bi?n: V¨ª d? ki?m tra n?m nhu?n
function isLeapYear(year) {
if(year % 4 == 0){
if (year % 100 == 0){
if(year % 400 == 0)
return true;
} else {
return true;
}
}
return false;
}
function isLeapYear(year) {
varr isDivisibleBy4 = year % 4 == 0;
if(isDivisibleBy4){
varr isDivisibleBy100 = year % 100 == 0;
if (isDivisibleBy100){
varr isDivisibleBy400 = year % 400 == 0;
if(isDivisibleBy400)
return true;
} else {
return true;
}
}
return false;
}
T¨¢ch h?ng
? Trong nhi?u tr??ng h?p, c¨¢c gi¨¢ tr? ¡°th?n k?¡± (magic value) s?
g?y kh¨® kh?n cho vi?c ??c hi?u m? ngu?n
? T¨¢ch h?ng gi¨²p mang l?i ? ngh?a cho c¨¢c gi¨¢ tr? ¡°th?n k?¡± v¨¤ m?
ngu?n d? hi?u h?n
T¨¢ch h?ng: V¨ª d? ph?n quy?n d?a v¨¤o
role
function isAuthorized(var role){
if(role == 1){
return true;
}
return false;
}
const ROLE_ADMIN = 1;
function isAuthorized(role){
if(role == ROLE_ADMIN){
return true;
}
return false;
}
T¨¢ch ph??ng th?c
? Trong nhi?u tr??ng h?p, m?t ph??ng th?c qu¨¢ d¨¤i, qu¨¢ ph?c
t?p ho?c x? l? qu¨¢ nhi?u t¨¢c v? s? d?n ??n kh¨® hi?u, kh¨® ki?m
so¨¢t
? T¨¢ch ph??ng th?c gi¨²p cho c¨¢c ph??ng th?c d? ??c hi?u h?n,
d? ki?m so¨¢t h?n
Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n
Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n
T¨¢ch ph??ng th?c: V¨ª d? t¨ªnh s? ng¨¤y
function getDaysOfMonth(month, year){
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
¡­
case 2:
var isLeapYear = false;
if(year % 4 == 0){
if (year % 100 == 0){
if(year % 400 == 0)
isLeapYear = true;
} else {
isLeapYear = true;
}
}
if(isLeapYear){
return 29;
} else {
return 28;
}
default:
return 0;
}
function getDaysOfMonth(month, year){
switch (month){
¡­..
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
var isLeapYear = isLeapYear(year);
if(isLeapYear){
return 29;
} else {
return 28;
}
default:
return 0;
}
}
function isLeapYear(year) {
var isLeapYear = false;
if(year % 4 == 0){
if (year % 100 == 0){
if(year % 400 == 0)
isLeapYear = true;
} else {
isLeapYear = true;
}
}
return isLeapYear;
}
Thay th? thu?t ³Ù´Ç¨¢²Ô
Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n
Refactoring to Patterns
? Strategy
? Decorator
? Command
? Template Method
? Abstract Builder
? ¡­
Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n

More Related Content

What's hot (20)

Training Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?n
Training Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?nTraining Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?n
Training Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?n
Training Store
?
K? n?ng giao ti?p v¨¤ l?ng nghe
K? n?ng giao ti?p v¨¤ l?ng ngheK? n?ng giao ti?p v¨¤ l?ng nghe
K? n?ng giao ti?p v¨¤ l?ng nghe
S? Ki?n Hay
?
C? s? d? li?u PTIT ??i s? quan h?
C? s? d? li?u PTIT ??i s? quan h?C? s? d? li?u PTIT ??i s? quan h?
C? s? d? li?u PTIT ??i s? quan h?
NguynMinh294
?
Tin h?c c? s? - FPT Polytechnic
Tin h?c c? s? - FPT PolytechnicTin h?c c? s? - FPT Polytechnic
Tin h?c c? s? - FPT Polytechnic
minhvnnxyz18
?
Thi?t k? csdl qu?n l? nh?n s?
Thi?t k? csdl qu?n l? nh?n s?Thi?t k? csdl qu?n l? nh?n s?
Thi?t k? csdl qu?n l? nh?n s?
leemindinh
?
B¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ng
B¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ngB¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ng
B¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ng
Huyen Pham
?
K? n?ng giao ti?p hi?u qu?
K? n?ng giao ti?p hi?u qu?K? n?ng giao ti?p hi?u qu?
K? n?ng giao ti?p hi?u qu?
CMT SOLUTION
?
B?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPT
B?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPTB?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPT
B?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPT
MasterCode.vn
?
De thi qlda cntt itc vdc trac nghiem 05-2006
De thi qlda cntt itc vdc trac nghiem 05-2006De thi qlda cntt itc vdc trac nghiem 05-2006
De thi qlda cntt itc vdc trac nghiem 05-2006
Tran Tien
?
K? na?ng la??ng nghe
K? na?ng la??ng ngheK? na?ng la??ng nghe
K? na?ng la??ng nghe
S?n Nguy?n
?
Gi¨¢o tr¨¬nh qu?n l? d? ¨¢n
Gi¨¢o tr¨¬nh qu?n l? d? ¨¢nGi¨¢o tr¨¬nh qu?n l? d? ¨¢n
Gi¨¢o tr¨¬nh qu?n l? d? ¨¢n
Nguy?n Ng?c Phan V?n
?
X¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºu
X¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºuX¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºu
X¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºu
Chuong Mai
?
C¨¢c K? N?ng Giao Ti?p C? B?n
C¨¢c K? N?ng Giao Ti?p C? B?nC¨¢c K? N?ng Giao Ti?p C? B?n
C¨¢c K? N?ng Giao Ti?p C? B?n
Tram Do
?
ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"
ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"
ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"
T¨² Cao
?
Nh?ng k? n?ng v¨¤ ngh? thu?t giao ti?p hi?u qu?
Nh?ng k? n?ng v¨¤ ngh? thu?t giao ti?p hi?u qu?Nh?ng k? n?ng v¨¤ ngh? thu?t giao ti?p hi?u qu?
Nh?ng k? n?ng v¨¤ ngh? thu?t giao ti?p hi?u qu?
C?ng Ty T? V?n V¨¤ ?¨¤o T?o Cu?c S?ng ?¨²ng Ngh?a
?
C?C B?I TO?N KHAI PH? D? LI?U V? ?NG D?NG C?A KHAI PH? D? LI?U.pdf
C?C B?I TO?N KHAI PH? D? LI?U V? ?NG  D?NG C?A KHAI PH? D? LI?U.pdfC?C B?I TO?N KHAI PH? D? LI?U V? ?NG  D?NG C?A KHAI PH? D? LI?U.pdf
C?C B?I TO?N KHAI PH? D? LI?U V? ?NG D?NG C?A KHAI PH? D? LI?U.pdf
Man_Ebook
?
C?y nh? ph?n t¨¬m ki?m
C?y nh? ph?n t¨¬m ki?mC?y nh? ph?n t¨¬m ki?m
C?y nh? ph?n t¨¬m ki?m
kikihoho
?
Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#
Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#
Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#
An Nguyen
?
Ky nang gqvd
Ky nang gqvdKy nang gqvd
Ky nang gqvd
Ho¨¤ng R¨´
?
Training Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?n
Training Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?nTraining Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?n
Training Store - K? N?ng Qu?n L? Th?i Gian - Qu?n L? B?n Th?n
Training Store
?
K? n?ng giao ti?p v¨¤ l?ng nghe
K? n?ng giao ti?p v¨¤ l?ng ngheK? n?ng giao ti?p v¨¤ l?ng nghe
K? n?ng giao ti?p v¨¤ l?ng nghe
S? Ki?n Hay
?
C? s? d? li?u PTIT ??i s? quan h?
C? s? d? li?u PTIT ??i s? quan h?C? s? d? li?u PTIT ??i s? quan h?
C? s? d? li?u PTIT ??i s? quan h?
NguynMinh294
?
Tin h?c c? s? - FPT Polytechnic
Tin h?c c? s? - FPT PolytechnicTin h?c c? s? - FPT Polytechnic
Tin h?c c? s? - FPT Polytechnic
minhvnnxyz18
?
Thi?t k? csdl qu?n l? nh?n s?
Thi?t k? csdl qu?n l? nh?n s?Thi?t k? csdl qu?n l? nh?n s?
Thi?t k? csdl qu?n l? nh?n s?
leemindinh
?
B¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ng
B¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ngB¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ng
B¨¤i ti?u lu?n K? n?ng thuy?t tr¨¬nh - H?c vi?n c?ng ngh? b?u ch¨ªnh vi?n th?ng
Huyen Pham
?
K? n?ng giao ti?p hi?u qu?
K? n?ng giao ti?p hi?u qu?K? n?ng giao ti?p hi?u qu?
K? n?ng giao ti?p hi?u qu?
CMT SOLUTION
?
B?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPT
B?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPTB?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPT
B?I 2: Thi?t k? FORM v¨¤ x? l? s? ki?n - Gi¨¢o tr¨¬nh FPT
MasterCode.vn
?
De thi qlda cntt itc vdc trac nghiem 05-2006
De thi qlda cntt itc vdc trac nghiem 05-2006De thi qlda cntt itc vdc trac nghiem 05-2006
De thi qlda cntt itc vdc trac nghiem 05-2006
Tran Tien
?
K? na?ng la??ng nghe
K? na?ng la??ng ngheK? na?ng la??ng nghe
K? na?ng la??ng nghe
S?n Nguy?n
?
X¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºu
X¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºuX¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºu
X¨¢c ??nh m?c ti¨ºu v¨¤ l?p k? ho?ch ?? ??t ???c m?c ti¨ºu
Chuong Mai
?
C¨¢c K? N?ng Giao Ti?p C? B?n
C¨¢c K? N?ng Giao Ti?p C? B?nC¨¢c K? N?ng Giao Ti?p C? B?n
C¨¢c K? N?ng Giao Ti?p C? B?n
Tram Do
?
ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"
ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"
ºÝºÝߣ b¨¢o c¨¢o ?? ¨¢n t?t nghi?p "Website c?a h¨¤ng ?i?n tho?i tr?c tuy?n"
T¨² Cao
?
C?C B?I TO?N KHAI PH? D? LI?U V? ?NG D?NG C?A KHAI PH? D? LI?U.pdf
C?C B?I TO?N KHAI PH? D? LI?U V? ?NG  D?NG C?A KHAI PH? D? LI?U.pdfC?C B?I TO?N KHAI PH? D? LI?U V? ?NG  D?NG C?A KHAI PH? D? LI?U.pdf
C?C B?I TO?N KHAI PH? D? LI?U V? ?NG D?NG C?A KHAI PH? D? LI?U.pdf
Man_Ebook
?
C?y nh? ph?n t¨¬m ki?m
C?y nh? ph?n t¨¬m ki?mC?y nh? ph?n t¨¬m ki?m
C?y nh? ph?n t¨¬m ki?m
kikihoho
?
Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#
Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#
Quy t?c thi?t k? giao di?n v¨¤ vi?t code C#
An Nguyen
?

Similar to Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n (20)

How to write good code
How to write good code How to write good code
How to write good code
Minh Hoang
?
Itlc2015
Itlc2015Itlc2015
Itlc2015
Huy Do
?
Clean code
Clean codeClean code
Clean code
?¨¤m ?¨¤m
?
ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...
ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...
ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...
Vu Hung Nguyen
?
The art of readable code - Chapter I,II
The art of readable code - Chapter I,IIThe art of readable code - Chapter I,II
The art of readable code - Chapter I,II
Tr?n Hi?u
?
Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...
Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...
Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...
Working in Japan
?
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Da To
?
L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...
L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...
L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...
ITguru.vn
?
3-Requirements_VI.pdf
3-Requirements_VI.pdf3-Requirements_VI.pdf
3-Requirements_VI.pdf
EllieHuynh3
?
Agile Scrum for your startup
Agile Scrum for your startupAgile Scrum for your startup
Agile Scrum for your startup
Kevin Vu
?
ºÝºÝߣ 01-Web Application Overview (1).pdf
ºÝºÝߣ 01-Web Application Overview (1).pdfºÝºÝߣ 01-Web Application Overview (1).pdf
ºÝºÝߣ 01-Web Application Overview (1).pdf
HuyVnh4
?
Pbc day-01-introduction
Pbc day-01-introductionPbc day-01-introduction
Pbc day-01-introduction
Kh¨¢nh Nguy?n
?
B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?
B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?
B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?
ITguru.vn
?
[Cntt] b¨¤i gi?ng java khtn hcm
[Cntt] b¨¤i gi?ng java   khtn hcm[Cntt] b¨¤i gi?ng java   khtn hcm
[Cntt] b¨¤i gi?ng java khtn hcm
Hong Phuoc Nguyen
?
Seminar apply OOP in maintain software
Seminar apply OOP in maintain softwareSeminar apply OOP in maintain software
Seminar apply OOP in maintain software
VKhang Yang
?
mo-hinh-phat-trien.pdf
mo-hinh-phat-trien.pdfmo-hinh-phat-trien.pdf
mo-hinh-phat-trien.pdf
ZACNguyenHoang
?
Bai giang c++
Bai giang c++Bai giang c++
Bai giang c++
Thang DV
?
C++ b?u ch¨ªnh vi?n th?ng
C++ b?u ch¨ªnh vi?n th?ngC++ b?u ch¨ªnh vi?n th?ng
C++ b?u ch¨ªnh vi?n th?ng
Ti¨ºn L? Rau R¨²t
?
How to write good code
How to write good code How to write good code
How to write good code
Minh Hoang
?
ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...
ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...
ScrumDay Vietnam 2013: Ph??ng ph¨¢p lu?n ph?n m?m - Truy?n th?ng v¨¤ Agile - Ng...
Vu Hung Nguyen
?
The art of readable code - Chapter I,II
The art of readable code - Chapter I,IIThe art of readable code - Chapter I,II
The art of readable code - Chapter I,II
Tr?n Hi?u
?
Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...
Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...
Phuongphapluanduanphanmem truyenthongvaagilengotrungvietscrumday2013-13100720...
Working in Japan
?
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Da To
?
L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...
L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...
L?p tr¨¬nh vi¨ºn c¨® th? l¨¤m g¨¬ n?u ?? ch¨¢n vi?t code? ??y l¨¤ 23 c?ng vi?c °ì³ó¨¢³¦ ...
ITguru.vn
?
3-Requirements_VI.pdf
3-Requirements_VI.pdf3-Requirements_VI.pdf
3-Requirements_VI.pdf
EllieHuynh3
?
Agile Scrum for your startup
Agile Scrum for your startupAgile Scrum for your startup
Agile Scrum for your startup
Kevin Vu
?
ºÝºÝߣ 01-Web Application Overview (1).pdf
ºÝºÝߣ 01-Web Application Overview (1).pdfºÝºÝߣ 01-Web Application Overview (1).pdf
ºÝºÝߣ 01-Web Application Overview (1).pdf
HuyVnh4
?
B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?
B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?
B?n c?n chu?n b? g¨¬ khi ?i ph?ng v?n v? tr¨ª DevOps?
ITguru.vn
?
[Cntt] b¨¤i gi?ng java khtn hcm
[Cntt] b¨¤i gi?ng java   khtn hcm[Cntt] b¨¤i gi?ng java   khtn hcm
[Cntt] b¨¤i gi?ng java khtn hcm
Hong Phuoc Nguyen
?
Seminar apply OOP in maintain software
Seminar apply OOP in maintain softwareSeminar apply OOP in maintain software
Seminar apply OOP in maintain software
VKhang Yang
?
Bai giang c++
Bai giang c++Bai giang c++
Bai giang c++
Thang DV
?

More from Nh?t Nguy?n Kh?c (9)

Reflective Learning
Reflective LearningReflective Learning
Reflective Learning
Nh?t Nguy?n Kh?c
?
Livestream - Nh?t k? h?c l?p tr¨¬nh
Livestream - Nh?t k? h?c l?p tr¨¬nhLivestream - Nh?t k? h?c l?p tr¨¬nh
Livestream - Nh?t k? h?c l?p tr¨¬nh
Nh?t Nguy?n Kh?c
?
Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?
Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?
Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?
Nh?t Nguy?n Kh?c
?
H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020
H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020
H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020
Nh?t Nguy?n Kh?c
?
WHY DO WE REPORT?
WHY DO WE REPORT?WHY DO WE REPORT?
WHY DO WE REPORT?
Nh?t Nguy?n Kh?c
?
Live stream: H?c l?p tr¨¬nh
Live stream: H?c l?p tr¨¬nhLive stream: H?c l?p tr¨¬nh
Live stream: H?c l?p tr¨¬nh
Nh?t Nguy?n Kh?c
?
Automation Testing & TDD
Automation Testing & TDDAutomation Testing & TDD
Automation Testing & TDD
Nh?t Nguy?n Kh?c
?
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Nh?t Nguy?n Kh?c
?
Clean code coding like a professional
Clean code   coding like a professionalClean code   coding like a professional
Clean code coding like a professional
Nh?t Nguy?n Kh?c
?
Livestream - Nh?t k? h?c l?p tr¨¬nh
Livestream - Nh?t k? h?c l?p tr¨¬nhLivestream - Nh?t k? h?c l?p tr¨¬nh
Livestream - Nh?t k? h?c l?p tr¨¬nh
Nh?t Nguy?n Kh?c
?
Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?
Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?
Livestream - H?c l?p tr¨¬nh l¨¤ h?c g¨¬?
Nh?t Nguy?n Kh?c
?
H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020
H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020
H?i th?o ngh? nghi?p t?i CodeGym 6/6/2020
Nh?t Nguy?n Kh?c
?
Live stream: H?c l?p tr¨¬nh
Live stream: H?c l?p tr¨¬nhLive stream: H?c l?p tr¨¬nh
Live stream: H?c l?p tr¨¬nh
Nh?t Nguy?n Kh?c
?
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Nh?t Nguy?n Kh?c
?
Clean code coding like a professional
Clean code   coding like a professionalClean code   coding like a professional
Clean code coding like a professional
Nh?t Nguy?n Kh?c
?

Code Refactoring: Thay ??i nh? - L?i ¨ªch l?n

  • 1. Code Refactoring THAY ??I NH? - L?I ?CH L?N
  • 2. N?i dung ? T?i sao c?n code refactoring ? M? b?n ? C¨¢c k? thu?t refactoring ? Demo
  • 3. T?c ?? ph¨¢t h¨¤nh ph?n m?m
  • 4. Tuy¨ºn ng?n Agile Ch¨²ng t?i ?? ph¨¢t hi?n ra c¨¢ch ph¨¢t tri?n ph?n m?m t?t h?n b?ng c¨¢ch th?c hi?n n¨® v¨¤ gi¨²p ?? ng??i °ì³ó¨¢³¦ th?c hi?n. Qua c?ng vi?c n¨¤y, ch¨²ng t?i ?? ?i ??n vi?c ?¨¢nh gi¨¢ cao: C¨¢ nh?n v¨¤ s? t??ng t¨¢c h?n l¨¤ quy tr¨¬nh v¨¤ c?ng c?; Ph?n m?m ch?y t?t h?n l¨¤ t¨¤i li?u ??y ??; C?ng t¨¢cv?i °ì³ó¨¢³¦h h¨¤ng h?n l¨¤ ?¨¤m ph¨¢n h?p ??ng; Ph?n h?i v?i c¨¢c thay ??ih?n l¨¤ b¨¢m s¨¢t k? ho?ch. M?c d¨´ c¨¢c ?i?u b¨ºn ph?i v?n c¨°n gi¨¢ tr?, nh?ng ch¨²ng t?i ?¨¢nh gi¨¢ cao h?n c¨¢c m?c ? b¨ºn tr¨¢i. AgileAlliance.org
  • 5. Chuy?n giao nhanh Th?i gian ¡­ Iteration
  • 6. Design is the key, Planned Design is not ¡­ ? Takeuchi & Nonaka: overlapping is better than sequential Not efficient: ? Time consuming ? No backward ? No ¡°better idea¡± on the go L¨¤m th? n¨¤o ?? t? ch?c ki?u ¡°Overlapping¡± nh? th? n¨¤y?
  • 7. Simple Design l¨¤ g¨¬? ? Design s? ti?n ho¨¢ theo qu¨¢ tr¨¬nh ? KH?NG c?n c¨® design to¨¤n b? t? ??u. V?a ?? th?i ? L¨¤ m?t ph?n c?a quy tr¨¬nh ph¨¢t tri?n ? Ch??ng tr¨¬nh l?n l¨ºn th¨¬ design s? thay ??i theo ? Kh?ng ph?i l¨¤ chi?n thu?t ¡°code and fix¡± 7 Evolve
  • 8. Simplicity Rationale behind Simple Design ? ¡±T?o ra th? ??n gi?n nh?t c¨® th? ch?y ???c¡° ? ¡±Ch¨²ng ta s? kh?ng bao gi? c?n t?i n¨®¡° ? ??u t? cho m?u thi?t k? ? H? th?ng t?i gi?n 1. Ch?y to¨¤n b? test 2. R? m?c ?¨ªch 3. Kh?ng tr¨´ng l?p 4. C¨® ¨ªt l?p v¨¤ ph??ng th?c nh?t c¨® th? 8
  • 9. Thi?t k? ?? Giao ti?p ? V? thi?t k? ra ?? th?o lu?n trong nh¨®m ? Ch? c?n ?? ?? l¨¤m r? gi?i ph¨¢p ? Ch? n¨ºn s? d?ng c¨¢c l?u ?? ??n gi?n, kh?ng m?t nhi?u c?ng duy tr¨¬ ? Gi? minh b?ch c¨¢c l?u ?? ? Treo ? t??ng ? Khuy?n kh¨ªch m?i ng??i c?p nh?t ? ?? ? xem li?u m?i ng??i c¨® d¨´ng kh?ng, hay l¨¤ v?t x¨® 9
  • 10. Thi?t k? ?? X?y d?ng ? ¡°Ph?n m?m ch?y t?t l¨¤ th??c ?o ch¨ªnh v? ti?n ??¡± ? Thi?t k? s? ???c chuy?n th¨¤nh t¨ªnh n?ng ch?y ???c, do ?¨®: ? Design ph?i chia ra ?? code ???c trong nh¨®m ? Ph?n t¨¢ch, interface, giao ti?p gi?a c¨¢c th¨¤nh ph?n ? Design ph?i ki?m th? ???c ? ¡°Ki?n tr¨²c s? c?n ph?i code¡± 10
  • 11. Refactoring ? ?? c¨® thi?t k? ??n gi?n h?n ? Duy tr¨¬, c?p nh?t d? h?n ? L¨¤ m?t vi?c b?t bu?c ph?i l¨¤m ? ?? ? ??n m?u thi?t k? v¨¤ c¨¢c best practices 11 Image: http://www.testically.org
  • 12. T¨¢i c?u tr¨²c m? ngu?n ? T¨¢i c?u tr¨²c m? ngu?n l¨¤ c¨¢c k? thu?t cho ph¨¦p ch?nh s?a m? ngu?n n?i b? m¨¤ kh?ng l¨¤m thay ??i h¨¤nh vi c?a h? th?ng ??i v?i b¨ºn ngo¨¤i ? T¨¢i c?u tr¨²c m? ngu?n nh?m m?c ?¨ªch ch¨ªnh: ? M? ngu?n d? duy tr¨¬ h?n ? M? ngu?n d? m? r?ng h?n L?u ?: T¨¢i c?u tr¨²c m? ngu?n kh?ng ph?i lu?n lu?n gi¨²p t?ng hi?u n?ng (performance) c?a thu?t ³Ù´Ç¨¢²Ô. Trong m?t s? tr??ng h?p, c¨® th? c?n hy sinh hi?u n?ng ?? c¨® ???c m? ngu?n t?t h?n
  • 13. Development Flow Requirement Analysis UI Mocking ?Customer discussion Design Draft ?Design Discussion Code the skeleton to test the design Coding in team Refactoring and Refinement Build the increment $ DevTeamPO Collaboration: Steps: Artifacts: As a super user, I want to ¡­ A B IDo Interface IDo{ //TODO ¡­ } Class A{ //TODO ¡­ } Class B:IDo{ //TODO ¡­ } Interface IDo{ //TODO ¡­ } Class A{ method1(){ //Mr. A codes here } } Class B:IDo{ method1(){ //Mrs. B codes here } } Class C{ } $ PO
  • 14. Ti?n ho¨¢ c?a c¨¢c Model com.myapp.Models com.myapp.Views com.myapp.Controllers Sprint 0 updated story V1 M1 IDo C1 V1 M1 IDo C1 V2 M2 Sprint 1 Sprint 2 Product Backlog Items burnt Items burnt Initial Architecture Model1 Model 2
  • 15. ¡°Continuous¡± Architecting Sprint #1: without layering Presentation Tier Application Layer Business Layer Data Access Layer Data Tier
  • 16. ¡°Continuous¡± Architecting Sprint #2: refactoring to layers 16 Presentation Tier Application Layer Business Layer Data Access Layer Data Tier
  • 17. ¡°Continuous¡± Architecting Sprint #3: architecting ¡°on the go¡± 17 Presentation Tier Application Layer Business Layer Data Access Layer Data Tier
  • 19. Ph??ng th?c d¨¤i qu¨¢ D?u hi?u: ? Qu¨¢ nhi?u d¨°ng code ? C¨® qu¨¢ nhi?u t?ng code ? ?? ph?c t?p cao X? l?: ? T¨¢ch ph??ng th?c ? S? d?ng Parameter Object ? Ph?n t¨¢ch c¨¢c kh?i l?nh ?i?u ki?n 19
  • 20. L?p to qu¨¢ D?u hi?u: ? C¨® qu¨¢ nhi?u tr??ng ? C¨® qu¨¢ nhi?u ph??ng th?c ? C¨® qu¨¢ nhi?u d¨°ng code X? l?: ? T¨¢ch l?p ? T¨¢ch l?p con ? T¨¢ch interface 20
  • 21. Danh s¨¢ch tham s? d¨¤i qu¨¢ D?u hi?u: ? C¨® nhi?u h?n 3 ho?c 4 tham s? cho m?t ph??ng th?c X? l?: ? Thay th? tham s? b?ng l?i g?i ph??ng th?c ? Gi? nguy¨ºn object ? Truy?n v¨¤o ??i t??ng 21
  • 22. M? b? l?p D?u hi?u: ? Hai ho?c nhi?u ?o?n m? nh¨¬n g?n gi?ng nhau X? l?: ? T¨¢ch ph??ng th?c ? T¨¢ch l?p cha ? Chuy?n th¨¤nh template method ? Thay th? thu?t ³Ù´Ç¨¢²Ô 22
  • 23. Ghi ch¨² D?u hi?u: ? C¨® nhi?u ghi ch¨² ?? gi?i th¨ªch c¨¢c ?o?n m? X? l?: ? T¨¢ch bi?n ? T¨¢ch ph??ng th?c ? Thay ??i t¨ºn ph??ng th?c 23
  • 24. M?t s? d?ng °ì³ó¨¢³¦
  • 25. M?t s? k? thu?t t¨¢i c?u tr¨²c K? thu?t ??i t¨ºn bi?n K? thu?t ??i t¨ºn ph??ng th?c K? thu?t t¨¢ch bi?n K? thu?t t¨¢ch h?ng K? thu?t t¨¢ch ph??ng th?c
  • 26. ??i t¨ºn bi?n v¨¤ ph??ng th?c ? Thay ??i t¨ºn bi?n ho?c ph??ng th?c ?? tr? n¨ºn t?t h?n: d? ??c, c¨® ? ngh?a, th? hi?n ???c ? ngh?a, tu?n th? coding convention ? Khi ??i t¨ºn bi?n ho?c ph??ng th?c c?n l?u ?: ? ??i t¨ºn t?i v? tr¨ª khai b¨¢o ? ??i t¨ºn t?i t?t c? c¨¢c v? tr¨ª c¨® s? d?ng bi?n ho?c ph??ng th?c ? N¨ºn s? d?ng t¨ªnh n?ng c?a IDE ?? ??i t¨ºn bi?n ho?c ph??ng th?c
  • 27. T¨¢ch bi?n ? Trong nhi?u tr??ng h?p, c¨¢c bi?u th?c ph?c t?p s? g?y kh¨® hi?u ? T¨¢ch bi?n (Variable Extraction) l¨¤ k? thu?t gi¨²p ??n gi?n ho¨¢ c¨¢c bi?u th?c v¨¤ gi¨²p d? hi?u h?n
  • 30. T¨¢ch bi?n: V¨ª d? ki?m tra n?m nhu?n function isLeapYear(year) { if(year % 4 == 0){ if (year % 100 == 0){ if(year % 400 == 0) return true; } else { return true; } } return false; } function isLeapYear(year) { varr isDivisibleBy4 = year % 4 == 0; if(isDivisibleBy4){ varr isDivisibleBy100 = year % 100 == 0; if (isDivisibleBy100){ varr isDivisibleBy400 = year % 400 == 0; if(isDivisibleBy400) return true; } else { return true; } } return false; }
  • 31. T¨¢ch h?ng ? Trong nhi?u tr??ng h?p, c¨¢c gi¨¢ tr? ¡°th?n k?¡± (magic value) s? g?y kh¨® kh?n cho vi?c ??c hi?u m? ngu?n ? T¨¢ch h?ng gi¨²p mang l?i ? ngh?a cho c¨¢c gi¨¢ tr? ¡°th?n k?¡± v¨¤ m? ngu?n d? hi?u h?n
  • 32. T¨¢ch h?ng: V¨ª d? ph?n quy?n d?a v¨¤o role function isAuthorized(var role){ if(role == 1){ return true; } return false; } const ROLE_ADMIN = 1; function isAuthorized(role){ if(role == ROLE_ADMIN){ return true; } return false; }
  • 33. T¨¢ch ph??ng th?c ? Trong nhi?u tr??ng h?p, m?t ph??ng th?c qu¨¢ d¨¤i, qu¨¢ ph?c t?p ho?c x? l? qu¨¢ nhi?u t¨¢c v? s? d?n ??n kh¨® hi?u, kh¨® ki?m so¨¢t ? T¨¢ch ph??ng th?c gi¨²p cho c¨¢c ph??ng th?c d? ??c hi?u h?n, d? ki?m so¨¢t h?n
  • 36. T¨¢ch ph??ng th?c: V¨ª d? t¨ªnh s? ng¨¤y function getDaysOfMonth(month, year){ switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; ¡­ case 2: var isLeapYear = false; if(year % 4 == 0){ if (year % 100 == 0){ if(year % 400 == 0) isLeapYear = true; } else { isLeapYear = true; } } if(isLeapYear){ return 29; } else { return 28; } default: return 0; }
  • 37. function getDaysOfMonth(month, year){ switch (month){ ¡­.. case 4: case 6: case 9: case 11: return 30; case 2: var isLeapYear = isLeapYear(year); if(isLeapYear){ return 29; } else { return 28; } default: return 0; } } function isLeapYear(year) { var isLeapYear = false; if(year % 4 == 0){ if (year % 100 == 0){ if(year % 400 == 0) isLeapYear = true; } else { isLeapYear = true; } } return isLeapYear; }
  • 38. Thay th? thu?t ³Ù´Ç¨¢²Ô
  • 40. Refactoring to Patterns ? Strategy ? Decorator ? Command ? Template Method ? Abstract Builder ? ¡­

Editor's Notes

  • #5: Discuss this list of values before going on further with Scrum
  • #6: Limit risk to 1 Sprint