SlideShare a Scribd company logo
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
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


              '
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


              '

                            '       '

              '        !"                +,        ,-


                            '       '
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
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
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
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   '
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     '
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
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
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        *
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.
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®.
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

More Related Content

Viewers also liked

Listado de inscripciones reunión nº 1 13 03-16
Listado de inscripciones reunión nº 1  13 03-16Listado de inscripciones reunión nº 1  13 03-16
Listado de inscripciones reunión nº 1 13 03-16
UTTA OSPAT
 
Rejection Spinning Your Gaps
Rejection   Spinning Your GapsRejection   Spinning Your Gaps
Rejection Spinning Your GapsAuntMyra
 
2008 Anglers Catalog
2008 Anglers Catalog2008 Anglers Catalog
2008 Anglers Catalogflyfish49
 
CSS Best Practices
CSS Best PracticesCSS Best Practices
CSS Best Practices
Francesco Schwarz
 
Electrospn 11 molnar-full
Electrospn 11 molnar-fullElectrospn 11 molnar-full
Electrospn 11 molnar-fullmiroli
 
Electrospn 3 clerck-full
Electrospn 3 clerck-fullElectrospn 3 clerck-full
Electrospn 3 clerck-fullmiroli
 
1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur
1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur
1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gurUniversity of Nusa Cendana
 
Power of Networks by Steffan Aquarone
Power of Networks by Steffan AquaronePower of Networks by Steffan Aquarone
Power of Networks by Steffan Aquarone
Steffan Aquarone
 
1943–1944-es magyar labdarúgó-bajnoks...
1943–1944-es magyar labdarúgó-bajnoks...1943–1944-es magyar labdarúgó-bajnoks...
1943–1944-es magyar labdarúgó-bajnoks...karesz57
 
初鄉親職講綱100.05.04正確
初鄉親職講綱100.05.04正確初鄉親職講綱100.05.04正確
初鄉親職講綱100.05.04正確Kuo-Yi Chen
 
инструкция по работе с клубными картами 01.09.06
инструкция по работе с клубными картами 01.09.06инструкция по работе с клубными картами 01.09.06
инструкция по работе с клубными картами 01.09.06Sokirianskiy&Lazerson School
 
Coğrafi bölgeler
Coğrafi bölgelerCoğrafi bölgeler
Coğrafi bölgeleraybars
 
1.пирожки жареные с капустой
1.пирожки жареные с капустой1.пирожки жареные с капустой
1.пирожки жареные с капустойSokirianskiy&Lazerson School
 
Introduction to PowerShell
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
Salaudeen Rajack
 
Thankful Journal- Miles
Thankful Journal- MilesThankful Journal- Miles
Thankful Journal- Milesmicklethwait
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어Jong Pil Won
 

Viewers also liked (20)

Listado de inscripciones reunión nº 1 13 03-16
Listado de inscripciones reunión nº 1  13 03-16Listado de inscripciones reunión nº 1  13 03-16
Listado de inscripciones reunión nº 1 13 03-16
 
6.беляши
6.беляши6.беляши
6.беляши
 
Rejection Spinning Your Gaps
Rejection   Spinning Your GapsRejection   Spinning Your Gaps
Rejection Spinning Your Gaps
 
Web Visions
Web VisionsWeb Visions
Web Visions
 
2008 Anglers Catalog
2008 Anglers Catalog2008 Anglers Catalog
2008 Anglers Catalog
 
CSS Best Practices
CSS Best PracticesCSS Best Practices
CSS Best Practices
 
Electrospn 11 molnar-full
Electrospn 11 molnar-fullElectrospn 11 molnar-full
Electrospn 11 molnar-full
 
Electrospn 3 clerck-full
Electrospn 3 clerck-fullElectrospn 3 clerck-full
Electrospn 3 clerck-full
 
1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur
1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur
1 kepemimpinan, supervisi ks, dan budaya organisasi thd kinerja gur
 
Violet thankful
Violet thankfulViolet thankful
Violet thankful
 
Power of Networks by Steffan Aquarone
Power of Networks by Steffan AquaronePower of Networks by Steffan Aquarone
Power of Networks by Steffan Aquarone
 
1943–1944-es magyar labdarúgó-bajnoks...
1943–1944-es magyar labdarúgó-bajnoks...1943–1944-es magyar labdarúgó-bajnoks...
1943–1944-es magyar labdarúgó-bajnoks...
 
初鄉親職講綱100.05.04正確
初鄉親職講綱100.05.04正確初鄉親職講綱100.05.04正確
初鄉親職講綱100.05.04正確
 
Jackson thankful
Jackson thankfulJackson thankful
Jackson thankful
 
инструкция по работе с клубными картами 01.09.06
инструкция по работе с клубными картами 01.09.06инструкция по работе с клубными картами 01.09.06
инструкция по работе с клубными картами 01.09.06
 
Coğrafi bölgeler
Coğrafi bölgelerCoğrafi bölgeler
Coğrafi bölgeler
 
