Bosh sahifa Wiki Proxy Pattern

Proxy Pattern

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

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

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.

Proxy:

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

Proxy interface’ni saqlaydi.

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:

holatlarini tekshiradi.

Fake subject chaqiriq sonini qayd etadi.

Afzalliklari

Proxy:

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