Your SlideShare is downloading. ×
0
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Builder pattern
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

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

Builder pattern

409

Published on

Week 11

Week 11

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Mental Log Week 11 Builder Pattern Dinh Hoang Long Mental Log Dinh Hoang Long, Mental Log Builder Pattern 1/28
  • 2. Outline Outline Bài toán, vấn đề Builder Pattern Ý tưởng cơ bản Áp dụng vào bài toán Phân tích các thành phần trong Builder Pattern Builder Pattern trong thực tế Java: StringBuiler PHP: Zend_Db_Select Dinh Hoang Long, Mental Log Builder Pattern 2/28
  • 3. Bài toán, vấn đề Bài toán, vấn đề 1 đối tượng phức tạp được tạo ra từ nhiều thành phần nhỏ Dinh Hoang Long, Mental Log Builder Pattern 3/28
  • 4. Bài toán, vấn đề Bài toán, vấn đề 1 đối tượng phức tạp được tạo ra từ nhiều thành phần nhỏ Trong các thành phần tạo nên đối tượng, có thành phần bắt buộc và thành phần không bắt buộc Dinh Hoang Long, Mental Log Builder Pattern 3/28
  • 5. Bài toán, vấn đề User Class public class User { private String first_name ; // required private String last_name ; // required private int age ; // optional private String phone ; // optional private String address ; // optional ... } Dinh Hoang Long, Mental Log Builder Pattern 4/28
  • 6. Bài toán, vấn đề User Class Constructor: public User ( String first_name_in , String last_name_in , int age_in , String phone_in , String address_in ) { first_name = first_name_in ; last_name = last_name_in ; age = age_in ; phone = phone_in ; address = address_in ; } Dinh Hoang Long, Mental Log Builder Pattern 5/28
  • 7. Bài toán, vấn đề User Class Constructor: public User ( String first_name_in , String last_name_in , int age_in , String phone_in , String address_in ) { first_name = first_name_in ; last_name = last_name_in ; age = age_in ; phone = phone_in ; address = address_in ; } public User ( String first_name_in , String last_name_in , int age_in , String phone_in ) { this ( first_name_in , last_name_in , age_in , phone_in , " " ) ; } Dinh Hoang Long, Mental Log Builder Pattern 6/28
  • 8. Bài toán, vấn đề User Class Constructor: public User ( String first_name_in , String last_name_in , String address_in ) { first_name = first_name_in ; last_name = last_name_in ; age = age_in ; phone = phone_in ; address = address_in ; } public User ( String first_name_in , String last_name_in , this ( first_name_in , last_name_in , age_in , phone_in , } public User ( String first_name_in , String last_name_in , this ( first_name_in , last_name_in , age_in , " " ) ; } Dinh Hoang Long, Mental Log Builder Pattern int age_in , String phone_in , int age_in , String phone_in ) { ""); int age_in ) { 7/28
  • 9. Bài toán, vấn đề User Class Constructor: public User ( String first_name_in , String last_name_in , int age_in , String phone_in , String address_in ) { first_name = first_name_in ; last_name = last_name_in ; age = age_in ; phone = phone_in ; address = address_in ; } public User ( String first_name_in , String last_name_in , int age_in , String phone_in ) { this ( first_name_in , last_name_in , age_in , phone_in , " " ) ; } public User ( String first_name_in , String last_name_in , int age_in ) { this ( first_name_in , last_name_in , age_in , " " ) ; } public User ( String first_name_in , String last_name_in ) { this ( first_name_in , last_name_in , 0) ; } Dinh Hoang Long, Mental Log Builder Pattern 8/28
  • 10. Bài toán, vấn đề User Class Constructor: PHP public function User ( $first_name_in , $last_name_in , $age_in = 0 , $phone_in = " " , $address_in = " " ) { $first_name = $first_name_in ; $last_name = $last_name_in ; $age = $age_in ; $phone = $phone_in ; $address = $address_in ; } Dinh Hoang Long, Mental Log Builder Pattern 9/28
  • 11. Bài toán, vấn đề User Class Nhược điểm: Khi số lượng tham số nhiều lên thì số lượng Constructor cần viết nhiều lên Dinh Hoang Long, Mental Log Builder Pattern 10/28
  • 12. Bài toán, vấn đề User Class Nhược điểm: Khi số lượng tham số nhiều lên thì số lượng Constructor cần viết nhiều lên Khó nắm bắt được thứ tự các tham số trong Constructor Dinh Hoang Long, Mental Log Builder Pattern 10/28
  • 13. Bài toán, vấn đề User Class Nhược điểm: Khi số lượng tham số nhiều lên thì số lượng Constructor cần viết nhiều lên Khó nắm bắt được thứ tự các tham số trong Constructor Cằn nắm rõ default của các tham số không muốn set. User hlong = new User ( " Dinh " , " Hoang Long " , 22 , " " , " Hanoi " ) ; Dinh Hoang Long, Mental Log Builder Pattern 10/28
  • 14. Bài toán, vấn đề User Class Giải pháp: JavaBeans Convention Tạo 1 constructor không có tham số nào (0-argument constructor), hoặc 1 constructor duy nhất với số lượng tham số tối thiểu. Dinh Hoang Long, Mental Log Builder Pattern 11/28
  • 15. Bài toán, vấn đề User Class Giải pháp: JavaBeans Convention Tạo 1 constructor không có tham số nào (0-argument constructor), hoặc 1 constructor duy nhất với số lượng tham số tối thiểu. Sử dụng các phương thức SetX (input_value) để chỉ định các giá trị muốn set. class User { ... public void setAge ( age_in ) { age = age_in ; } } User hlong = new User ( " Dinh " , " Hoang Long " ) ; hlong . setAge (22) ; Dinh Hoang Long, Mental Log Builder Pattern 11/28
  • 16. Bài toán, vấn đề User Class Giải pháp: JavaBeans Convention Tạo 1 constructor không có tham số nào (0-argument constructor), hoặc 1 constructor duy nhất với số lượng tham số tối thiểu. Sử dụng các phương thức SetX (input_value) để chỉ định các giá trị muốn set. class User { ... public void setAge ( age_in ) { age = age_in ; } } User hlong = new User ( " Dinh " , " Hoang Long " ) ; hlong . setAge (22) ; Nhược điểm? Dinh Hoang Long, Mental Log Builder Pattern 11/28
  • 17. Bài toán, vấn đề User Class Nhược điểm Object được tạo ra trở nên không bền vững, dễ bị thay đổi. Dinh Hoang Long, Mental Log Builder Pattern 12/28
  • 18. Bài toán, vấn đề User Class Nhược điểm Object được tạo ra trở nên không bền vững, dễ bị thay đổi. Người sử dụng khó kiểm soát được trạng thái của object (Vì quá dễ bị thay đổi). Dinh Hoang Long, Mental Log Builder Pattern 12/28
  • 19. Bài toán, vấn đề User Class Nhược điểm Object được tạo ra trở nên không bền vững, dễ bị thay đổi. Người sử dụng khó kiểm soát được trạng thái của object (Vì quá dễ bị thay đổi). Giải pháp: Builder Pattern Dinh Hoang Long, Mental Log Builder Pattern 12/28
  • 20. Builder Pattern Ý tưởng cơ bản Ý tưởng cơ bản Builder Pattern Là 1 pattern dành cho việc tạo object (creational pattern) Dinh Hoang Long, Mental Log Builder Pattern 13/28
  • 21. Builder Pattern Ý tưởng cơ bản Ý tưởng cơ bản Builder Pattern Là 1 pattern dành cho việc tạo object (creational pattern) Builder pattern được sử dụng khi số lượng tham số cần thiết tạo 1 object là lớn (>4), hoặc quá trình tạo object phức tạp. Dinh Hoang Long, Mental Log Builder Pattern 13/28
  • 22. Builder Pattern Ý tưởng cơ bản Ý tưởng cơ bản Builder Pattern Là 1 pattern dành cho việc tạo object (creational pattern) Builder pattern được sử dụng khi số lượng tham số cần thiết tạo 1 object là lớn (>4), hoặc quá trình tạo object phức tạp. Builder pattern sử dụng 1 object có vai trò Builder, để tạo 1 object khác. Dinh Hoang Long, Mental Log Builder Pattern 13/28
  • 23. Builder Pattern Áp dụng vào bài toán Áp dụng vào bài toán Ý tưởng Tạo 1 class UserBuilder có vai trò tạo 1 object cho class User. Dinh Hoang Long, Mental Log Builder Pattern 14/28
  • 24. Builder Pattern Áp dụng vào bài toán Áp dụng vào bài toán Ý tưởng Tạo 1 class UserBuilder có vai trò tạo 1 object cho class User. Việc tạo object cho class User bị ràng buộc phải qua UserBuilder. Dinh Hoang Long, Mental Log Builder Pattern 14/28
  • 25. Builder Pattern Áp dụng vào bài toán Áp dụng vào bài toán Ý tưởng Tạo 1 class UserBuilder có vai trò tạo 1 object cho class User. Việc tạo object cho class User bị ràng buộc phải qua UserBuilder. Giải pháp: Nested Class Dinh Hoang Long, Mental Log Builder Pattern 14/28
  • 26. Builder Pattern Áp dụng vào bài toán UserBuilder Class class User { public static class UserBuilder () { private String first_name ; private String last_name ; private int age = 0; private String phone = " " ; private String address = " " ; public UserBuilder ( String first_name_in , String last_name_in ) { first_name = first_name_in ; last_name = last_name_in ; } } } Dinh Hoang Long, Mental Log Builder Pattern 15/28
  • 27. Builder Pattern Áp dụng vào bài toán UserBuilder Class class User { public static class UserBuilder () { private String first_name ; private String last_name ; private int age = 0; private String phone = " " ; private String address = " " ; public UserBuilder ( String first_name_in , String last_name_in ) { first_name = first_name_in ; last_name = last_name_in ; } public UserBuilder age ( int age_in ) { age = age_in ; return this ; } } } Dinh Hoang Long, Mental Log Builder Pattern 16/28
  • 28. Builder Pattern Áp dụng vào bài toán UserBuilder Class class User { public static class UserBuilder () { private String first_name ; private String last_name ; private int age = 0; private String phone = " " ; private String address = " " ; public UserBuilder ( String first_name_in , String last_name_in ) { first_name = first_name_in ; last_name = last_name_in ; } public UserBuilder age ( int age_in ) { age = age_in ; return this ; } public UserBuilder phone ( String phone_in ) { phone = phone_in ; return this ; } public UserBuilder address ( String address_in ) { address = address_in ; return this ; } } } Dinh Hoang Long, Mental Log Builder Pattern 17/28
  • 29. Builder Pattern Áp dụng vào bài toán UserBuilder Class class User { public static class UserBuilder () { private String first_name ; private String last_name ; private int age = 0; private String phone = " " ; private String address = " " ; public UserBuilder ( String first_name_in , String last_name_in ) { first_name = first_name_in ; last_name = last_name_in ; } public UserBuilder age ( int age_in ) { age = age_in ; return this ; } public UserBuilder phone ( String phone_in ) { phone = phone_in ; return this ; } public UserBuilder address ( String address_in ) { address = address_in ; return this ; } public User build () { return new User ( this ) ; } } } Dinh Hoang Long, Mental Log Builder Pattern 18/28
  • 30. Builder Pattern Áp dụng vào bài toán UserBuilder Class class User { private String first_name ; private String last_name ; private int age ; private String phone ; private String address ; public static class UserBuilder { ... } private User ( UserBuilder builder ) { first_name = builder . first_name ; last_name = builder . last_name ; age = builder . age ; phone = builder . phone ; address = builder . address ; } } Dinh Hoang Long, Mental Log Builder Pattern 19/28
  • 31. Builder Pattern Áp dụng vào bài toán UserBuilder Class class User { private String first_name ; private String last_name ; private int age ; private String phone ; private String address ; public static class UserBuilder { ... } private User ( UserBuilder builder ) { first_name = builder . first_name ; last_name = builder . last_name ; age = builder . age ; phone = builder . phone ; address = builder . address ; } } Sử dụng User hlong = new User . UserBuilder ( " dinh " , " hoang long " ) . age (23) . address ( " Hanoi " ) . build () ; Dinh Hoang Long, Mental Log Builder Pattern 19/28
  • 32. Builder Pattern Áp dụng vào bài toán UserBuilder Class Có nhất thiết phải sự dụng "nested class"? Điều gì xảy ra nếu sử dụng "outside class"? Dinh Hoang Long, Mental Log Builder Pattern 20/28
  • 33. Builder Pattern Áp dụng vào bài toán UserBuilder Class Có nhất thiết phải sự dụng "nested class"? Điều gì xảy ra nếu sử dụng "outside class"? Khi nào cần tạo 1 class builder riêng: Dinh Hoang Long, Mental Log Builder Pattern 20/28
  • 34. Builder Pattern Áp dụng vào bài toán UserBuilder Class Có nhất thiết phải sự dụng "nested class"? Điều gì xảy ra nếu sử dụng "outside class"? Khi nào cần tạo 1 class builder riêng: Công việc build các thành phần của product là phức tạp. Dinh Hoang Long, Mental Log Builder Pattern 20/28
  • 35. Builder Pattern Áp dụng vào bài toán UserBuilder Class Có nhất thiết phải sự dụng "nested class"? Điều gì xảy ra nếu sử dụng "outside class"? Khi nào cần tạo 1 class builder riêng: Công việc build các thành phần của product là phức tạp. Chỉ thông qua builder mới có thể tạo được các thành phần cho product. Dinh Hoang Long, Mental Log Builder Pattern 20/28
  • 36. Builder Pattern Phân tích các thành phần trong Builder Pattern Phân tích các thành phần trong Builder Pattern Hình 1: Sơ đồ UML đầy đủ của 1 Builder Pattern Dinh Hoang Long, Mental Log Builder Pattern 21/28
  • 37. Builder Pattern Phân tích các thành phần trong Builder Pattern Vai trò của các thành phần Builder Quản lý cách mà các thành phần của object sẽ được tạo ra (How part is built). Dinh Hoang Long, Mental Log Builder Pattern 22/28
  • 38. Builder Pattern Phân tích các thành phần trong Builder Pattern Vai trò của các thành phần Builder Quản lý cách mà các thành phần của object sẽ được tạo ra (How part is built). Director Quản lý cách mà các thành phần được lắp ráp, tháo bỏ (How to assemble part). Dinh Hoang Long, Mental Log Builder Pattern 22/28
  • 39. Builder Pattern Phân tích các thành phần trong Builder Pattern Vai trò của các thành phần Builder Quản lý cách mà các thành phần của object sẽ được tạo ra (How part is built). Director Quản lý cách mà các thành phần được lắp ráp, tháo bỏ (How to assemble part). Vai trò: Thông báo với builder khi nào 1 thành phần cần được tạo ra. Dinh Hoang Long, Mental Log Builder Pattern 22/28
  • 40. Builder Pattern Phân tích các thành phần trong Builder Pattern Vai trò của các thành phần Builder Quản lý cách mà các thành phần của object sẽ được tạo ra (How part is built). Director Quản lý cách mà các thành phần được lắp ráp, tháo bỏ (How to assemble part). Vai trò: Thông báo với builder khi nào 1 thành phần cần được tạo ra. Công việc của Director có thể thực hiện trực tiếp bởi client Dinh Hoang Long, Mental Log Builder Pattern 22/28
  • 41. Builder Pattern Phân tích các thành phần trong Builder Pattern Vai trò của các thành phần Builder Quản lý cách mà các thành phần của object sẽ được tạo ra (How part is built). Director Quản lý cách mà các thành phần được lắp ráp, tháo bỏ (How to assemble part). Vai trò: Thông báo với builder khi nào 1 thành phần cần được tạo ra. Công việc của Director có thể thực hiện trực tiếp bởi client → Có thể bỏ class Director, client có thể tự tạo object nhờ Builder. Dinh Hoang Long, Mental Log Builder Pattern 22/28
  • 42. Builder Pattern Phân tích các thành phần trong Builder Pattern Vai trò của các thành phần Builder Quản lý cách mà các thành phần của object sẽ được tạo ra (How part is built). Director Quản lý cách mà các thành phần được lắp ráp, tháo bỏ (How to assemble part). Vai trò: Thông báo với builder khi nào 1 thành phần cần được tạo ra. Công việc của Director có thể thực hiện trực tiếp bởi client → Có thể bỏ class Director, client có thể tự tạo object nhờ Builder. Khi nào cần Director? Dinh Hoang Long, Mental Log Builder Pattern 22/28
  • 43. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 44. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Khi cần tạo cố định 1 kiểu product. (1 Director với 1 Builder chỉ tạo ra 1 product) Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 45. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Khi cần tạo cố định 1 kiểu product. (1 Director với 1 Builder chỉ tạo ra 1 product) Quá trình lắp đặt là cố định Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 46. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Khi cần tạo cố định 1 kiểu product. (1 Director với 1 Builder chỉ tạo ra 1 product) Quá trình lắp đặt là cố định Nhiều Builder cùng thừa kế 1 AbstractBuilder, Director cần đóng gói quá trình tạo product. (Director lúc này chỉ cần làm việc với AbstractBuilder) Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 47. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Khi cần tạo cố định 1 kiểu product. (1 Director với 1 Builder chỉ tạo ra 1 product) Quá trình lắp đặt là cố định Nhiều Builder cùng thừa kế 1 AbstractBuilder, Director cần đóng gói quá trình tạo product. (Director lúc này chỉ cần làm việc với AbstractBuilder) Khi nào không cần Director Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 48. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Khi cần tạo cố định 1 kiểu product. (1 Director với 1 Builder chỉ tạo ra 1 product) Quá trình lắp đặt là cố định Nhiều Builder cùng thừa kế 1 AbstractBuilder, Director cần đóng gói quá trình tạo product. (Director lúc này chỉ cần làm việc với AbstractBuilder) Khi nào không cần Director Quá trình lắp đặt không cần thứ tự cụ thể Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 49. Builder Pattern Phân tích các thành phần trong Builder Pattern Director Khi nào cần Director: Khi việc lắp ráp các thành phần của product là phức tạp. Không quá đơn giản hoặc không thể làm tùy ý. Khi cần tạo cố định 1 kiểu product. (1 Director với 1 Builder chỉ tạo ra 1 product) Quá trình lắp đặt là cố định Nhiều Builder cùng thừa kế 1 AbstractBuilder, Director cần đóng gói quá trình tạo product. (Director lúc này chỉ cần làm việc với AbstractBuilder) Khi nào không cần Director Quá trình lắp đặt không cần thứ tự cụ thể Quá trình lắp đặt cần nhiều tùy biến Dinh Hoang Long, Mental Log Builder Pattern 23/28
  • 50. Builder Pattern trong thực tế Builder Pattern trong thực tế Java StringBuilder PHP Zend_Db_Select Dinh Hoang Long, Mental Log Builder Pattern 24/28
  • 51. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder String trong Java Không thể thay đổi Dinh Hoang Long, Mental Log Builder Pattern 25/28
  • 52. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder String trong Java Không thể thay đổi Mỗi thao tác chèn ký tự, xóa ký tự, đổi chữ hoa thành chữ thường,... đều tạo ra object mới → Tốn bộ nhớ! Dinh Hoang Long, Mental Log Builder Pattern 25/28
  • 53. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder StringBuilder trong Java Dễ dàng thực hiện các thao tác chèn, xóa,... đối với String. Dinh Hoang Long, Mental Log Builder Pattern 26/28
  • 54. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder StringBuilder trong Java Dễ dàng thực hiện các thao tác chèn, xóa,... đối với String. Sử dụng phương thức toString để tạo ra String cuối cùng (Giống với phương thức getResult() trong mô hình của Builder Pattern). Dinh Hoang Long, Mental Log Builder Pattern 26/28
  • 55. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder StringBuilder trong Java Dễ dàng thực hiện các thao tác chèn, xóa,... đối với String. Sử dụng phương thức toString để tạo ra String cuối cùng (Giống với phương thức getResult() trong mô hình của Builder Pattern). Ví dụ: String orgStr = " hello " ; StringBuilder builder = new StringBuilder () ; builder . append ( orgStr ) ; builder . deleteCharAt ( orgStr . length () -1) . insert (0 , " a " ) ; System . out . println ( builder . toString () ) ; // output : ahell Dinh Hoang Long, Mental Log Builder Pattern 26/28
  • 56. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder Nhận xét về StringBuilder Lợi thế hơn String vì không phải tạo object mới. →Sử dụng khi muốn thay đổi 1 String. Tạo object bằng: new StringBuilder (String s) Dinh Hoang Long, Mental Log Builder Pattern 27/28
  • 57. Builder Pattern trong thực tế Java StringBuilder Java StringBuilder Nhận xét về StringBuilder Lợi thế hơn String vì không phải tạo object mới. →Sử dụng khi muốn thay đổi 1 String. Tạo object bằng: new StringBuilder (String s) Lợi thế hơn StringBuffer vì không cần bảo đảm thread-safety (không synchronization, nhanh hơn StringBuffer). Dinh Hoang Long, Mental Log Builder Pattern 27/28
  • 58. Builder Pattern trong thực tế PHP Zend_Db_Select PHP Zend_Db_Select Zend_Db_Select: Tạo 1 câu truy vấn MySQL Dinh Hoang Long, Mental Log Builder Pattern 28/28
  • 59. Builder Pattern trong thực tế PHP Zend_Db_Select PHP Zend_Db_Select Zend_Db_Select: Tạo 1 câu truy vấn MySQL Ví dụ: // Z e n d _ D b _ A d a p t e r _ P d o : $db $select = new Zend_Db_Select ( $db ) ; $select - > from ( " user " ) -> where ( " user_id > 10 " ) -> order ( " user_id DESC " ) -> limit (10) ; Dinh Hoang Long, Mental Log Builder Pattern 28/28
  • 60. Builder Pattern trong thực tế PHP Zend_Db_Select PHP Zend_Db_Select Zend_Db_Select: Tạo 1 câu truy vấn MySQL Ví dụ: // Z e n d _ D b _ A d a p t e r _ P d o : $db $select = new Zend_Db_Select ( $db ) ; $select - > from ( " user " ) -> where ( " user_id > 10 " ) -> order ( " user_id DESC " ) -> limit (10) ; // $stmt : Z e n d _ D b _ S t a t e m e n t $stmt = $select - > query () ; Dinh Hoang Long, Mental Log Builder Pattern 28/28
  • 61. Builder Pattern trong thực tế PHP Zend_Db_Select PHP Zend_Db_Select Zend_Db_Select: Tạo 1 câu truy vấn MySQL Ví dụ: // Z e n d _ D b _ A d a p t e r _ P d o : $db $select = new Zend_Db_Select ( $db ) ; $select - > from ( " user " ) -> where ( " user_id > 10 " ) -> order ( " user_id DESC " ) -> limit (10) ; // $stmt : Z e n d _ D b _ S t a t e m e n t $stmt = $select - > query () ; Tương ứng với: SELECT ∗ FROM user WHERE user _id > 10 ORDER BY user _id DESC LIMIT 10; Dinh Hoang Long, Mental Log Builder Pattern 28/28
  • 62. Builder Pattern trong thực tế PHP Zend_Db_Select PHP Zend_Db_Select Zend_Db_Select: Tạo 1 câu truy vấn MySQL Ví dụ: // Z e n d _ D b _ A d a p t e r _ P d o : $db $select = new Zend_Db_Select ( $db ) ; $select - > from ( " user " ) -> where ( " user_id > 10 " ) -> order ( " user_id DESC " ) -> limit (10) ; // $stmt : Z e n d _ D b _ S t a t e m e n t $stmt = $select - > query () ; Tương ứng với: SELECT ∗ FROM user WHERE user _id > 10 ORDER BY user _id DESC LIMIT 10; Không dùng builder pattern !!! class Ze nd_Db_Select { public function _construct ( $table_name , $where = " " , $order = " " , $limit = " " ,...) {} } Dinh Hoang Long, Mental Log Builder Pattern 28/28

×