BY
YAOUNDE – CAMEROON 3-5 NOVEMBER 2013
ALANGEH ROMANUS CHE
1ST VICE PRESIDENT OF CNOP-CAM
E-MAIL: cnopcameroun@yahoo.fr
E-mail: alabongalazebong@yahoo.com
BY
YAOUNDE – CAMEROON 3-5 NOVEMBER 2013
ALANGEH ROMANUS CHE
1ST VICE PRESIDENT OF CNOP-CAM
E-MAIL: cnopcameroun@yahoo.fr
E-mail: alabongalazebong@yahoo.com
Here are some slides from a seminar I did recently on the power of networks. It was aimed at people's individual personal development but exactly the same approach applies to company business development and you are selling yourself for a large part of the process before you get on to talking about whatever you're going to do for someone.
Here are some slides from a seminar I did recently on the power of networks. It was aimed at people's individual personal development but exactly the same approach applies to company business development and you are selling yourself for a large part of the process before you get on to talking about whatever you're going to do for someone.
Nhận viết luận văn Đại học , thạc sĩ - Zalo: 0917.193.864
Tham khảo bảng giá dịch vụ viết bài tại: vietbaocaothuctap.net
Download luận văn thạc sĩ ngành luật kinh tế với đề tài: Pháp luật về bảo vệ quyền lợi người tiêu dùng trong lĩnh vực dược phẩm tại tỉnh Quảng Ngãi, cho các bạn làm luận văn tham khảo
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 chu'n 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 c'n
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 c'n 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 ph'm (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 chu'n
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 ph'm 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 ph'm 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 ph'm IBM, và nh n các s n ph'm 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 ph'm 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