Kod bağımlılıkları şeytandır.

Asılılıqlarınız hər dəfə sizi yandıracaq.
"Dəyişiklik yalnız sabitdir ..." - Heraklit (Filosof)

Bu gün veb tətbiqlərimizi qurmaq üçün istifadə etdiyimiz alətlər, kitabxanalar və çərçivələr, bir neçə il əvvəl istifadə etdiyimiz vasitələrdən kəskin fərqlidir.

Bundan bir neçə qısa il sonra bu texnologiyaların əksəriyyəti yenidən kəskin şəkildə dəyişəcəkdir. Yenə də, bir çoxumuz bu tətbiqlərimizin mərkəzi, ayrılmaz hissəsinə çevrilir.

Aylıq ləzzət çərçivələrindən idxal edirik, istifadə edirik və miras alırıq, sanki hamısı ətrafında və dəyişməz olacaqlar. Yaxşı ... deyillər. Və bu problemdir.

20 yaşında veb tətbiqetmələri inkişaf etdirmək, dizayn etmək və arxivləşdirməkdən sonra iki vacib həqiqəti başa düşdüm:

  1. Xarici asılılıqlar hər hansı bir tətbiqin uzunmüddətli sabitliyinə və canlılığına böyük təhlükə yaradır.
  2. Xarici asılılıqlardan istifadə etmədən hər hansı bir mənasız tətbiq qurmaq getdikcə çətinləşir.

Bu yazı bu iki həqiqəti barışdırmaqdan ibarətdir ki, tətbiqlərimiz uzunmüddətli yaşamaq üçün ən böyük şansa sahib olsunlar.

Dovşan çuxuru həqiqətən çox dərindir.

Veb tətbiqlərimizdən asılı olan hər şeyi düşünməyə başlasaq, koda girməmişdən əvvəl on və ya daha çox düşünmək asandır:

  • Güc
  • Bağlantı
  • Firewall
  • DNS
  • Server Təchizatı (CPU, Disk, Ram,…)
  • Soyutma
  • Virtualizasiya platforması
  • Konteyner platforması
  • Əməliyyat sistemi
  • Veb Server Platforması
  • Tətbiq Server Platforması
  • Veb brauzeri

Tərtibatçılar olaraq bunlardan xəbərdar olmaq yaxşıdır, amma bunlarla bağlı çox vaxt edə biləcəyimiz çox şey yoxdur. Beləliklə, indi onları görməməzlikdən gəlin və yalnız kod haqqında danışaq.

Kodda üç növ asılılıq mövcuddur:

1. Nəzarət etdiyimiz asılılıqlar

Bu yazılmış və bizə və ya təşkilatımıza məxsus kodu.

2. İdarə etmədiyimiz asılılıqlar

Bu, üçüncü tərəf satıcısı və ya açıq mənbəli proqram birliyi tərəfindən yazılmış koddur.

3. Bağlılıqlar bir dəfə çıxarıldı

Bunlar üçüncü tərəfin kod asılılığımızdan asılı olan kod asılılıqlarıdır. (Üç dəfə sürətli deyin!)

Əsasən idarə etmədiyimiz asılılıqlar haqqında danışacağıq.

İdarə etdiyimiz və birdəfəlik qaldırılan asılılıqlar yenə də baş ağrısına səbəb ola bilər, ancaq idarə etdiyimiz asılılıqlar halında birbaşa problemlərə müdaxilə edib azaldacağıq.

Bağlılıq bir dəfə çıxarıldığı təqdirdə, ümumiyyətlə, bizim üçün qayğı göstərmək üçün üçüncü tərəfə etibar edə bilərik, çünki onlar da bunlardan asılıdırlar.

Üçüncü tərəfin kod asılılığı nə üçün yaxşıdır

Veb tətbiqetmənizin böyük bir hissəsi ümumi problemləri həll etmək üçün mövcuddur: identifikasiya, avtorizasiya, məlumat əldə etmə, səhvlə işləmə, naviqasiya, giriş, şifrələmə, maddələrin siyahısını göstərmək, forma girişləri təsdiqləmək və s ...

Hansı texnologiya yığını istifadə etməyinizdən asılı olmayaraq, bu problemlərin ümumi həlli üçün yaxşı bir şans var və asanlıqla əldə edə biləcəyiniz və kod bazanıza qoşula biləcəyiniz kitabxanalardır. Bu işlərdən hər hansı birini tamamilə sıfırdan yazmaq ümumiyyətlə vaxt itkisidir.

