कोड अवलंबिता भूत आहे.

आपले अवलंबन प्रत्येक वेळी आपल्याला जाळतील.
“बदल हा एकच स्थिर आहे…” - हेरॅक्लिटस (तत्वज्ञ)

आज आम्ही आमची वेब अनुप्रयोग तयार करण्यासाठी वापरत असलेली साधने, लायब्ररी आणि फ्रेमवर्क आम्ही काही वर्षांपूर्वी वापरलेल्या उपकरणांपेक्षा अगदी वेगळ्या आहेत.

आतापासून थोड्याच वर्षात यापैकी बहुतेक तंत्रज्ञान पुन्हा नाटकीयरित्या बदलले जाईल. तरीही, आपल्यातील बरेचजण यास आपल्या अ‍ॅप्सचा मध्यवर्ती आणि अव्यवस्थित भाग बनवतात.

आम्ही ते आयात करतो, वापरतो आणि त्या महिन्याच्या फ्लेवरमधून वारसा घेतो जणू ते सर्व कायमच कायम राहतील आणि कायम असतील. बरं ... ते नाहीत. आणि ही एक समस्या आहे.

वेब अ‍ॅप्लिकेशन्स विकसित, डिझाइनिंग आणि आर्किटेक्चरिंगच्या 20+ वर्षानंतर, मी दोन महत्त्वाच्या सत्याचे कौतुक केले आहे:

  1. बाह्य अवलंबित्व कोणत्याही अनुप्रयोगाच्या दीर्घ मुदतीची स्थिरता आणि व्यवहार्यतेस मोठा धोका आहे.
  2. बाह्य अवलंबनाचा फायदा न घेता कोणत्याही प्रकारचे क्षुल्लक अॅप तयार करणे - हे अशक्य नसल्यास - वाढत्या अवघड आहे.

हा लेख या दोन सत्यांमध्ये समेट घडवून आणण्याविषयी आहे जेणेकरून आमच्या अॅप्समध्ये दीर्घकालीन जगण्याची उत्तम संधी असेल.

ससा छिद्र खरोखर खूप खोल आहे.

आम्ही कोडवर जाण्यापूर्वी डझन किंवा त्याहून अधिक गोष्टींचा विचार करणे आपल्या वेब अ‍ॅप्सवर अवलंबून असलेल्या सर्व गोष्टींचा विचार करण्यास प्रारंभ केल्यासः

  • शक्ती
  • कनेक्टिव्हिटी
  • फायरवॉल
  • डीएनएस
  • सर्व्हर हार्डवेअर (सीपीयू, डिस्क, राम,…)
  • थंड
  • आभासीकरण प्लॅटफॉर्म
  • कंटेनर प्लॅटफॉर्म
  • ऑपरेटिंग सिस्टम
  • वेब सर्व्हर प्लॅटफॉर्म
  • अ‍ॅप सर्व्हर प्लॅटफॉर्म
  • अंतर्जाल शोधक

विकसक म्हणून या गोष्टींविषयी माहिती असणे चांगले आहे, परंतु त्यांच्याबद्दल आपण बरेच काही करू शकत नाही. तर, आत्ता त्यांच्याकडे दुर्लक्ष करू आणि फक्त कोड्याबद्दल बोलू.

कोडमध्ये, तीन प्रकारची अवलंबन आहेत:

1. आम्ही नियंत्रित अवलंबन

हा कोड आमच्याद्वारे किंवा आमच्या संस्थेच्या मालकीचा आहे.

२. अवलंबन ज्यावर आम्ही नियंत्रण ठेवत नाही

हा तृतीय पक्षाच्या विक्रेता किंवा मुक्त स्त्रोत सॉफ्टवेअर समुदायाने लिहिलेला कोड आहे.

3. अवलंबित्व एकदा काढले

हे आमच्या तृतीय-पक्षाच्या कोड अवलंबितांवर अवलंबून असणारी कोड अवलंबिता आहेत. (असे म्हणा की तीन वेळा वेगवान!)

आम्ही प्रामुख्याने ज्या नियंत्रणावर नियंत्रण ठेवत नाही त्याबद्दल बोलत आहोत.

एकदा आम्ही नियंत्रित केलेली अवलंबन आणि अवलंबन अजूनही डोकेदुखीस कारणीभूत ठरू शकतात, परंतु आपण नियंत्रित असलेल्या अवलंबित्वाच्या बाबतीत आम्ही कोणत्याही अडचणीत थेट हस्तक्षेप करण्यास आणि कमी करण्यास सक्षम असले पाहिजे.

