Your SlideShare is downloading. ×
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Os php-7oohabits
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Os php-7oohabits

330

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
330
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 1 of 14 Xây d ng b y thói quen t t v h ng it ng trong PHP M c : Trung bình Nathan A. Good, K s tr ng, t v n, Freelance Developer 13 06 2009 V i các c tính c a ngôn ng h ng i t ng (OO) c a PHP, n u b n còn ch a t o ra các ng d ng c a b n v i các nguyên t c OO (object-oriented) trong tâm trí, thì b y thói quen này s giúp b n b t u quá trình chuy n ti p gi a l p trình th t c và l p trình h ng i t ng. Trong nh ng ngày u c a l p trình PHP, mã PHP ã b gi i h n là ngôn ng theo th t c v b n ch t. Mã theo th t c (Procedural code) mô t cách s d ng các th t c cho các kh i xây d ng c a ng d ng. Các th t c cung c p m t m c tái s d ng nh t nh khi cho phép các th t c c g i b i các th t c khác. Tuy nhiên, dù không có các k t c u c a ngôn ng h ng i t ng, m t l p trình viên v n có th a thêm các c tr ng OO vào trong mã PHP. S có m t chút khó kh n h n và có th làm cho mã khó c h n b i vì nó pha tr n các m u (ngôn ng theo th t c v i thi t k OO gi ). Các k t c u OO trong mã PHP — nh là kh n ng nh ngh a và s d ng các l p, kh n ng xây d ng các m i quan h gi a các l p có s d ng quy n th!a k và kh n ng nh ngh a các giao di n — s làm cho vi c xây d ng mã tuân th các thói quen th c hành OO t t d" dàng h n nhi u. Trong khi các thi t k theo th t c thu n túy không có nhi u tính mô un v n ch y t t, các l i th c a thi t k OO s xu t hi n trong khâu b o trì. B i vì m t ng d ng i n hình s dành r t nhi u th#i gian s ng c a nó cho vi c b o trì, b o trì mã có chi phí r t cao trong su t cu c #i c a m t ng d ng. Nó c$ng có th d" dàng b b% quên trong lúc phát tri n. N u b n ang trong m t cu c ua làm cho ng d ng c a b n c phát tri n và tri n khai, tính d" b o trì v dài h n có th t m lùi xu ng gh sau, hãy cho m t cái gì ó b t u ho t ng ã. Tính mô un (Modularity) — m t trong nh ng c tr ng then ch t c a thi t k OO t t — giúp cho vi c b o trì này. Tính mô un giúp bao gói các thay &i, s làm cho m r ng và s a &i ng d ng theo th#i gian d" dàng h n. Trong khi có nhi u h n b y thói quen xây d ng ph n m m OO v t&ng th , b y thói quen sau ây là nh ng gì b n c n làm cho mã c a b n phù h p v i các tiêu chun thi t k OO c b n. Chúng cho b n m t n n t ng v ng ch c nh# ó b n có th b& sung thêm các thói quen OO và xây d ng ph n m m d" dàng c b o trì và c m r ng. Các thói quen nh m t i m t s trong các c tr ng then ch t c a tính mô un. ( bi t thêm thông tin v l i ích c a thi t k OO, c l p v i ngôn ng , xem Tài nguyên. B y thói quen t t v OO trong PHP là: 1. Hãy khiêm t n. 2. Hãy là m t láng gi ng t t. 3. Tránh nhìn vào Medusa. 4. Gi v ng nguyên t c liên k t y u nh t. 5. B n là cao su, tôi là keo dán. 6. Duy trì m t gia ình. 7. Ngh n các m u. Hãy khiêm t n Hãy khiêm t n là tránh t tr ng mình ra trong tri n khai th c hi n các l p và các hàm c a b n. Vi c che gi u thông tin là m t thói quen c b n. B n s có m t th#i gian khó kh n xây d ng b t k) các thói quen nào khác, cho n khi b n ã t p c thói quen che gi u các chi ti t tri n khai th c hi n c a b n. Che
  • 2. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 2 of 14 gi u thông tin c$ng c g i là s bao gói (encapsulation). Có r t nhi u lý do t i sao tr c ti p l ra các tr #ng công c ng là m t thói quen x u. (i u quan tr ng nh t trong s ó là nó không l i cho b n m t tùy ch n nào n u m t cái gì ó trong tri n khai th c hi n c a b n thay &i. B n s d ng các khái ni m OO cô l p s thay &i và vi c bao gói óng m t vai trò không th thi u c trong vi c b o m r*ng b t k) s thay &i nào mà b n th c hi n không ph i là m t ki u virút trong t nhiên. Nh ng thay &i ki u Virút là nh ng thay &i b t u là nh% — gi ng nh vi c thay &i m t m ng ch a ba ph n t thành ch+ ch a có hai. ( t nhiên, b n nh n th y r*ng b n ang thay &i càng ngày càng nhi u mã c a b n thích nghi v i m t thay &i l ra là không áng k . M t cách n gi n b t u che gi u thông tin c a b n là gi các tr #ng riêng t (private) và ch+ l chúng thông qua các hàm truy c p công c ng, gi ng nh các c a s& trong nhà b n. Thay vì có toàn b c m t b c t #ng m toang ra bên ngoài, thì b n ch+ có m t ho c hai c a s&. (Tôi nói thêm v hàm truy c p công c ng trong "Thói quen t t: S d ng hàm truy c p công c ng"). Ngoài vi c cho phép các tri n khai th c hi n c a b n di"n ra sau b c màn i v i các thay &i, vi c s d ng nh ng hàm truy c p công c ng thay vì tr c ti p l các tr #ng cho phép b n xây d ng thêm d a trên tri n khai th c hi n n n t ng c a b n b*ng cách è lên (overriding) tri n khai th c hi n c a m t hàm truy c p làm m t cái gì ó h i khác v i hành vi ng x c a cha m,. Nó c$ng cho phép b n xây d ng m t tri n khai th c hi n tr!u t ng (abstract) trì hoãn vi c tri n khai th c hi n th c t các l p è lên n n t ng ã có. Thói quen x u: l các tr ng công c ng Trong ví d mã x u trong Li t kê 1, các tr #ng c a các i t ng Person c l ra tr c ti p nh là các tr #ng công c ng thay vì qua các hàm truy c p. Trong khi hành vi này r t cám d-, c bi t là cho các i t ng d li u ít quan tr ng, thì nó l i h n ch b n. Li t kê 1. Thói quen x u v vi c l các tr ng công c ng !" #$ %# !" #& # !" !" " N u có b t k) i u gì thay &i v i m t i t ng, b t k) mã nào s d ng nó c$ng c n ph i thay &i theo. Ví d , n u h , tên, tên m c a m t ng #i ã c bao b c trong m t i t ng PersonName, b n s c n ph i s a &i t t c các mã c a b n cho phù h p v i s thay &i ó. Thói quen t t: S d ng các hàm truy c p công c ng B*ng cách s d ng các thói quen OO t t (xem Li t kê 2), cùng m t i t ng bây gi# có các tr #ng riêng t thay cho các tr #ng công c ng và các tr #ng riêng t c tr ng ra m t cách th n tr ng v i th gi i bên ngoài b*ng các ph ng th c get và set công c ng, c g i là nh ng hàm truy c p (accessors). Nh ng hàm truy c p bây gi# cung c p m t cách công c ng nh n thông tin t! l p PHP c a b n sao cho n u có thay &i gì trong các tri n khai th c hi n c a b n, thì ít có kh n ng là b n c n ph i thay &i t t c các mã ã s d ng l p y. Li t kê 2. Thói quen t t s d ng nh ng hàm truy c p công c ng
  • 3. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 3 of 14 !" !" ( !" ( !" ) !" ) !" * !" * !" #$ %# !" ( #& # !" !" ( " Tho t nhìn i u này có v. s thêm nhi u công vi c h n và có th th c s là nhi u vi c h n m t tr c. Tuy nhiên, th #ng vi c áp d ng thói quen OO t t s c n bù l i trong lâu dài v sau, b i vì các thay &i trong t ng lai c c ng c ch c ch n. Trong phiên b n mã c hi n th trong Li t kê 3, tôi ã thay &i vi c tri n khai th c hi n bên trong s d ng m t m ng k t h p cho các ph n c a tên. Lý t ng ra, ph i có nhi u x lý l-i h n và ki m tra cn th n h n xem ph n t ó có t/n t i không, nh ng m c ích c a ví d này là cho th y làm th nào các mã s d ng l p c a tôi không c n ph i thay &i — th t h nh phúc là nó không bi t c v s thay &i l p c a tôi. Hãy nh r*ng lý do ch p nh n các thói quen OO là bao gói cn th n các thay &i cho mã c a b n có kh n ng m r ng h n và d" b o trì h n. Li t kê 3. M t s a i khác theo thói quen t t này v i vi c tri n khai th c hi n bên trong khác i !" +, ,-
  • 4. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 4 of 14 !" +, ,- ( !" +, ,- ( !" +, ,- ./ %%% /. ./ / 0 12 1 / % 3 1 % /. !" #$ %# !" ( #& # !" !" ( " Hãy là m t láng gi ng t t Khi b n xây d ng m t l p, nó c n x lý l-i riêng c a mình m t cách thích h p. N u l p không bi t làm th nào x lý các l-i, nó c n gói chúng theo m t nh d ng mà ng #i g i nó hi u c. Ngoài ra, tránh tr v các i t ng không t/n t i (null) hay trong tr ng thái không h p l . Nhi u tr #ng h p, b n có th làm i u này n gi n b*ng cách ki m tra các i s và a ra các ngo i l c th nói lý do t i sao các is c cung c p không h p l . Khi b n xây d ng thói quen này, nó có th ti t ki m cho b n — và nh ng ng #i ang b o trì mã c a b n ho c ang s d ng các i t ng c a b n — r t nhi u th#i gian. Thói quen x u: Không x lý các l i Xem xét ví d hi n th trong Li t kê 4, trong ó ch p nh n m t s i s và tr v m t i t ng Person v i m t s các giá tr ã c i n vào. Tuy nhiên, trong ph ng th c parsePersonName() không có xác nh n h p l xem li u bi n $val c cung c p là b*ng null, là m t chu-i ký t có chi u dài b*ng không hay là m t chu-i ký t mà khuôn d ng sai, không phân gi i c. Ph ng th c parsePersonName () không tr v m t i t ng Person mà tr v null. Các qu n tr viên ho c các l p trình viên s d ng ph ng th c này có th ph i vò u b t tai và — ít nh t c$ng là — i n ch- ph i b t u thi t l p các i m ng t và g0 r i k ch b n l nh PHP. Li t kê 4. Thói quen x u không a ra hay không x lý các l i 4 2 #2#2 " 5 #2#2 .. 6 2 !" ( +7- !" ) +5- Ph ng th c parsePersonName() trong Li t kê 4 có th c s a &i kh i t o i t ng Person bên ngoài i u ki n if, khi m b o r*ng b n luôn luôn nh n m t i t ng Person h p l . Tuy nhiên, b n s nh n c m t Person mà các thu c tính còn ch a c thi t l p, i u này c$ng không a b n n m t
  • 5. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 5 of 14 v trí t t h n. Thói quen t t: M i mô un x lý các l i riêng c a nó Thay vì m c cho ng #i g i l p c a b n ph%ng oán, hãy ch ng ki m tra tính h p l c a các i s . N u m t bi n ch a thi t l p không th t o ra m t k t qu h p l , hãy ki m tra bi n và a ra m t InvalidArgumentException. N u chu-i ký t không th tr ng r-ng ho c ph i có m t nh d ng c th , hãy ki m tra nh d ng và a ra m t ngo i l . Li t kê 5 bi u th làm th nào t o ra các ngo i l c a riêng b n, c$ng nh m t s i u ki n m i trong ph ng th c parsePerson() gi i thích m t s các xác nh n h p l ban u. Li t kê 5. Thói quen t t a thêm các báo l i 8 1 ) 0 1 9 0 4 2 : 8 1 ) 0 #8 1 %# : ;; 5 8 16 0 #$ ! %# " Dòng d i áy là cái mà b n mu n m i ng #i có th s d ng l p c a b n mà không ph i bi t các ho t ng bên trong c a nó. N u h s d ng nó không úng ho c theo cách mà b n ã không d nh, h không ph i ph%ng oán lý do t i sao nó không ho t ng. V i t cách là m t láng gi ng t t, b n hi u r*ng m i ng #i s d ng l i l p c a b n mà không ph i là các th y bói và do ó b n nên lo i b% vi c ph%ng oán ó. Tránh nhìn vào Medusa Khi tôi l n u tiên h c v các khái ni m OO, tôi ã nghi ng# r*ng các giao di n là th c s có ích hay không. M t /ng nghi p c a tôi ã nêu ra phép so sánh vi c không s d ng các giao di n gi ng nh ang nhìn vào cái u c a Medusa. Trong th n tho i Hy L p, Medusa là m t qu1 cái có b tóc là nh ng con r n. B t k) ng #i nào mà nhìn th2ng vào nó s bi n thành á. Perseus, ng #i ã gi t Medusa, ã có th i phó v i con qu1 b*ng cách nhìn vào hình nh ph n chi u c a nó trong cái khiên c a anh, vì v y không b bi n thành á. Giao di n là t m g ng c a b n i phó v i Medusa. Khi b n s d ng m t tri n khai th c hi n c th , rõ ràng, mã c a b n ph i thay &i n u mã tri n khai th c hi n c a b n thay &i. Vi c s d ng tr c ti p các tri n khai th c hi n s h n ch các tùy ch n c a b n, gi ng nh b n ã bi n các l p c a b n thành á. Thói quen x u: Không s d ng các giao di n Li t kê 6 hi n th m t ví d n p i t ng Person t! m t c s d li u. Nó nh n tên person và tr v i t ng Person phù h p l y t! c s d li u. Li t kê 6. Thói quen x u không s d ng các giao di n <= 1 2
  • 6. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 6 of 14 ./ 1 2 %%% /. !" #$ %# !" ( #& # ./ 8 1 1 %%% /. 1 <= 1 1 !" #& #2 #< # !" !" ( " Mã n p Person t! c s d li u là t t cho n khi có m t s i u gì ó thay &i trong môi tr #ng. Ví d , n p Person t! c s d li u có th là t t cho phiên b n u tiên c a ng d ng, nh ng i v i phiên b n th hai, b n có th c n ph i thêm các kh n ng n p person t! m t d ch v web. V b n ch t, l p ã bi n thành á vì nó ang tr c ti p s d ng l p tri n khai th c hi n và bây gi# r t d" h%ng n u thay &i. Thói quen t t: S d ng các giao di n Li t kê 7 cho th y m t ví d v mã mà s không thay &i khi m t cách n p m i tr thành s3n có cho ng #i s d ng và c tri n khai th c hi n. Ví d cho th y m t giao di n c g i là PersonProvider, có khai báo ch+ m t ph ng th c. N u mã b t k) s d ng PersonProvider, thì mã ó s b ng n c n không c s d ng tr c ti p các l p tri n khai th c hi n. Thay vào ó, nó s d ng PersonProvider gi ng nh ó là m t i t ng th c s . Li t kê 7. Thói quen t t v s d ng các giao di n 1 2 <= 1 1 2 ./ 1 1 2 %%% /. !" #$ %# !" ( #& # 1 ) 1 ,1 , <= 1 1 ,1 , ./ 8 1 1 %%% /. 1 1 ) >> 1 1 !" #& #2 #< # !" !" ( " Khi b n s d ng các giao di n, c g ng tránh tham chi u tr c ti p n các l p tri n khai th c hi n. Thay vào ó, hãy s d ng m t cái gì ó bên ngoài i t ng c a b n cung c p cho b n vi c tri n khai th c hi n úng. N u l p c a b n n p vi c tri n khai th c hi n d a trên m t s logic, nó v n c n yêu c u các
  • 7. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 7 of 14 nh ngh a c a t t c các l p tri n khai th c hi n và i u này s không a b n ti n thêm bao nhiêu. B n có th s d ng m t m u nhà máy (Factory) t o ra m t cá th c a m t l p tri n khai th c hi n giao di n c a b n. M t ph ng th c factory, theo quy c, b t u b*ng vi c t o và tr v m t giao di n. Nó có th nh n b t k) i s nào c n thi t cho ph ng th c factory c a b n tìm ra l p tri n khai th c hi n nào là m t l p úng tr v . Trong Li t kê 7, ph ng th c createProvider() n gi n ch+ dùng m t bi n $type. N u $type c thi t l p là c s d li u, ph ng th c database, s tr v m t cá th c a DBPersonProvider. B t k) vi c tri n khai th c hi n m i n p nhi u Person t! m t kho l u tr không c n b t k) s thay &i nào trong l p có s d ng ph ng th c Factory và giao di n. DBPersonProvider th c hi n giao di n PersonProvider và có tri n khai th c hi n th c t ph ng th c getPerson() bên trong nó. Gi v ng nguyên t c liên k t y u nh t L p ghép l ng các mô un c a b n là m t vi c t t; nó là m t trong các tính ch t cho phép b n óng gói s thay &i. Hai trong s các thói quen khác — "Hãy khiêm t n" và "Tránh nhìn vào Medusa" — giúp b n làm vi c theo h ng xây d ng các mô un c l p ghép l%ng. ( l p ghép l%ng các l p c a b n, hãy phát tri n c tính cu i cùng b*ng cách xây d ng thói quen v vi c làm gi m s ph thu c gi a các l p c a b n. Thói quen x u: L p ghép ch t Trong Li t kê 8, vi c làm gi m s ph thu c không nh t thi t là làm gi m các s ph thu c i v i trình khách s d ng m t i t ng. Thay vào ó, ví d minh ho vi c làm gi m các s ph thu c vào m t l p chính xác và t i thi u s ph thu c này i v i các l p khác. Li t kê 8. Thói quen x u v l p ghép ch t t it ng Address ? @ #%.611 ) % # 611 11 9 7 11 9 A .. %%% B 1 611 9 7 7 !" 11 9 7 7 ./ 2 %%% /. B !" # # 8 611 ) # # $ 611 ) 611 ) !" !" 611 9 7 2 !" 611 9 A 2 !" B 2 !" * 2 !" B 1 2 !" B
  • 8. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 8 of 14 11 611 11 !" 611 9 7 #7AC 6 *%# 11 !" 611 9 A #* A55# 11 !" B #6 # 11 !" * #6D# 11 !" B 1 #EEEEE!5555# 11 !" B #4*# 11 !" # # #F # 11 !" # # #F # " (o n mã g i ph ng th c format() c a m t i t ng Address có th trông r t n t ng — t t c m i vi c mà nó làm là s d ng l p Address, g i ph ng th c format(), và th là xong. Ng c l i, l p Address không may m n nh v y. Nó c n ph i bi t nhi u trình nh d ng (formatters) khác nhau cs d ng nh d ng úng. (i u này có th làm cho i t ng Address không có kh n ng s d ng l i v i nh ng ng #i khác, c bi t là n u m t ng #i nào khác không quan tâm n vi c s d ng các l p c a trình nh d ng trong ph ng th c format(). M c dù mã ang s d ng Address hi n không có nhi u s ph thu c, nh ng l p Address l i có m t s ph thu c, trong khi nó l ra ch+ là m t i t ng d li u n gi n. L p Address c l p ghép ch t v i các l p tri n khai th c hi n bi t cách làm th nào nh d ng m t i t ng Address. Thói quen t t: L p ghép l ng gi a các it ng Khi xây d ng các thi t k OO t t, c n suy ngh v m t khái ni m g i là Phân tách các m i quan tâm (Separation of Concerns-SoC). SoC có ngh a là b n c g ng phân tách các i t ng theo cái mà chúng th c s dính líu n, do ó, làm l%ng vi c l p ghép. Trong l p Address ban u, nó ã ph i quan tâm n vi c làm th nào nh d ng chính nó. (i u ó có l không ph i là m t thi t k t t. Thay vào ó, m t l p Address c n lo l ng v các ph n c a Address, trong khi m t s ki u trình nh d ng lo l ng v vi c làm th nào nh d ng úng các a ch+. Trong Li t kê 9, mã nh d ng a ch+ c di chuy n n các giao di n, các l p tri n khai th c hi n và m t nhà máy (factory) — hãy nh xây d ng thói quen "s d ng các giao di n". Bây gi#, l p AddressFormatUtils có trách nhi m t o ra m t trình nh d ng và nh d ng m t Address. B t k) i t ng khác nào bây gi# có th s d ng m t Address mà không c n ph i lo l ng v vi c ph i có c nh ngh a v các trình nh d ng. Li t kê 9. Thói quen t t v l p ghép l ng gi a các it ng 611 ) 11 9 72 11 9 A2 2 2 B 1 2 $ 9 611 ) 611 ) 11 9 72 11 9 A2 2 2 B 1 2 #G F G F G 2 G G F G #2 11 9 72 11 9 A2 2 2 B 1 2 8 611 ) 611 ) 11 9 72 11 9 A2 2 2 B 1 2 #G G 2 G 2 G G G #2 11 9 72 11 9 A2 2 2 B 1 2
  • 9. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 9 of 14 611 ) 4 611 2 11 611 ) 4 >> 611 ) !" 11 !" 611 9 7 2 11 !" 611 9 A 2 11 !" B 2 11 !" * 2 11 !" B 1 2 11 !" B 611 ) # # 8 611 ) # # $ 611 ) 611 ) 11 611 11 !" 611 9 7 #7AC 6 *%# 11 !" 611 9 A #* A55# 11 !" B #6 # 11 !" * #6D# 11 !" B 1 #EEEEE!5555# 11 !" B #4*# 611 ) 4 >> 611 # #2 11 #F # 611 ) 4 >> 611 # #2 11 #F # " M t h n ch , t t nhiên, là b t c khi nào s d ng các m u hình s3n, th #ng c$ng có ngh a là s l ng các t o phm (các l p, các t p tin) t ng lên. Tuy nhiên, i u này c bù p b*ng vi c gi m công s c b o trì trong m-i l p và có th c gi m nhi u h n n a n u có c kh n ng s d ng l i úng cách. B n là cao su; tôi là keo dán Các thi t k OO k t dính cao là r t t p trung và c t& ch c thành các mô un liên quan. Tìm hi u k "các m i quan tâm" là r t quan tr ng trong vi c xác nh t& ch c các hàm và các l p nh th nào k t dính ch t ch . Thói quen x u: K t dính th p Khi m t thi t k có k t dính th p, nó có các l p và các ph ng th c không c nhóm l i thích h p. Thu t ng mã spaghetti th #ng c s d ng mô t các l p và các ph ng th c c gói chung v i nhau và có k t dính th p. Li t kê 10 cung c p m t ví d v mã Spaghetti. L p t&ng quát Utils s d ng nhi u i t ng khác nhau và có r t nhi u s ph thu c. Nó làm m-i th m t tí, làm cho khó có th s d ng l i. Li t kê 10. Thói quen x u v k t dính th p 4 611 3 2 11 72 11 A2 2 # 11 # 3 2 2
  • 10. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 10 of 14 # # 611 3 2 .. 1 2 %%% 611 3 3 2 .. 1 2 %%% 3 " Thói quen t t: Gi v ng nguyên t c k t dính cao K t dính cao có ngh a là các l p và các ph ng th c có liên quan v i nhau c nhóm l i. Khi các ph ng th c và các l p có k t dính cao, b n có th d" dàng tách ra toàn b nhóm mà không nh h ng n thi t k . Các thi t k có k t dính cao t o ra c h i cho l p ghép l%ng. Li t kê 11 hi n th hai trong s các ph ng th c c t& ch c t t h n thành l p. L p AddressUtils có ch a các ph ng th c làm vi c v i các l p Address và cho th y s k t dính cao gi a các ph ng th c có liên quan n a ch+. T ng t , PersonUtils ch a các ph ng th c làm vi c riêng v i các i t ng Person. Hai l p m i này v i các ph ng th c k t dính cao c a chúng s l p ghép l%ng vì chúng có th c s d ng hoàn toàn c l p v i nhau. Li t kê 11. Thói quen t t v k t dính cao 611 4 611 3 2 11 72 11 A2 2 # 11 # 611 3 2 .. 1 2 %%% 611 4 3 2 2 # # 3 2 .. 1 2 %%% " Duy trì m t gia ình Tôi th #ng nói v i m i ng #i trong các nhóm ph n m m, mà tôi làm lãnh k thu t o hay ki n trúc s r*ng k. thù l n nh t c a các ngôn ng OO là hành ng sao chép và dán. Khi ch a có thi t k OO chun
  • 11. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 11 of 14 b tr c, không có gì . ra nhi u l n x n h n là vi c sao chép mã t! m t t p tin này vào t p khác. B t c khi nào mà b n nh sao chép mã t! m t l p này t i m t l p ti p theo, hãy d!ng l i và xem xét làm sao có th s d ng các h th ng th b c c a l p s d ng các ch c n ng t ng t hay gi ng nhau. B n s th y r*ng trong nhi u tr #ng h p, v i thi t k t t, vi c sao chép mã là hoàn toàn không c n thi t. Thói quen x u: Không s d ng h th ng th b c các l p Li t kê 12 cho th y m t ví d n gi n c a các l p b ph n. Chúng b t u v i các tr #ng và các ph ng th c gi ng h t — v lâu dài s không t t khi ng d ng có th ph i thay &i. N u có m t khi m khuy t trong l p Person có nhi u kh n ng c$ng s là m t khi m khuy t trong l p Employee vì nó xu t hi n qua tri n khai th c hi n b*ng cách sao chép gi a hai l p. Li t kê 12. Thói quen x u không s d ng các h th ng th b c 0 " Quy n th a k là m t thói quen khó b t u áp d ng vì thông th #ng, vi c phân tích xây d ng các mô hình quy n th!a k úng n có th m t nhi u th#i gian. Ng c l i, s d ng Ctrl+C và Ctrl+V xây d ng m t tri n khai th c hi n m i ch+ m t vài giây. Tuy nhiên, kho ng th#i gian này th #ng r t nhanh c bù p l i trong b o trì, n i ng d ng s th c t tr i qua h u h t ph n #i c a nó. Thói quen t t: S d ng quy n th a k Trong Li t kê 13, l p Employee m i m r ng l p Person Bây gi# nó k th!a t t c các ph ng th c chung và không tri n khai th c hi n l i chúng. Ngoài ra, Li t kê 13 cho th y vi c s d ng m t ph ng th c tr!u t ng gi i thích r*ng ch c n ng c b n có th c a vào m t l p c s và ch c n ng c th h n có th lui l i cho n khi tri n khai th c hi n m t l p. Li t kê 13. Thói quen t t v s d ng quy n th a k ( !" ( !" ) !" ) !" H #H 2 8 # !" 1 *
  • 12. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 12 of 14 1 * 0 1 I !" I !" 1 * !" I % # # % !" ( % # # % !" ) " Ngh n các m u Các m u thi t k là các t ng tác ph& bi n gi a các i t ng và các ph ng th c mà ã c th#i gian ki m ch ng là gi i quy t t t nh ng bài toán c th . Khi b n ngh v các m u hình thi t k , t c là b n ang b t bu c mình l nh h i vi c các l p t ng tác v i nhau nh th nào. (ó là m t cách d" dàng xây d ng các l p và các t ng tác c a chúng mà không m c ph i các l-i gi ng nh nh ng ng #i khác ã m c ph i trong quá kh và h ng l i t! các thi t k ã c ki m ch ng Thói quen x u: Xem xét m i l n m t it ng Th c s là không có ví d mã thích h p nào gi i thích c ngh n các m u hình là nh th nào (m c dù có nhi u ví d t t cho th y các tri n khai th c hi n theo m u hình). Tuy nhiên, nói chung, b n s bi t b n ang xem xét riêng l. t!ng i t ng m-i l n khi các d u hi u sau ây là úng: B n không v s / m t mô hình i t ng tr c ó. B n b t u vi t mã tri n khai các ph ng th c n l. mà ch a v ch ra nh ng nét g c r" c a mô hình. B n không s d ng n các tên m u hình thi t k khi nói mà úng h n là nói v tri n khai th c hi n. Thói quen t t: Thêm các it ng, m t cách hài hòa, ph i h p thành m u Nói chung, b n ã ngh n các m u khi: Mô hình hóa các l p và các t ng tác c a chúng s3n t! tr c. T o b n m u các l p (stereotype) theo các m u hình c a chúng. S d ng các tên m u, nh Factory, Singleton và Facade. V ch ra ph n l n g c r" c a mô hình, sau ó b t u thêm tri n khai th c hi n. K t lu n Xây d ng các thói quen t t OO trong PHP giúp b n xây d ng các ng d ng &n nh h n, d" b o trì h n và có kh n ng m r ng d" dàng h n. Ghi nh : Hãy khiêm t n.
  • 13. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 13 of 14 Hãy là m t láng gi ng t t. Tránh nhìn vào Medusa. Gi v ng nguyên t c liên k t y u nh t. B n là cao su, tôi là keo dán. Duy trì m t gia ình. Ngh n các m u. Khi b n ã xây d ng và có c các thói quen này, b n có th b t ng# v các thay &i v ch t l ng c a các ng d ng c a b n. Tài nguyên H ct p ( c m c Module programming trên Wikipedia. ( c nhi u h n v thi t k h ng it ng trong cu n sách c a Bertrand Meyer có tên là Object- Oriented Software Construction . Truy c p t i ph n h ng d n th c hành PHP c a trang Web PHP chính th c trên Classes and Objects. ( c v Các m u hình thi t k trong PHP trong "Five common PHP design patterns" và "Five more PHP design patterns." PHP.net là tài nguyên trung tâm cho các nhà phát tri n PHP. Xem "Danh sách khuy n khích c v PHP." Duy t qua t t c các n i dung PHP trên developerWorks. M r ng các k n ng PHP c a b n b*ng cách xem các tài nguyên d án PHP c a developerWorks c a IBM. ( nghe ph%ng v n và các cu c th o lu n thú v dành cho các nhà phát tri n ph n m m, hãy xem developerWorks podcasts. B n mu n s d ng m t c s d li u v i PHP? Xem Zend Core for IBM, m t môi tr #ng phát tri n và môi tr #ng s n su t PHP d" cài t, tr n tru, s3n có dùng ngay, có h- tr DB2 V9 c a IBM. Theo dõi sát các s ki n k thu t và webcasts c a developerWorks. Xem các h i ngh s p t i, các cu c tri n lãm th ng m i, webcasts và các s ki n khác trên kh p th gi i ang c các nhà phát tri n mã ngu/n m c a IBM quan tâm n. Truy c p vào Vùng mã ngu/n m c a developerWorks c p nh t r t nhi u d án, các công c và các thông tin h ng d n giúp b n phát tri n v i các công ngh mã ngu/n m và s d ng chúng v i các s n phm c a IBM. Theo dõi và tìm hi u v các công ngh mã ngu/n m và IBM và các ch c n ng s n phm v i các trình di"n m u theo yêu c u mi"n phí c a developerWorks. L y s n ph m và công ngh (&i m i d án phát tri n mã ngu/n m ti p theo c a b n v i ph n m m dùng th c a IBM, có s3n t i v ho c trên a DVD. T i v các phiên b n ánh giá s n phm IBM, và nh n các s n phm ph n m m trung gian và các công c phát tri n ng d ng th c hành t! DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
  • 14. Xây d ng b y thói quen t t v h ng it ng trong PHP Page 14 of 14 Th o lu n Tham gia vào developerWorks blogs và dành tâm trí cho c ng /ng developerWorks. Tham gia vào Di"n àn PHP: Phát tri n các ng d ng PHP v i s n phm qu n lý thông tin c a IBM (DB2, IDS) c a developerWorks. ôi nét v tác gi Nathan Good s ng t i vùng Twin Cities c a bang Minnesota. V chuyên môn, ông làm công vi c phát tri n ph n m m, ki n trúc ph n m m và qu n tr các h th ng. Khi ông không vi t ph n m m, ông r t thích xây d ng các máy ch và máy tính cá nhân, c và làm vi c v i các công ngh m i và c g ng khuy n khích b n bè c a mình chuy n sang ph n m m mã ngu/n m

×