Qeyri-adi bir problemi həll edən və ya adi bir problemi qeyri-adi bir şəkildə həll edən kod üzərində cəmləşdirmək istəyirsiniz. Tətbiqinizi dəyərli edən budur: yalnız tətbiqinizə xas olan iş qaydalarını tətbiq edən kod - "gizli sous".

Google'un axtarış və səhifə sıralaması alqoritmi, Facebook'un qrafiki süzülməsi, Netflix'in "sizin üçün tövsiyə olunanlar" bölməsi və məlumatların sıxılması alqoritmləri - bütün bu xüsusiyyətlərin arxasındakı kod "gizli sous" dır.

Üçüncü tərəf kodu - kitabxanalar şəklində - tətbiqinizin bu xüsusiyyətlərini tez bir zamanda həyata keçirməyə imkan verir, buna görə də "gizli sousunuz" üzərində dayanmaq olar.

Üçüncü tərəfin kod asılılığı niyə pisdir

Son bir neçə ildə qurulmuş hər hansı bir mənasız veb-tətbiqə nəzər yetirin və həqiqətən üçüncü kitabxanadan gələn kodun miqdarı ilə heyrətlənəcəksiniz. Üçüncü tərəf kitabxanalarından biri və ya bir neçəsi kökündən dəyişərsə, yoxa çıxsa və ya qırılarsa nə ediləcək?

Açıq mənbə varsa, bəlkə özünüz düzəldə bilərsiniz. Ancaq sahib olmadığınız kitabxanadakı bütün kodu nə dərəcədə yaxşı başa düşürsünüz? Əvvəlcə bir kitabxanadan istifadə etməyinizin böyük bir səbəbi bütün detalları düşünmədən kodun faydalarını əldə etməyinizdir. Ancaq indi yapışmısan. Bəxtinizi tamamilə özünüzə məxsus olmayan və idarə etmədiyiniz bu asılılıqlar ilə bağlamısınız.

Narahat olmayın, bu yazının sonunda yeni bir ümid tapacaqsınız.

Yəqin ki, şişirdilmiş olduğumu və ya sırf akademik baxımdan danışdığımı düşünürsünüz. Sizi inandırım - Üçüncü tərəf kodlarını öz tətbiqlərinə çox möhkəm yapışdıraraq özlərini tamamilə sındıran müştərilərin onlarla nümunəsi var. Budur, yalnız son bir nümunə ...

Keçmiş bir müştəri, Parse adlanan Facebook-a məxsus Backend-as-a-Service provayderindən istifadə edərək öz tətbiqlərini qurdu. Parse xidmətini istehlak etmək üçün Parse tərəfindən verilən JavaScript müştəri kitabxanasından istifadə etdilər. Bu müddətdə, bütün kodlarını, o cümlədən “gizli sous” kodunu da bu kitabxanaya möhkəm bağladılar.

Müştərimin ilkin məhsulu satışından üç ay sonra - həqiqi, pullu müştərilərlə yaxşı bir əlaqə əldə etməyə başladıqları kimi - Parse, bağlandığını elan etdi.

İndi məhsullarına iterasiya etmək və müştəri bazasını artırmaq əvəzinə, müştəri ya Parse'nin öz-özünə ev sahibliyi edən, açıq mənbəli bir versiyasına köçməyin və ya Parse'nin tamamilə dəyişdirilməsini başa düşməli idi.

Bu gənc, yeni başlayan bir tətbiq üçün yaranan pozğunluq o qədər böyük idi ki, müvəkkilim sonda tamamilə tətbiqini sildi.

Yaxşı və pis arasında tarazlıq

Bir neçə il əvvəl, üçüncü tərəf kitabxanalarının faydalarını qoruyarkən riskləri aradan qaldırmaq üçün həll yolum Adapter naxışından istifadə edərək onları sarmaq idi.

Əslində, üçüncü tərəf kodu yazdığınız bir adapter sinifində və ya modulda sarırsınız. Bu, üçüncü tərəf kitabxanalarının funksiyalarını nəzarət etdiyiniz şəkildə ifşa etmək üçün işləyir.

Bu nümunəni istifadə edərək, üçüncü bir kitabxana və ya çərçivə dəyişirsə və ya uzaqlaşarsa, yalnız bir az adapter kodu düzəltməlisiniz. Tətbiqinizin qalan hissəsi qalır.

Dofactory.com saytından Adapter nümunəsi diaqramı