एकदा परावलंबनांच्या बाबतीत, आम्ही देखील तिची काळजी घेण्यासाठी तिसर्या पक्षावर अवलंबून राहू शकतो, कारण ते देखील यावर अवलंबून असतात.

तृतीय-पक्ष कोड अवलंबिता का चांगली आहेत

आपल्या वेब अनुप्रयोगाचा एक मोठा भाग सामान्य समस्या सोडवण्यासाठी अस्तित्त्वात आहे: प्रमाणीकरण, अधिकृतता, डेटा प्रवेश, त्रुटी हाताळणी, नेव्हिगेशन, लॉगिंग, कूटबद्धीकरण, आयटमची सूची प्रदर्शित करणे, फॉर्म इनपुट सत्यापित करणे आणि यासारख्या ...

आपण कोणते तंत्रज्ञान वापरता याची पर्वा न करता, या समस्यांचे सामान्य निराकरण अस्तित्त्वात असण्याची एक चांगली संधी आहे आणि आपण आपल्या कोडेबेसवर सहजपणे मिळवू शकतील आणि प्लग-इन करू शकता अशा लायब्ररी म्हणून उपलब्ध आहेत. यापैकी कोणतीही सामग्री सुरवातीपासून पूर्णपणे लिहिणे हा सहसा वेळेचा अपव्यय आहे.

आपणास कोडवर लक्ष केंद्रित करायचे आहे जे एकतर असामान्य समस्याचे निराकरण करते किंवा सामान्य समस्या एक असामान्य मार्गाने सोडवते. यामुळेच आपला अनुप्रयोग मौल्यवान ठरतो: एकट्या आपल्या अॅपसाठी अद्वितीय असलेल्या व्यवसाय नियमांची अंमलबजावणी करणारा कोड - “गुप्त सॉस.”

गूगलचा शोध आणि पेज रँकिंग अल्गोरिदम, फेसबुकची टाइमलाइन फिल्टरिंग, नेटफ्लिक्सचा “तुमच्यासाठी शिफारस केलेला” विभाग आणि डेटा कॉम्प्रेशन अल्गोरिदम- या सर्व वैशिष्ट्यांमागील कोड “सिक्रेट सॉस” आहे.

तृतीय-पक्ष कोड - लायब्ररीच्या स्वरूपात - आपल्याला आपल्या अ‍ॅपची त्या व्यावसायिक वैशिष्ट्यांची द्रुतपणे अंमलबजावणी करण्यास अनुमती देते, जेणेकरून आपण आपल्या “गुप्त सॉस” वर लक्ष केंद्रित करू शकता.

तृतीय-पक्ष कोड अवलंबिता का वाईट आहेत

गेल्या दोन-काही वर्षांत तयार केलेल्या कोणत्याही क्षुल्लक वेब-अ‍ॅपवर लक्ष द्या आणि तृतीय-पक्षाच्या लायब्ररीतून प्रत्यक्षात येणार्‍या कोडच्या प्रमाणात आपण अचंबित व्हाल. त्यापैकी एक किंवा अधिक तृतीय-पक्षाच्या ग्रंथालयांमध्ये मोठ्या प्रमाणात बदल झाले किंवा अदृश्य झाले किंवा ब्रेक लागले तर काय करावे?

जर ते मुक्त-स्त्रोत असेल तर कदाचित आपण स्वतःस ते निराकरण करू शकाल. परंतु आपल्या स्वत: च्या मालकीची नसलेली लायब्ररीमधील सर्व कोड आपल्याला किती चांगले समजले आहे? आपण प्रथम लायब्ररी वापरण्याचे एक मोठे कारण म्हणजे सर्व तपशीलांची चिंता न करता कोडचे फायदे मिळवणे. पण आता तुम्ही अडकले आहात. आपण आपले भाग्य आपल्या मालकीचे नसलेल्या आणि नियंत्रित नसलेल्या या अवलंबित्वाशी पूर्णपणे जोडले आहे.

काळजी करू नका, या लेखाच्या शेवटी, आपल्याला एक नवीन आशा मिळेल.

कदाचित आपणास असे वाटते की मी अतिशयोक्ती करीत आहे, किंवा पूर्णपणे शैक्षणिक दृष्टिकोनातून बोलत आहे. मी तुम्हाला हमी देतो - माझ्याकडे क्लायंटची डझनभर उदाहरणे आहेत ज्यांनी त्यांच्या अ‍ॅपमध्ये थर्ड-पार्टी कोड एम्बेड करून पूर्णपणे स्नूकर केले. येथे फक्त एक अलीकडील उदाहरण आहे ...

