際際滷

際際滷Share a Scribd company logo
CHU畉N HA CODE
N畛i dung ch鱈nh - Contents
1. V狸 sao ph畉i chu畉n h坦a code?
2. Ti棚u chu畉n c畛a m達 ngu畛n
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
4. L畉p tr狸nh h動畛ng 畛i t動畛ng
5. M担 h狸nh MVC
6. Design pattern
1. V狸 sao ph畉i chu畉n h坦a code?
Sai ng畛 ph叩p.
1. V狸 sao ph畉i chu畉n h坦a code?
M畛c ti棚u:
D畛 畛c hi畛u - readable
D畛 ch畉n o叩n l畛i sai - debug
D畛 ph叩t tri畛n  maintainable
Gi畉m nguy c董 t畉o ra bug
2. Ti棚u chu畉n c畛a m達 ngu畛n
 炭ng 畉n - correctness
 Trong s叩ng - clarity
 Hi畛u qu畉 - efficiency
 Uy畛n chuy畛n  flexibility
* C叩c ti棚u chu畉n 動畛c s畉p theo th畛 t畛 tng d畉n nh動 tr棚n.
* C畉n l動u 箪 r畉ng, t鱈nh trong s叩ng l quan tr畛ng h董n n棚n c畉n 動畛c
動u ti棚n h董n so v畛i t鱈nh hi畛u qu畉. B棚n c畉nh 坦, c湛ng v畛i s畛
ph叩t tri畛n c畛a ph畉n c畛ng, vi畛c 畛 ch棚nh l畛ch c畛a t鱈nh hi畛u qu畉
ngy cng nh畛 h董n c滴ng l m畛t l鱈 do cho i畛u ny.
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
 董n th畛 h坦a  module:
+ Ch畛 th畛c hi畛n 1 c担ng vi畛c nh畛.
+ Ch畛 c坦 1 ng探 vo v 1 ng探 ra.
* Vi畛c ny c滴ng mang l畉i 1 l畛i 鱈ch quan tr畛ng l d畛 dng th畛c hi畛n
unit test.
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
 M畛t s畛 l畛ch h動畛ng ph畛 bi畉n trong nhi畛u
ng担n ng畛 l s畛 d畛ng c叩c ph叩t bi畛u goto:
+ return
+ break (tr畛 switch case)
* C叩c l畛nh ny 動畛c h畛 tr畛 mang l畉i nh畛ng t湛y bi畉n kh叩 tho畉i m叩i
cho ng動畛i l畉p tr狸nh. i畛u ny nh畉m m畛c 鱈ch khi畉n ng担n ng畛
l畉p tr狸nh tr畛 n棚n g畉n g滴i v ph畛 bi畉n h董n, tuy nhi棚n, 坦 c滴ng
ch鱈nh l l鱈 do ph叩t sinh m達 r畛i.
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
C畉u tr炭c l畉p - good pattern
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
C畉u tr炭c l畉p - bad pattern
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
Hm - good pattern
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
Hm - bad pattern
3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c
 Quy 動畛c:
+ Hm ch畛 th畛c hi畛n c叩c nhi畛m v畛 董n v畛 (kh坦
ho畉c kh担ng th畛 chia nh畛).
+ H畉n ch畉 t畛i a vi畛c s畛 d畛ng c叩c ph叩t bi畛u goto:
break, return, exit... tr畛 khi th畉t s畛 c畉n thi畉t.
4. L畉p tr狸nh h動畛ng 畛i t動畛ng
 L畉p tr狸nh c坦 c畉u tr炭c vs l畉p tr狸nh h動畛ng
畛i t動畛ng:
+ L畉p tr狸nh c坦 c畉u tr炭c 動畛c t畛 ch畛c h動畛ng 畉n
ch畛c nng m kh担ng quan t但m d畛 li畛u.
+ L畉p tr狸nh h動畛ng 畛i t動畛ng 動畛c t畛 ch畛c h動畛ng
畉n d畛 li畛u.
* C畉n hi畛u r探 tinh th畉n ny 畛 t畛 ch畛c c叩c thu畛c t鱈nh v hm t畉p
trung vo c叩c l畛p ph湛 h畛p sao cho m畛i l畛p ch畛 ch畛a v x畛 l鱈
c叩c d畛 li畛u c坦 li棚n quan.
4. L畉p tr狸nh h動畛ng 畛i t動畛ng
 Kh畉 nng truy xu畉t  accessability
