Proxy cung cấp surrogate object thay thế cho object khác — control access đến object gốc và có thể thêm logic trước/sau.
Các loại phổ biến:
- Virtual Proxy (lazy initialization): chỉ tạo object nặng khi thực sự cần — ví dụ lazy load image;
- Protection Proxy (access control): kiểm tra permission trước khi delegate;
- Caching Proxy: cache result của expensive operation;
- Logging Proxy: ghi log mọi request đến object
JavaScript Proxy object là triển khai native:
javascript
const handler = {
get(obj, prop) {
console.log(`Getting ${String(prop)}`)
return obj[prop]
}
}
const proxy = new Proxy(target, handler)Trong NestJS, Guards và Interceptors là Proxy pattern.
- Khác Decorator: Proxy thường quản lý lifecycle của subject; Decorator thêm behavior mà client biết.
- Dùng khi: cần access control, lazy init, caching, logging mà không sửa class gốc.