Proxy Pattern — boshqa obyektga murojaatni boshqaradigan, u bilan bir xil yoki juda yaqin interface taqdim etadigan structural design pattern. Proxy client va haqiqiy obyekt orasida turib access, lifecycle, remote communication, cache, logging yoki security vazifalarini bajaradi.
Client ko‘pincha real subject bilan proxy o‘rtasidagi farqni bilmasdan ishlaydi.
Subject
Subject — proxy va real obyekt amalga oshiradigan umumiy interface.
Masalan:
get_document(id)
save_document(document)
delete_document(id)
Client faqat shu contractga bog‘lanadi.
Real subject
Asosiy ishni bajaradigan obyekt.
Bu:
- database repository;
- remote service;
- katta image;
- file;
- expensive computation;
- protected resource
bo‘lishi mumkin.
Proxy real subjectga chaqiriqni uzatadi.
Virtual proxy
Qimmat obyektni faqat kerak bo‘lganda yaratadi.
Masalan, katta image document ochilganda darhol emas, user uni ko‘rganida yuklanadi.
Bu lazy initialization.
Proxy real obyekt yaratilmaguncha metadata yoki placeholder qaytarishi mumkin.
Protection proxy
Accessdan oldin permissionni tekshiradi.
Masalan:
user documentni ko‘ra oladimi
user delete qila oladimi
tenant mosmi
Protection proxy authorizationni markazlashtiradi.
Ammo database va boshqa entry pointlar orqali bypass bo‘lmasligi kerak.
Remote proxy
Boshqa process yoki serverdagi obyektni local interface sifatida ko‘rsatadi.
ni bajaradi.
Remote call local methodga o‘xshasa ham latency va failure semantikasi boshqacha.
Smart reference
Proxy obyektga murojaatni hisoblaydi yoki boshqaradi.
Masalan:
Object-relational mapperdagi lazy relationship proxy bunga misol bo‘lishi mumkin.
Cache proxy
Read natijasini cache qiladi.
Jarayon:
client
→ proxy
→ cache hit bo‘lsa natija
→ miss bo‘lsa real subject
Cache key, TTL, invalidation va stale data siyosati kerak.
Logging proxy
Har chaqiriq haqida:
- operation;
- caller;
- duration;
- result;
- error
ma’lumotini yozadi.
Logda secret va katta payloadlar yashiriladi.
Logging proxy debugging va audit uchun ishlatiladi.
Rate limiting proxy
Client yoki key bo‘yicha request sonini cheklaydi.
Limit oshsa real subjectga chaqiriq yuborilmaydi.
Distributed muhitda counter shared storage yoki gateway’da saqlanishi mumkin.
Firewallga o‘xshash proxy
Tashqi requestni tekshirib, faqat ruxsat etilgan operation va argumentlarni real service’ga uzatadi.
Validation, allowlist va protocol parsing muhim.
Proxy application-level policy’ni bajarishi mumkin.
Copy-on-write proxy
Bir nechta client bir xil katta obyektni share qiladi.
Client o‘zgartirmoqchi bo‘lganda nusxa yaratiladi.
Bu memory va copy xarajatini kamaytiradi.
Immutable yoki snapshot tizimlarida uchraydi.
Synchronization proxy
Bir nechta thread yoki process real obyektga parallel kirishini boshqaradi.
Lock yoki queue orqali operationlar ketma-ketlashtiriladi.
Juda keng lock throughputni pasaytiradi.
Proxy va Decorator
Ikkalasi ham wrapper va bir xil interface’dan foydalanadi.
Proxy access yoki obyekt mavjudligini boshqaradi.
Decorator yangi xatti-harakat qo‘shish va qatlamlarni kombinatsiya qilishga urg‘u beradi.
Amalda chegaralar yaqin bo‘lishi mumkin.
Proxy va Adapter
Adapter mos kelmaydigan interface’ni tarjima qiladi.
Remote proxy response formatini map qilsa adapter vazifasini ham qisman bajarishi mumkin.
Proxy va Facade
Facade murakkab subsystem uchun soddalashtirilgan yangi interface beradi.
Proxy odatda bitta subjectga o‘xshash interface saqlaydi.
Facade clientdan subsystem detallarini yashiradi, proxy esa accessni nazorat qiladi.
Lazy loading
ORM entity relationshipini darhol database’dan o‘qimasdan proxy obyekt beradi.
Property birinchi marta o‘qilganda query bajariladi.
Bu keraksiz queryni kamaytirishi mumkin.
Lekin loop ichida lazy loading N+1 query muammosini yaratadi.
Network failure
Remote proxy local methoddan farqli ravishda:
holatlariga ega.
Interface bu failure’larni yashirib yubormasligi kerak.
Domain error va transport error ajratiladi.
Identity
Bir real subject uchun bir nechta proxy yaratilishi mumkin.
Object identity comparison kutilmagan natija berishi mumkin.
Proxy equality va hash semantikasi aniq belgilanadi.
Test
Proxy testlari:
- real subject qachon chaqirildi;
- permission rad etildi;
- cache hit;
- timeout;
- retry;
- argument mapping;
- error propagation;
- lazy initialization
holatlarini tekshiradi.
Fake subject chaqiriq sonini qayd etadi.
Afzalliklari
- access control;
- lazy initialization;
- remote communication;
- cache;
- monitoring;
- lifecycle management;
- clientni real implementationdan ajratish
imkonini beradi.
Kamchiliklari
Qo‘shimcha qatlam latency va debugging murakkabligini oshiradi.
Proxy local callni remote calldek ko‘rsatmasa client noto‘g‘ri timeout va retry taxminlari qilishi mumkin.
Yashirin lazy load performance muammosini keltiradi.
Reverse proxy bilan farqi
Design pattern sifatidagi Proxy object-level abstraction.
Network reverse proxy esa HTTP yoki boshqa trafficni backend service’ga uzatadigan infratuzilma componenti.
Ikkalasining asosiy g‘oyasi vositachilik bo‘lsa ham scope va implementation boshqa.
Access token
Protection proxy resource’ga kirishda token yoki current principalni tekshirishi mumkin.
Token mavjudligi yetarli emas.
Scope, tenant, object ownership va amal turi tekshiriladi.
Delete huquqi read huquqidan alohida.
Proxy chain
Bir request bir nechta proxy qatlamidan o‘tishi mumkin:
authentication
→ cache
→ rate limit
→ remote proxy
→ real service
Har qatlam timeout va errorni o‘zgartirishi mumkin.
Trace proxy chain bo‘ylab correlation IDni saqlaydi.
Bog‘liq tushunchalar
Structural pattern, Subject, Real subject, Virtual proxy, Protection proxy, Remote proxy, Lazy loading, Decorator, Adapter, Access control