+ M畛i thu畛c t鱈nh n棚n 動畛c khai b叩o private 畛 l畛p
d畉n xu畉t v kh担ng public 畛 l畛p c董 s畛.
+ C叩c ph動董ng th畛c 動畛c khai b叩o 炭ng v畛i
ph畉m vi truy xu畉t.
+ Vi畛c khai b叩o ny nh畉m 畉m b畉o tri畛t 畛 t鱈nh
坦ng g坦i.
 S畛 d畛ng thu畛c t鱈nh:
+ D畛 li畛u 動畛c truy xu畉t xuy棚n su畛t trong class
n棚n d湛ng bi畉n ton c畛c 畛 thay cho tham s畛.
4. L畉p tr狸nh h動畛ng 畛i t動畛ng
 L畛p c董 s畛:
+ C叩c thu畛c t鱈nh ho畉c ph動董ng th畛c gi畛ng nhau
c畉n 動畛c 畛nh ngh挑a 畛 l畛p c董 s畛. H畉n ch畉 t畛i a
tr湛ng l畉p code, vi畛c ny 畉n ch畛a nhi畛u nguy c董
t畉o ra bug trong qu叩 tr狸nh ph叩t tri畛n.
 Interface:
+ C叩c hm public n棚n 動畛c khai b叩o trong
interface v畛i prototype l t畛i thi畛u sao cho v畉n
畛ng nh畉t.
4. L畉p tr狸nh h動畛ng 畛i t動畛ng
 H畉ng s畛:
+ H畉ng s畛 ph畉i 動畛c khai b叩o trong class th鱈ch
h畛p, lo畉i b畛 vi畛c define c叩c h畉ng s畛 ngoi class.
 畉t t棚n:
+ C叩c thu畛c t鱈nh v ph動董ng th畛c 動畛c 畉t t棚n
kh担ng 動畛c ph辿p l畉p l畉i t棚n ho畉c ph畉n g畛i nh畛
c畛a class.
5. M担 h狸nh MVC
 Controller:
+ T畉t c畉 c叩c ch畛c nng thao t叩c 畉n c湛ng m畛t 畛i
t動畛ng ph畉i 動畛c 畉t vo c湛ng m畛t controller. V鱈
d畛, c畉n tr叩nh vi畛c c湛ng m畛t 畛i t動畛ng User,
nh動ng c叩c ch畛c nng th棚m x坦a s畛a 動畛c 畉t vo
3 controller kh叩c nhau.
+ Kh担ng 畉t c叩c x畛 l鱈 thao t叩c tr畛c ti畉p 畉n d畛
li畛u ngu畛n (database, file, cache) 畛 t畉ng ny.
+ Ch畛 c叩c function 動畛c d湛ng nh動 action m畛i khai
b叩o public, c叩c function c嘆n l畉i khai b叩o private.
5. M担 h狸nh MVC
 Controller:
+ S畛 d畛ng l畛p c董 s畛 畛 tr叩nh l畉p code.
+ N棚n khai b叩o interface cho c叩c controller c坦
ch畛c nng t動董ng t畛.
5. M担 h狸nh MVC
 Model:
+ T畉t c畉 c叩c ch畛c nng thao t叩c 畉n c湛ng m畛t d畛
li畛u (b畉ng, file, cache) ph畉i 動畛c 畉t vo c湛ng
m畛t model. N畉u c坦 hm th畛c hi畛n join c叩c b畉ng,
hm ny ph畉i 動畛c 畉t vo model c畛a b畉ng
ch鱈nh.
+ Ton b畛 vi畛c thao t叩c 畉n d畛 li畛u 動畛c 畉t 畛
t畉ng ny.
+ C叩c thao t叩c b畛 sung v thay 畛i d畛 li畛u c滴ng
動畛c 畉t 畛 t畉ng ny.
5. M担 h狸nh MVC
 Model:
+ Ch炭 箪 ph畉n khai b叩o accessability kh担ng 動畛c
d動 th畛a.
+ S畛 d畛ng l畛p c董 s畛 畛 tr叩nh l畉p code.
+ N棚n khai b叩o interface cho c叩c model c坦 ch畛c
nng t動董ng t畛.
5. M担 h狸nh MVC
 View:
+ S畛 d畛ng helper 畛 generate code html.
+ N畉u c畉n code logic tr棚n view, c畉n ph畉i x但y
d畛ng th棚m helper, kh担ng vi畉t code logic ph畛c t畉p
ngay tr棚n view.
+ 畛i v畛i c叩c action d湛ng ajax, n棚n s畛 d畛ng data
type l html v t畉o file view 畛 d畛 qu畉n l鱈.
6. Design pattern
Programming

