Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Os php-7oohabits

561 views

Published on

  • Be the first to comment

  • Be the first to like this

Os php-7oohabits

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×