Creational patterns: Obyekt yaratishni boshqarish va global holat arxitekturasi
11-sinfProfessional IT3-hafta · 9-darsGoF 3 toifasi: Creational, Structural va Behavioral tushunchasi.
Obyekt yaratishni mijozdan ajratish va OCP asosida markazlashtirish.
Yagona nusxa kafolati, Python'da __new__ va test xatarlari.
Tipik arxitektura muammolarining sinovdan o'tgan yechim modellari
Oddiy 5 qatorli masalaga ham 3 ta andoza tiqishtirish. Bu kodni og'irlashtiradi va tushunarsiz qiladi.
Muammo aniq bo'lganda, tizim kengayishi talab etilganda va takrorlanishlar ko'paygandagina andoza joriy qilinadi.
Obyektlarni to'g'ridan-to'g'ri emas, maxsus «fabrika» orqali yaratish
Obyekt yaratish logikasi butun loyiha bo'ylab sochilib ketmasdan bitta joyda turadi.
Yangi sinf qo'shilganda mijoz kodi o'zgarmaydi, faqat fabrika ro'yxatiga qo'shiladi.
Dasturning qolgan qismi aniq detallarga emas, umumiy interfeysga tayanadi.
Butun dastur bo'yicha yagona nusxani kafolatlash va unga kirish nuqtasi
__new__(cls) — YaratuvchiXotiradan obyekt uchun joy ajratadi. Singleton aynan shu yerda mavjud nusxa bor-yo'qligini tekshiradi.
__init__(self) — Boshlang'ichlovchiYaratilgan obyektga boshlang'ich qiymatlarni (atributlarni) yuklaydi.
Ma'lumotlar bazasi bilan cheklangan (masalan, 10 ta) ulanishlar zaxirasini boshqarish.
Barcha modullardan kelgan yozuvlarni bitta log faylga tartibli yozish.
Dastur sozlamalarini xotiraga bir marta yuklab, barcha joyda bir xil o'qish.
Istalgan modul xohlagan paytda o'zgartirib qo'yishi mumkin, bu xatolarni topishni qiyinlashtiradi.
Bitta unit-testda qolgan holat keyingi testlarning kutilmaganda qulashiga olib keladi.
Ko'p oqimli (multi-threading) tizimlarda qulflash (Lock) bo'lmasa, 2 ta obyekt ochilib ketadi.
Har bir sinf ichida DB.get_instance() chaqiriladi. Test paytida uni soxtalashtirish (mock) juda qiyin.
FastAPI yoki Spring kabi tizimlar obyektni o'zi 1 marta yaratadi va sinfga argument sifatida uzatadi. Test qilish juda oson!
Qaysi andoza butun tizim bo'yicha faqat bitta obyekt nusxasi bo'lishini ta'minlaydi?
VehicleFactory tuzib, turiga qarab Car va Truck obyektlarini yarating.__new__ metodi orqali AppLogger Singleton sinfini yozing va 2 ta o'zgaruvchi bitta xotiraga ega ekanini is bilan tekshiring.ConfigManager Singleton sinfini to'liq ishga tushiring.Muammoga nisbatan o'ylangan arxitektura andozasi.
Obyekt yaratishni markazlashtirish va mijozni mustaqil qilish.
Resurslarni tejovchi yagona nusxa (lekin global xatarlariga hushyor bo'lish lozim).
Publish-Subscribe modeli, hodisalarni kuzatish va HTTP/JSON arxitekturasi
4-hafta · 10-dars