More Related Content

Programming

  • 2. N畛i dung ch鱈nh - Contents 1. V狸 sao ph畉i chu畉n h坦a code? 2. Ti棚u chu畉n c畛a m達 ngu畛n 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c 4. L畉p tr狸nh h動畛ng 畛i t動畛ng 5. M担 h狸nh MVC 6. Design pattern
  • 3. 1. V狸 sao ph畉i chu畉n h坦a code? Sai ng畛 ph叩p.
  • 4. 1. V狸 sao ph畉i chu畉n h坦a code? M畛c ti棚u: D畛 畛c hi畛u - readable D畛 ch畉n o叩n l畛i sai - debug D畛 ph叩t tri畛n maintainable Gi畉m nguy c董 t畉o ra bug
  • 5. 2. Ti棚u chu畉n c畛a m達 ngu畛n 炭ng 畉n - correctness Trong s叩ng - clarity Hi畛u qu畉 - efficiency Uy畛n chuy畛n flexibility * C叩c ti棚u chu畉n 動畛c s畉p theo th畛 t畛 tng d畉n nh動 tr棚n. * C畉n l動u 箪 r畉ng, t鱈nh trong s叩ng l quan tr畛ng h董n n棚n c畉n 動畛c 動u ti棚n h董n so v畛i t鱈nh hi畛u qu畉. B棚n c畉nh 坦, c湛ng v畛i s畛 ph叩t tri畛n c畛a ph畉n c畛ng, vi畛c 畛 ch棚nh l畛ch c畛a t鱈nh hi畛u qu畉 ngy cng nh畛 h董n c滴ng l m畛t l鱈 do cho i畛u ny.
  • 6. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c 董n th畛 h坦a module: + Ch畛 th畛c hi畛n 1 c担ng vi畛c nh畛. + Ch畛 c坦 1 ng探 vo v 1 ng探 ra. * Vi畛c ny c滴ng mang l畉i 1 l畛i 鱈ch quan tr畛ng l d畛 dng th畛c hi畛n unit test.
  • 7. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c M畛t s畛 l畛ch h動畛ng ph畛 bi畉n trong nhi畛u ng担n ng畛 l s畛 d畛ng c叩c ph叩t bi畛u goto: + return + break (tr畛 switch case) * C叩c l畛nh ny 動畛c h畛 tr畛 mang l畉i nh畛ng t湛y bi畉n kh叩 tho畉i m叩i cho ng動畛i l畉p tr狸nh. i畛u ny nh畉m m畛c 鱈ch khi畉n ng担n ng畛 l畉p tr狸nh tr畛 n棚n g畉n g滴i v ph畛 bi畉n h董n, tuy nhi棚n, 坦 c滴ng ch鱈nh l l鱈 do ph叩t sinh m達 r畛i.
  • 8. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c C畉u tr炭c l畉p - good pattern
  • 9. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c C畉u tr炭c l畉p - bad pattern
  • 10. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c Hm - good pattern
  • 11. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c Hm - bad pattern
  • 12. 3. L動u 箪 v畛 l畉p tr狸nh c坦 c畉u tr炭c Quy 動畛c: + Hm ch畛 th畛c hi畛n c叩c nhi畛m v畛 董n v畛 (kh坦 ho畉c kh担ng th畛 chia nh畛). + H畉n ch畉 t畛i a vi畛c s畛 d畛ng c叩c ph叩t bi畛u goto: break, return, exit... tr畛 khi th畉t s畛 c畉n thi畉t.
  • 13. 4. L畉p tr狸nh h動畛ng 畛i t動畛ng L畉p tr狸nh c坦 c畉u tr炭c vs l畉p tr狸nh h動畛ng 畛i t動畛ng: + L畉p tr狸nh c坦 c畉u tr炭c 動畛c t畛 ch畛c h動畛ng 畉n ch畛c nng m kh担ng quan t但m d畛 li畛u. + L畉p tr狸nh h動畛ng 畛i t動畛ng 動畛c t畛 ch畛c h動畛ng 畉n d畛 li畛u. * C畉n hi畛u r探 tinh th畉n ny 畛 t畛 ch畛c c叩c thu畛c t鱈nh v hm t畉p trung vo c叩c l畛p ph湛 h畛p sao cho m畛i l畛p ch畛 ch畛a v x畛 l鱈 c叩c d畛 li畛u c坦 li棚n quan.
  • 14. 4. L畉p tr狸nh h動畛ng 畛i t動畛ng Kh畉 nng truy xu畉t accessability + M畛i thu畛c t鱈nh n棚n 動畛c khai b叩o private 畛 l畛p d畉n xu畉t v kh担ng public 畛 l畛p c董 s畛. + C叩c ph動董ng th畛c 動畛c khai b叩o 炭ng v畛i ph畉m vi truy xu畉t. + Vi畛c khai b叩o ny nh畉m 畉m b畉o tri畛t 畛 t鱈nh 坦ng g坦i. S畛 d畛ng thu畛c t鱈nh: + D畛 li畛u 動畛c truy xu畉t xuy棚n su畛t trong class n棚n d湛ng bi畉n ton c畛c 畛 thay cho tham s畛.
  • 15. 4. L畉p tr狸nh h動畛ng 畛i t動畛ng L畛p c董 s畛: + C叩c thu畛c t鱈nh ho畉c ph動董ng th畛c gi畛ng nhau c畉n 動畛c 畛nh ngh挑a 畛 l畛p c董 s畛. H畉n ch畉 t畛i a tr湛ng l畉p code, vi畛c ny 畉n ch畛a nhi畛u nguy c董 t畉o ra bug trong qu叩 tr狸nh ph叩t tri畛n. Interface: + C叩c hm public n棚n 動畛c khai b叩o trong interface v畛i prototype l t畛i thi畛u sao cho v畉n 畛ng nh畉t.
  • 16. 4. L畉p tr狸nh h動畛ng 畛i t動畛ng H畉ng s畛: + H畉ng s畛 ph畉i 動畛c khai b叩o trong class th鱈ch h畛p, lo畉i b畛 vi畛c define c叩c h畉ng s畛 ngoi class. 畉t t棚n: + C叩c thu畛c t鱈nh v ph動董ng th畛c 動畛c 畉t t棚n kh担ng 動畛c ph辿p l畉p l畉i t棚n ho畉c ph畉n g畛i nh畛 c畛a class.
  • 17. 5. M担 h狸nh MVC Controller: + T畉t c畉 c叩c ch畛c nng thao t叩c 畉n c湛ng m畛t 畛i t動畛ng ph畉i 動畛c 畉t vo c湛ng m畛t controller. V鱈 d畛, c畉n tr叩nh vi畛c c湛ng m畛t 畛i t動畛ng User, nh動ng c叩c ch畛c nng th棚m x坦a s畛a 動畛c 畉t vo 3 controller kh叩c nhau. + Kh担ng 畉t c叩c x畛 l鱈 thao t叩c tr畛c ti畉p 畉n d畛 li畛u ngu畛n (database, file, cache) 畛 t畉ng ny. + Ch畛 c叩c function 動畛c d湛ng nh動 action m畛i khai b叩o public, c叩c function c嘆n l畉i khai b叩o private.
  • 18. 5. M担 h狸nh MVC Controller: + S畛 d畛ng l畛p c董 s畛 畛 tr叩nh l畉p code. + N棚n khai b叩o interface cho c叩c controller c坦 ch畛c nng t動董ng t畛.
  • 19. 5. M担 h狸nh MVC Model: + T畉t c畉 c叩c ch畛c nng thao t叩c 畉n c湛ng m畛t d畛 li畛u (b畉ng, file, cache) ph畉i 動畛c 畉t vo c湛ng m畛t model. N畉u c坦 hm th畛c hi畛n join c叩c b畉ng, hm ny ph畉i 動畛c 畉t vo model c畛a b畉ng ch鱈nh. + Ton b畛 vi畛c thao t叩c 畉n d畛 li畛u 動畛c 畉t 畛 t畉ng ny. + C叩c thao t叩c b畛 sung v thay 畛i d畛 li畛u c滴ng 動畛c 畉t 畛 t畉ng ny.
  • 20. 5. M担 h狸nh MVC Model: + Ch炭 箪 ph畉n khai b叩o accessability kh担ng 動畛c d動 th畛a. + S畛 d畛ng l畛p c董 s畛 畛 tr叩nh l畉p code. + N棚n khai b叩o interface cho c叩c model c坦 ch畛c nng t動董ng t畛.
  • 21. 5. M担 h狸nh MVC View: + S畛 d畛ng helper 畛 generate code html. + N畉u c畉n code logic tr棚n view, c畉n ph畉i x但y d畛ng th棚m helper, kh担ng vi畉t code logic ph畛c t畉p ngay tr棚n view. + 畛i v畛i c叩c action d湛ng ajax, n棚n s畛 d畛ng data type l html v t畉o file view 畛 d畛 qu畉n l鱈.