1.пирожки жареные с капустой
1.пирожки жареные с капустой1.пирожки жареные с капустой
1.пирожки жареные с капустой
 
Introduction to PowerShell
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
 
Thankful Journal- Miles
Thankful Journal- MilesThankful Journal- Miles
Thankful Journal- Miles
 
[2011 05 21] 4장 제어
[2011 05 21] 4장 제어[2011 05 21] 4장 제어
[2011 05 21] 4장 제어
 

Similar to Os php-7oohabits

Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Trần Thiên Đại
 
Pháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAY
Pháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAYPháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAY
Pháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAY
Dịch vụ viết bài trọn gói ZALO 0917193864
 
Trai nghiem nguoi dung ux
Trai nghiem nguoi dung uxTrai nghiem nguoi dung ux
Trai nghiem nguoi dung ux
Đặng Jiang
 
101 ý tưởng giáo viên sáng tạo
101 ý tưởng giáo viên sáng tạo101 ý tưởng giáo viên sáng tạo
101 ý tưởng giáo viên sáng tạo
Quảng Văn Hải
 
Master 2 doing l2 oom (vietnamese)
 Master 2   doing l2 oom (vietnamese) Master 2   doing l2 oom (vietnamese)
Master 2 doing l2 oom (vietnamese)Tùng Kinh Bắc
 
[1]he thong thong tin quan ly th s_nguyenanhhao
[1]he thong thong tin quan ly th s_nguyenanhhao[1]he thong thong tin quan ly th s_nguyenanhhao
[1]he thong thong tin quan ly th s_nguyenanhhaoBichtram Nguyen
 
Chiết lọc thông tin pháp luật trong dữ liệu văn bản.pdf
Chiết lọc thông tin pháp luật trong dữ liệu văn bản.pdfChiết lọc thông tin pháp luật trong dữ liệu văn bản.pdf
Chiết lọc thông tin pháp luật trong dữ liệu văn bản.pdf
TieuNgocLy
 
Java Core (Vietnamese)
Java Core (Vietnamese)Java Core (Vietnamese)
Java Core (Vietnamese)
Đông Lương
 
Android program 6167
Android program 6167Android program 6167
Android program 6167
PhongSPKT
 
Nhập môn công tác kỹ sư
Nhập môn công tác kỹ sưNhập môn công tác kỹ sư
Nhập môn công tác kỹ sư
baran19901990
 
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Brand Xanh
 
HƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEO
HƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEOHƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEO
HƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEO
Nguyễn Quang Sang Digital
 
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Digital Marketing
 
Giai thuat di truyen giai bai toan mang quang chiu loi da tang
Giai thuat di truyen giai bai toan mang quang chiu loi da tangGiai thuat di truyen giai bai toan mang quang chiu loi da tang
Giai thuat di truyen giai bai toan mang quang chiu loi da tang
NGUYEN VAN LUONG
 
Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]
Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]
Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]
CHRIS NGO
 
Modem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdf
Modem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdfModem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdf
Modem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdf
Man_Ebook
 
Marketing research ngo minh tam chapter 3
Marketing research ngo minh tam chapter 3Marketing research ngo minh tam chapter 3
Marketing research ngo minh tam chapter 3Tống Bảo Hoàng
 

Similar to Os php-7oohabits (20)

Os php-5.3new1
Os php-5.3new1Os php-5.3new1
Os php-5.3new1
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)
 
Pháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAY
Pháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAYPháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAY
Pháp luật về bảo vệ quyền lợi người tiêu dùng về dược phẩm, HAY
 
Trai nghiem nguoi dung ux
Trai nghiem nguoi dung uxTrai nghiem nguoi dung ux
Trai nghiem nguoi dung ux
 
101 ý tưởng giáo viên sáng tạo
101 ý tưởng giáo viên sáng tạo101 ý tưởng giáo viên sáng tạo
101 ý tưởng giáo viên sáng tạo
 
Quan ly bo nho
Quan ly bo nhoQuan ly bo nho
Quan ly bo nho
 
Master 2 doing l2 oom (vietnamese)
 Master 2   doing l2 oom (vietnamese) Master 2   doing l2 oom (vietnamese)
Master 2 doing l2 oom (vietnamese)
 
[1]he thong thong tin quan ly th s_nguyenanhhao
[1]he thong thong tin quan ly th s_nguyenanhhao[1]he thong thong tin quan ly th s_nguyenanhhao
[1]he thong thong tin quan ly th s_nguyenanhhao
 
Chiết lọc thông tin pháp luật trong dữ liệu văn bản.pdf
Chiết lọc thông tin pháp luật trong dữ liệu văn bản.pdfChiết lọc thông tin pháp luật trong dữ liệu văn bản.pdf
Chiết lọc thông tin pháp luật trong dữ liệu văn bản.pdf
 
Java Core (Vietnamese)
Java Core (Vietnamese)Java Core (Vietnamese)
Java Core (Vietnamese)
 