माझ्या एका पूर्वीच्या क्लायंटने पर्स नावाच्या फेसबुकच्या मालकीच्या बॅकएंड-ए-अ-सर्व्हिस प्रदात्याचा वापर करून त्यांचे अ‍ॅप तयार केले. पार्से सेवा वापरण्यासाठी त्यांनी पार्सेद्वारे प्रदान केलेली जावास्क्रिप्ट क्लायंट लायब्ररी वापरली. प्रक्रियेत, त्यांनी या सर्व लायब्ररीत “गुप्त सॉस” कोडसह - त्यांच्या सर्व कोडची कडकडीत जोडणी केली.

माझ्या क्लायंटच्या प्रारंभीचे उत्पादन लाँच झाल्यानंतर तीन महिन्यांनंतर - ज्याप्रमाणे त्यांना वास्तविक, देय ग्राहकांसह काही चांगले प्रशिक्षण मिळू लागले - पार्सेने जाहीर केले की ते बंद होत आहे.

आता त्यांच्या उत्पादनावर पुनरावृत्ती करण्याकडे लक्ष केंद्रित करण्याऐवजी आणि त्यांचा ग्राहक आधार वाढवण्याऐवजी, माझ्या क्लायंटला पार्सेच्या स्व-होस्ट केलेल्या, मुक्त-स्त्रोत आवृत्तीमध्ये कसे स्थलांतर करावे किंवा पार्सची पूर्णपणे पुनर्स्थित कशी करावी याचा शोध घ्यावा लागला.

एका तरूण, नवख्या अनुप्रयोगामुळे निर्माण झालेला व्यत्यय इतका प्रचंड होता की माझ्या क्लायंटने अखेरीस हा अनुप्रयोग पूर्णपणे काढून टाकला.

चांगल्या आणि वाईट गोष्टींचा समतोल राखणे

कित्येक वर्षांपूर्वी तृतीय-पक्ष-लायब्ररीचे फायदे राखून ठेवताना जोखिमांवर विजय मिळविण्याचे माझे जाण्याचे समाधान अ‍ॅडॉप्टर पॅटर्नचा वापर करून लपेटणे होते.

मूलत :, आपण तृतीय पक्षाचा कोड अ‍ॅडॉप्टर वर्गात किंवा आपण लिहिलेला मॉड्यूलमध्ये लपेटता. हे नंतर आपण नियंत्रित करता त्या तृतीय पक्षाच्या लायब्ररीची कार्ये उघडकीस आणण्याचे कार्य करते.

हा नमुना वापरुन, जर तृतीय-पक्षाची लायब्ररी किंवा फ्रेमवर्क बदलला किंवा निघून गेला तर आपल्याला फक्त थोडा अ‍ॅडॉप्टर कोड निश्चित करावा लागेल. आपला उर्वरित अ‍ॅप अखंड राहील.

डोफॅक्टरी डॉट कॉम वरून अ‍ॅडॉप्टर नमुना आकृती

हे कागदावर चांगले वाटते. जेव्हा आपल्याकडे स्वयंपूर्ण निर्भरता असते जी केवळ काही कार्ये प्रदान करते, हे युक्ती करेल. पण गोष्टी कुरुप वेगवान होऊ शकतात.

आपण कोणतीही प्रतिक्रिया वापरण्यापूर्वी संपूर्ण रिएक्ट लायब्ररी (जेएसएक्ससह) लपेटण्याची कल्पना करू शकता? JQuery, किंवा टोकदार, किंवा जावा मधील वसंत frameworkतु फ्रेमवर्क लपेटण्याविषयी काय? हे पटकन एक स्वप्न पडते.

हे दिवस मी आणखीन सूक्ष्म दृष्टिकोनाची शिफारस करतो ...

आपण आपल्या कोडबेसमध्ये जोडू इच्छित असलेल्या प्रत्येक अवलंबनासाठी, दोन घटकांची गुणाकार करुन ते कोणत्या जोखमीच्या पातळीचे मूल्यांकन करेल:

  1. भौतिक मार्गावर अवलंबन बदलण्याची शक्यता आहे.
  2. एखाद्या अवयवावर अवलंबून असलेल्या वस्तू बदलल्यास त्याचे नुकसान आपल्या अनुप्रयोगास होते.

