Kodga bog'liqlik - bu shayton.

Sizning qaramligingiz sizni har safar yondiradi.
"O'zgarish faqat doimiydir ..." - Heraklit (Faylasuf)

Bugungi kunda veb-ilovalarimizni yaratishda biz foydalanadigan vositalar, kutubxonalar va ramkalar bir necha yil oldin foydalanganimizdan tubdan farq qiladi.

Bir necha qisqa yillardan so'ng, ushbu texnologiyalarning aksariyati yana keskin o'zgaradi. Biroq, ko'pchiligimiz ushbu dasturlarni markaziy, ajralmas qismiga aylantiramiz.

Oylik lazzat doiralaridan biz hamma vaqt o'zgarmasligimiz kabi ularni import qilamiz, foydalanamiz va meros qilib olamiz. Xo'sh ... ular emas. Va bu muammo.

20 yoshdan oshgan veb-ilovalarni ishlab chiqish, loyihalash va arxivlashtirishdan so'ng, men ikkita muhim haqiqatni angladim:

  1. Tashqi qaramlik har qanday dasturning uzoq muddatli barqarorligi va hayotiyligiga katta xavf tug'diradi.
  2. Tashqi bog'liqlikni ishlatmasdan har qanday trivial bo'lmagan ilovani yaratish tobora qiyinlashib bormoqda - agar iloji bo'lmasa.

Ushbu maqola bizning ushbu ilovalarimiz uzoq muddatli omon qolish uchun eng katta imkoniyatga ega bo'lishi uchun ushbu ikkita haqiqatni yarashtirish haqida.

Quyon uyasi chindan ham juda chuqur.

Agar biz veb-ilovalarimiz haqida hamma narsani o'ylay boshlasak, kodga kirishdan oldin o'nlab yoki undan ko'p narsalar haqida o'ylashimiz mumkin:

  • Quvvat
  • Ulanish
  • Xavfsizlik devori
  • DNS
  • Server apparati (CPU, Disk, Ram,…)
  • Sovutish
  • Virtualizatsiya platformasi
  • Konteyner platformasi
  • Operatsion tizim
  • Veb-server platformasi
  • App Server platformasi
  • Veb-brauzer

Ishlab chiquvchilar sifatida, bular haqida xabardor bo'lish juda yaxshi, lekin biz ko'pincha ular haqida qila olmaymiz. Shunday qilib, keling, hozir ularni e'tiborsiz qoldiramiz va faqat kod haqida gaplashamiz.

Kodda qaramlikning uch turi mavjud:

1. Biz nazorat qiladigan qaramliklar

Bu kod yozilgan va biz yoki tashkilotimizga tegishli.

2. Biz nazorat qilmaydigan qaramliklar

Bu uchinchi tomon sotuvchisi yoki ochiq manbali dasturiy ta'minot hamjamiyati tomonidan yozilgan kod.

3. Bir marta olib tashlangan qaramliklar

Bular bizning uchinchi tomon kodlariga bog'liq bo'lgan kodlarga bog'liqliklar. (Buni uch marta tez ayt!)

Biz asosan biz nazorat qilmaydigan qaramliklar haqida gaplashmoqchimiz.

Bir marta olib tashlangan qaramliklar va qaramliklar, baribir bosh og'rig'ini keltirib chiqarishi mumkin, ammo biz boshqaradigan qaramlik holatida biz to'g'ridan-to'g'ri aralashib har qanday muammolarni yumshata olamiz.

Bir marta olib tashlangan qaramlik holatlarida, biz odatda biz uchun g'amxo'rlik qilishda uchinchi tomonga ishonishimiz mumkin, chunki ular ham ularga bog'liqdir.

Nima uchun uchinchi tomon kodlariga bog'liqlik yaxshi

Veb-ilovangizning katta qismi umumiy muammolarni hal qilish uchun mavjud: autentifikatsiya, avtorizatsiya, ma'lumotlarga kirish, xatolar bilan ishlash, navigatsiya, jurnal, shifrlash, ma'lumotlar ro'yxatini ko'rsatish, shakllarni kiritish va hokazolar ...

Qaysi texnologiyani ishlatmasligingizdan qat'iy nazar, ushbu muammolarning umumiy echimlari mavjud va siz osongina sotib olishingiz va kod bazangizga ulanadigan kutubxonalar sifatida foydalanishingiz mumkin. Ushbu ishlarning barchasini noldan yozish odatda vaqtni behuda sarflashdir.