Android program 6167
Android program 6167Android program 6167
Android program 6167
 
Nhập môn công tác kỹ sư
Nhập môn công tác kỹ sưNhập môn công tác kỹ sư
Nhập môn công tác kỹ sư
 
Ky nang thuong luong
Ky nang thuong luongKy nang thuong luong
Ky nang thuong luong
 
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
 
HƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEO
HƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEOHƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEO
HƯỚNG DẪN XÂY DỰNG LIÊN KẾT BACKLINK CHUYÊN NGHIỆP CHO NGƯỜI LÀM SEO
 
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
Hướng dẫn link building – Xây dựng liên kết Seo dành cho người mới bắt đầu.
 
Giai thuat di truyen giai bai toan mang quang chiu loi da tang
Giai thuat di truyen giai bai toan mang quang chiu loi da tangGiai thuat di truyen giai bai toan mang quang chiu loi da tang
Giai thuat di truyen giai bai toan mang quang chiu loi da tang
 
Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]
Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]
Kỹ năng quản lý nhà hàng cấp độ 2 [MOD2]
 
Modem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdf
Modem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdfModem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdf
Modem truyền số liệu - Nguyễn Hồng Sơn, Hoàng Đức Hải, 2005.pdf
 
Marketing research ngo minh tam chapter 3
Marketing research ngo minh tam chapter 3Marketing research ngo minh tam chapter 3
Marketing research ngo minh tam chapter 3
 

More from Giang Nguyễn

Php can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.comPhp can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.comGiang Nguyễn
 
Lap trinh web dong voi php my sql
Lap trinh web dong voi php my sqlLap trinh web dong voi php my sql
Lap trinh web dong voi php my sqlGiang Nguyễn
 
Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01Giang Nguyễn
 
Hay php architect eav modeling
Hay php architect   eav modelingHay php architect   eav modeling
Hay php architect eav modelingGiang Nguyễn
 
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dongHaiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dongGiang Nguyễn
 
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysqlHaiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysqlGiang Nguyễn
 
Haiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlHaiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlGiang Nguyễn
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Giang Nguyễn
 
Canbanvethietkevalaptrinhgame
CanbanvethietkevalaptrinhgameCanbanvethietkevalaptrinhgame
CanbanvethietkevalaptrinhgameGiang Nguyễn
 
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menuBuilding websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menuGiang Nguyễn
 
Eclipse pdt indigo release review
Eclipse pdt   indigo release reviewEclipse pdt   indigo release review
Eclipse pdt indigo release reviewGiang Nguyễn
 
Bai tap lap trinh web voi joomla csau
Bai tap   lap trinh web voi joomla csauBai tap   lap trinh web voi joomla csau
Bai tap lap trinh web voi joomla csauGiang Nguyễn
 

More from Giang Nguyễn (20)

Php can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.comPhp can ban_bai1_laptrinhwebphp.com
Php can ban_bai1_laptrinhwebphp.com
 
Os xmldomphp
Os xmldomphpOs xmldomphp
Os xmldomphp
 
Lap trinh web dong voi php my sql
Lap trinh web dong voi php my sqlLap trinh web dong voi php my sql
Lap trinh web dong voi php my sql
 
Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01Kentcources 110109221507-phpapp01
Kentcources 110109221507-phpapp01
 
Php day4
Php day4Php day4
Php day4
 
Hay php architect eav modeling
Hay php architect   eav modelingHay php architect   eav modeling
Hay php architect eav modeling
 
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dongHaiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
Haiphongit.com.tai lieu-php.my sql-thiet-ke-web-dong
 
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysqlHaiphongit.com.tai lieu-laptrinh ph-pvamysql
Haiphongit.com.tai lieu-laptrinh ph-pvamysql
 
Chuong07 php
Chuong07 phpChuong07 php
Chuong07 php
 
Bai th08 php voi csdl
Bai th08 php voi csdlBai th08 php voi csdl
Bai th08 php voi csdl
 
Haiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlHaiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sql
 
Hd lap pttkht2008
Hd lap pttkht2008Hd lap pttkht2008
Hd lap pttkht2008
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206
 
Canbanvethietkevalaptrinhgame
CanbanvethietkevalaptrinhgameCanbanvethietkevalaptrinhgame
Canbanvethietkevalaptrinhgame
 
C1
C1C1
C1
 
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menuBuilding websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
Building websites-with-joomla-1-5-sample-chapter-chapter-7-the-menus-menu
 
Eclipse pdt indigo release review
Eclipse pdt   indigo release reviewEclipse pdt   indigo release review
Eclipse pdt indigo release review
 
Bai tap lap trinh web voi joomla csau
Bai tap   lap trinh web voi joomla csauBai tap   lap trinh web voi joomla csau
Bai tap lap trinh web voi joomla csau
 
Analyse
AnalyseAnalyse
Analyse
 
Bai1
Bai1Bai1
Bai1
 

Os php-7oohabits

  • 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