जेव्हा काही किंवा सर्व गोष्टी सत्य असतील तेव्हा तृतीय-पक्षाची लायब्ररी किंवा चौकट बदलण्याची शक्यता कमी असते.

  • हे बर्‍याच वर्षांपासून आहे आणि बर्‍याच मोठ्या प्रकाशनांमध्ये त्याचे प्रकाशन झाले आहे.
  • बर्‍याच व्यावसायिक अनुप्रयोगांद्वारे याचा मोठ्या प्रमाणात वापर केला जातो.
  • त्याला मोठ्या संस्थेचे सक्रिय समर्थन आहे - शक्यतो घरगुती नावाची कंपनी किंवा संस्था.

जेव्हा काही किंवा सर्व गोष्टी सत्य असतील तेव्हा तृतीय-पक्षाची लायब्ररी किंवा फ्रेमवर्क आपल्या अनुप्रयोगाचे नुकसान कमी करेल:

  • हे संपूर्णपणे वापरण्याऐवजी केवळ आपल्या अनुप्रयोगाच्या लहान भागाद्वारे वापरले जाते.
  • त्यावर अवलंबून असलेला कोड मी यापूर्वी बोललेल्या “सेक्रेट सॉस” चा भाग नाही.
  • ते काढण्यासाठी आपल्या कोडबेसमध्ये किमान बदल आवश्यक आहेत.
  • आपला संपूर्ण अनुप्रयोग खूप लहान आहे आणि द्रुतपणे पुन्हा लिहिता येतो. (याविषयी सावधगिरी बाळगा - हे फारच क्वचितच खरे आहे.)

धोकादायक काहीतरी आहे, आपण त्यास लपेटण्याची किंवा पूर्णपणे टाळण्याची अधिक शक्यता.

जेव्हा आपल्या अनुप्रयोगाच्या मूल्य प्रस्तावासाठी खरोखरच मध्यवर्ती असलेल्या कोडचा विचार केला जातो - आपल्या “सिक्रेट सॉस” - तेव्हा आपण त्यास अत्यंत संरक्षक असणे आवश्यक आहे. तो कोड शक्य तितक्या स्वतंत्र करा. जर आपल्याला पूर्णपणे अवलंबन वापरण्याची आवश्यकता असेल तर त्यास थेट संदर्भित करण्याऐवजी त्यास इंजेक्शन देण्याचा विचार करा. तरीही, सावधगिरी बाळगा.

कधीकधी याचा अर्थ असा होतो की आपल्यास तृतीय-पक्षाच्या लायब्ररीमध्ये "नाही" म्हणणे खरोखर मस्त आहे, किंवा आपण खरोखर एका कारणासाठी किंवा दुसर्‍या कारणासाठी वापरू इच्छित आहात. सशक्त व्हा. माझ्यावर विश्वास ठेवा, ते फेडेल. त्या सर्व लोकांना विचारा ज्यांनी एंगुलरच्या पहिल्याच रिलीझमध्ये मोठ्या प्रमाणात गुंतवणूक केली आहे किंवा माझ्या आधीच्या क्लायंटने ज्यांनी सर्वत्र पार्स वापरला होता. मजा नाही. माझ्यावर विश्वास ठेव.

गमतीशीर बोलणे, हे पहा ...

टिनीटॅग एक्सप्लोररसाठी अवलंबन आलेख

वरील प्रतिमा टिनीटाग एक्सप्लोरर नावाच्या अनुप्रयोगावरील अवलंबन आलेख आहे.

आपल्या अस्तित्वातील अ‍ॅप्ससाठी अवलंबन आलेख तयार करणे हा आपल्या अवलंबित्वाद्वारे जोखमीची पातळी ओळखण्याचा एक चांगला मार्ग आहे. मी जावास्क्रिप्ट, सी #, जावा, पीएचपी आणि पायथन यासह अनेक भाषांमध्ये वरील प्रमाणेच ग्राफ तयार करण्यासाठी विनामूल्य साधनांची सूची एकत्र ठेवली आहे. आपण ते येथे मिळवू शकता.

इतरांना मदत करा

मला माझे ज्ञान आणि अनुभव सामायिक करून मी शक्य तितक्या विकसकांना मदत करू इच्छित आहे. कृपया खालील ❤ शिफारस बटणावर (ग्रीन हार्ट) क्लिक करून मला मदत करा.

शेवटी, आपली विनामूल्य अवलंबित्व आलेख जनरेटरची यादी येथे घेण्यास विसरू नका.