Siz kamyob muammoni hal qiladigan yoki oddiy muammoni hal qiladigan kodga e'tiboringizni qaratmoqchisiz. Bu sizning ilovangizni qadrli qiladigan narsa: faqat sizning ilovangizga xos bo'lgan biznes qoidalarini amalga oshiruvchi kod - "maxfiy sous".

Google-ning qidiruv va sahifalarni saralash algoritmi, Facebook-ning vaqt jadvalini filtrlash, Netflix-ning "sizga tavsiya etilgan" bo'limi va ma'lumotlarni siqish algoritmlari - bu xususiyatlarning barchasidagi kod "maxfiy sous" dir.

Uchinchi tomon kodi - kutubxonalar shaklida - bu sizning "maxfiy sousingizga" diqqatni jalb qilish uchun ilova dasturingizning o'ziga xos xususiyatlarini tezda amalga oshirishga imkon beradi.

Nima uchun uchinchi tomon kodlariga bog'liqlik yomon

So'nggi bir necha yil ichida yaratilgan har qanday trivial bo'lmagan veb-ilovani ko'rib chiqing va uchinchi tomon kutubxonasidan olingan kod miqdori sizni hayratda qoldiradi. Uchinchi tomon kutubxonalarining bir yoki bir nechtasi tubdan o'zgarsa, yo'qolib yoki sinib qolsa nima bo'ladi?

Agar u ochiq manbali bo'lsa, ehtimol siz uni o'zingiz tuzatishingiz mumkin. Siz o'zingiz ega bo'lmagan kutubxonadagi barcha kodlarni qanchalik yaxshi tushunasiz? Dastlab kutubxonadan foydalanishingizning katta sababi - bu barcha tafsilotlar haqida qayg'urmasdan, kodning afzalliklariga ega bo'lish. Ammo hozir siz qoqilib qoldingiz. O'zingizning boyligingizni siz egalik qilmaydigan va nazorat qilmaydigan bog'liqliklarga to'liq bog'ladingiz.

Xavotir olmang, ushbu maqolaning oxirida siz yangi umidga ega bo'lasiz.

Ehtimol siz meni bo'rttirib yuborgan deb o'ylaysiz yoki sof akademik nuqtai nazardan gapirayapsiz. Sizni ishontirib aytamanki, menda o'z mijozlarini uchinchi tomon kodlarini o'zlarining dasturlariga juda mahkam joylashtirib, o'zlarini o'zi aldagan o'nlab mijozlar bor. Mana yaqinda bittagina misol ...

Mening sobiq mijozim o'z ilovasini Facebookga tegishli bo'lgan Parse deb nomlangan Backend-as-a-Service provayderi yordamida qurdi. Parse xizmatidan foydalanish uchun ular Parse tomonidan taqdim etilgan JavaScript mijozlar kutubxonasidan foydalanishdi. Ushbu jarayon davomida ular o'zlarining barcha kodlarini, shu jumladan "maxfiy sous" kodini ushbu kutubxonaga mahkam bog'lab qo'yishdi.

Mijozimning dastlabki mahsulotini ishlab chiqarganidan uch oy o'tgach - ular haqiqiy, to'lovli mijozlar bilan yaxshi munosabatlarni o'rnatishni boshlaganlarida - Parse bu yopilishini e'lon qildi.

Endi mening mahsulotimni qayta ko'rib chiqish va mijozlar bazasini ko'paytirishning o'rniga, mening mijozim Parse-ning o'z-o'zidan ochiladigan yoki ochiq manbali versiyasiga o'tish yoki butunlay Parse-ni almashtirishni aniqlab olishi kerak edi.

Yosh dasturni ishlab chiqarishda yuzaga kelgan buzilish shunchalik katta ediki, mening mijozim oxir-oqibat ilovani butunlay o'chirib tashladi.

Yaxshi va yomonni tenglashtirish

Bir necha yil oldin, men uchinchi tomon kutubxonalarining foydasini saqlab qolish va xavflarni engib o'tish uchun hal qiluvchi yo'lim ularni Adapter naqshidan foydalanib o'rash edi.

Aslida, siz uchinchi tomon kodini siz yozgan adapter sinfiga yoki moduliga o'rab qo'yasiz. Bu uchinchi tomon kutubxonalarining funktsiyalarini siz nazorat qiladigan tarzda fosh qilish uchun ishlaydi.

Ushbu naqshdan foydalangan holda, agar uchinchi tomon kutubxonasi yoki ramkasi o'zgarsa yoki ketsa, siz faqat adapter kodini biroz tuzatishingiz kerak. Qolgan ilovalaringiz saqlanib qoladi.

Dofactory.com saytidagi adapterning sxemasi

