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