Bu kağızda yaxşı səslənir. Yalnız bir neçə funksiyanı təmin edən öz-özünə bağlılıqlarınız olduqda, bu hiylələri yerinə yetirəcəkdir. Ancaq işlər tez çirkinləşə bilər.

İstənilən reaksiya kitabxanasını (JSX daxil olmaqla) hər hansı birindən istifadə etməzdən əvvəl bağlamağı xəyal edə bilərsinizmi? JQuery, və ya bucaqlı və ya Java-dakı yaz çərçivəsini necə bağlamaq olar? Bu tez bir kabusa çevrilir.

Bu günlərdə daha nüanslı bir yanaşma tövsiyə edirəm ...

Kod bazasına əlavə etmək istədiyiniz hər bir asılılıq üçün iki amili çoxaltmaqla tətbiq edəcəyi risk səviyyəsini qiymətləndirin:

  1. Asılılığın maddi bir şəkildə dəyişməsi ehtimalı.
  2. Asılılığa bir maddi dəyişiklik zərər tətbiq miqdarı.

Aşağıdakıların bəziləri və ya hamısı həqiqət olduqda üçüncü kitabxana və ya çərçivənin dəyişmə ehtimalı azdır:

  • Artıq bir neçə ildir ki, var və bir neçə əsas buraxılış var.
  • Bir çox kommersiya tətbiqi tərəfindən geniş istifadə olunur.
  • Böyük bir təşkilatın - tercihen bir ev adı şirkəti və ya müəssisəsinin aktiv dəstəyinə malikdir.

Üçüncü tərəf kitabxanası və ya çərçivəsi aşağıdakıların bəziləri və ya hamısı həqiqət olduqda tətbiqinizə daha az zərər verəcəkdir:

  • Bütün müddət ərzində istifadə edilmək əvəzinə tətbiqinizin yalnız kiçik bir hissəsi tərəfindən istifadə olunur.
  • Bundan asılı olan kod əvvəllər danışdığım "gizli sous" un bir hissəsi deyildir.
  • Bunu aradan qaldırmaq kod bazasında minimum dəyişiklik tələb edir.
  • Bütün tətbiqiniz çox kiçikdir və tez bir zamanda yenidən yazıla bilər. (Bu ilə diqqətli olun - çox nadir hallarda doğrudur.)

Riskli bir şey, onu bağlamaq və ya tamamilə qarşısını almaq üçün daha çox ehtimal olunur.

Tətbiqinizin dəyər təklifində həqiqətən vacib olan koda gəldikdə - "gizli sousunuz" - bunun üçün çox qoruyucu olmalısınız. Bu kodu mümkün qədər müstəqil edin. Bir asılılıqdan mütləq istifadə etməlisinizsə, birbaşa istinad etməkdənsə, inyeksiya etməyi düşünün. Bundan sonra da ehtiyatlı olun.

Bəzən bu, həqiqətən gözəl olduğunu düşündüyünüz üçüncü tərəf kitabxanasına "yox" demək və ya həqiqətən bir səbəbə və ya başqa səbəbə görə istifadə etmək istədiyiniz deməkdir. Güclü ol. Mənə inanın, ödəyəcək. Yalnız Anguların ilk buraxılışına çox sərmayə qoyan bütün insanlardan və ya hər yerdə Parse istifadə edən keçmiş müştərimdən soruşun. Əyləncəli deyil. Mənə inan.

Əyləncədən danışarkən, buna bir baxın ...

TinyTag tədqiqatçısı üçün asılılıq qrafiki

Yuxarıdakı şəkil, TinyTag Explorer adlı bir tətbiq üçün asılılıq qrafikidir.

Mövcud tətbiqləriniz üçün bir asılılıq qrafiki yaratmaq, asılılığınız tərəfindən təqdim olunan risk səviyyəsini anlamaq üçün əla bir yoldur. JavaScript, C #, Java, PHP və Python da daxil olmaqla müxtəlif dillərdə yuxarıda göstərilənlərə bənzər qrafiklər yaratmaq üçün pulsuz vasitələrin siyahısını topladım. Buradan əldə edə bilərsiniz.

Başqalarına kömək et

Mən biliklərim və təcrübələrimi onlarla bölüşərək bacardığım qədər inkişaf etdiricilərə kömək etmək istəyirəm. Aşağıdakı ❤ tövsiyə düyməsini (yaşıl ürək) tıklayarak mənə kömək edin.

Nəhayət, burada pulsuz asılılıq qrafik generatorlarını siyahısınızı unutmağı unutmayın.