Bu qog'ozda yaxshi ko'rinadi. Faqatgina bir nechta funktsiyalarni ta'minlaydigan mustaqil qaramlik mavjud bo'lsa, bu hiyla-nayrangni amalga oshiradi. Ammo narsalar tezda yomonlashishi mumkin.

Reaktiv kutubxonani (shu jumladan JSX ni) ishlatishdan oldin uni o'rashni tasavvur qila olasizmi? JQuery, yoki burchakli yoki Java-dagi bahor ramkalarini o'rash haqida nima deyish mumkin? Bu tezda kabusga aylanadi.

Shu kunlarda men ko'proq nuansli yondashuvni tavsiya qilaman ...

Kod bazangizga qo'shmoqchi bo'lgan har bir bog'liqlik uchun ikkita omilni ko'paytirib, xavf darajasini aniqlang:

  1. Qaramlik moddiy shaklda o'zgarishi ehtimoli.
  2. Sizning qaramligingizga o'zgargan moddiy zarar sizning arizangizga qanday ta'sir qilishi mumkin.

Uchinchi tomon kutubxonasi yoki ramkasi, ba'zi narsalar yoki barchasi to'g'ri bo'lganda o'zgarishi ehtimoli kamroq:

  • Bu bir necha yil davomida bo'lgan va bir nechta yirik nashrlarga ega.
  • U ko'plab tijorat dasturlari tomonidan keng qo'llaniladi.
  • Bu katta tashkilotning faol qo'llab-quvvatloviga ega - tarjixon firma yoki muassasa nomi.

Uchinchi tomon kutubxonasi yoki ramkasi, ba'zi narsalar yoki barchasi to'g'ri bo'lsa, sizning ilovangizga kamroq ziyon keltiradi:

  • U faqat sizning ilovangizda ishlatilgandan ko'ra ozgina qismi tomonidan ishlatiladi.
  • Unga bog'liq bo'lgan kod, men ilgari aytib o'tgan "maxfiy sous" ning bir qismi emas.
  • Uni olib tashlash sizning kod bazangizga minimal o'zgartirishlarni talab qiladi.
  • Sizning butun arizangiz juda kichkina va tezda yozilishi mumkin. (Bunga ehtiyot bo'ling - juda kamdan kam hollarda bu haqiqatdir).

Biror narsa xavfli bo'lsa, uni o'rash yoki umuman undan qochish ehtimoli ko'proq.

Ilovangizning narx taklifi uchun chindan ham muhim bo'lgan kod - sizning "maxfiy sousingiz" haqida gap ketganda, siz uni juda himoya qilishingiz kerak. Ushbu kodni iloji boricha mustaqil qiling. Agar siz qaramlikdan foydalanishingiz kerak bo'lsa, uni to'g'ridan-to'g'ri murojaat qilishdan ko'ra, in'ektsiya haqida o'ylang. Shunga qaramay, ehtiyot bo'ling.

Ba'zan bu uchinchi tomon kutubxonasiga "yo'q" deb aytishni, haqiqatan ham juda zo'r ekanligingizni yoki haqiqatan ham biron bir sabab yoki boshqa sababga ko'ra foydalanishni xohlayotganingizni anglatadi. Kuchli bo'ling. Menga ishoning, to'lanadi. Faqat Angularni birinchi marta chiqarishga katta mablag 'sarflagan odamlardan yoki Parse-ni hamma joyda ishlatgan mening sobiq mijozlarimdan so'rang. Bu kulgili emas. Menga ishon.

O'yin-kulgi haqida gap ketganda, bunga bir qarang ...

TinyTag kashfiyotiga bog'liqlik grafigi

Yuqoridagi rasm TinyTag Explorer deb nomlangan dastur uchun bog'liqlik grafigi.

Mavjud ilovalaringiz uchun bog'liqlik grafigini yaratish, qaramliklar tomonidan kiritiladigan xavf darajasini tushunishning ajoyib usuli. Men turli xil tillarda, shu jumladan JavaScript, C #, Java, PHP va Python-larda yuqorida keltirilganga o'xshash grafikalarni yaratish uchun bepul vositalar ro'yxatini to'pladim. Siz bu erda olishingiz mumkin.

Boshqalarga yordam berishga yordam bering

Men iloji boricha ko'proq ishlab chiquvchilarga bilim va tajribamni ular bilan bo'lishish orqali yordam berishni xohlayman. Iltimos, menga quyidagi ❤ tavsiya tugmasini (yashil yurak) bosish orqali yordam bering.

Va nihoyat, bu erda bepul qaramlik grafik generatorlari ro'yxatini olishni unutmang.