Skip to content
This page has been auto-translated and may contain errors.View in English

फ्रेमवर्क क्या है?

docs.scrimba.com

मान लीजिए आप एक छोटा वेब ऐप बना रहे हैं: अकाउंट्स, एक फीड, एक सेटिंग्स पेज। आपके अपने विचार स्क्रीन पर दिखने से पहले, आपको ऐसा कोड चाहिए जो URLs को पेजों में बदले, ऐसा कोड जो डेटाबेस से बात करे, ऐसा कोड जो पासवर्ड को सुरक्षित रखे, और ऐसा कोड जो कुछ बदलने पर स्क्रीन को फिर से खींचे। यह सब आपके ऐप का विचार नहीं है। हर ऐप को इसकी जरूरत है, और अधिकांश चीज प्रोजेक्ट से प्रोजेक्ट में समान होती है।

आप वह सभी प्लंबिंग खुद लिख सकते थे, और लोगों ने वर्षों तक किया। यह धीमा है, यह वह जगह है जहां सूक्ष्म बग रहते हैं, और हर टीम का एक समान, थोड़ा टूटा हुआ संस्करण होता था। एक फ्रेमवर्क संचित उत्तर है: साझा किया गया प्लंबिंग, एक बार लिखा गया और हजारों प्रोजेक्ट्स द्वारा कठोर किया गया, एक संरचना के साथ पैकेज किया गया जो आपको बताता है कि आपका कोड कहां जाता है। आप उन हिस्सों को बनाते हैं जो आपके प्रोजेक्ट को अनूठा बनाते हैं; फ्रेमवर्क उन हिस्सों को संभालता है जो हर प्रोजेक्ट दोहराता है।

फ्रेमवर्क केवल एक वेब चीज़ नहीं है। वे हर जगह मौजूद हैं जहां प्रोग्राम बनाए जाते हैं, और यह अध्याय विचार के बारे में है, किसी भी भाषा और किसी भी क्षेत्र में।

फ्रेमवर्क क्या है (और लाइब्रेरी क्या है)

शब्द का उपयोग ढीले ढाले तरीके से होता है, इसलिए यहाँ वह अंतर है जो वास्तव में मायने रखता है, कोड में:

js
// एक लाइब्रेरी: आपका कोड प्रभारी है, और जब उपयोगी हो तो लाइब्रेरी को कॉल करता है।
const label = dateLibrary.format(order.createdAt, "MMM D");

// एक फ्रेमवर्क: फ्रेमवर्क प्रभारी है, और आपके द्वारा प्लग किए गए कोड को कॉल करता है।
export default function OrdersPage() {
  return listOfOrders();
}

पहली पंक्ति आप स्टीयरिंग कर रहे हैं: आपका प्रोग्राम चलता है, और यह एक काम के लिए एक उपकरण उधार लेता है। दूसरा अलग तरह का है। आप OrdersPage को कभी खुद कॉल नहीं करते। आप इसे लिखते हैं, इसे वहां रखते हैं जहां फ्रेमवर्क उम्मीद करता है, और फ्रेमवर्क इसे सही समय पर कॉल करता है, यहां, जब कोई विजिटर ऑर्डर पेज खोलता है।

उस फ्लिप का एक नाम है: नियंत्रण का व्युत्क्रमण। एक लाइब्रेरी के साथ, आपका कोड प्रोग्राम के प्रवाह को नियंत्रित करता है और सहायकों को उधार लेता है। एक फ्रेमवर्क के साथ, फ्रेमवर्क प्रवाह को नियंत्रित करता है, और आपका कोड उन रिक्त स्थान को भरता है जो यह आपके लिए छोड़ता है। एक उपयोगी संक्षेप: आप एक लाइब्रेरी को कॉल करते हैं; एक फ्रेमवर्क आपको कॉल करता है।

प्रोग्रामिंग के हर कोने में एक ही आकार दिखाई देता है। Django वेब अनुरोध प्राप्त करता है और आपके view फ़ंक्शन को कॉल करता है। Flutter ऐप चलाता है और आपके widgets से पूछता है कि क्या खींचना है। Unity गेम लूप चलाता है और हर फ्रेम पर आपकी scripts को कॉल करता है। pytest आपके test फ़ंक्शन को ढूंढता है और आपके लिए उन्हें चलाता है। अलग-अलग क्षेत्र, एक विचार: फ्रेमवर्क इंजन का मालिक है, और आप उन हिस्सों की आपूर्ति करते हैं जिन्हें यह रखने के लिए बनाया गया था।

अगर एक चित्र मदद करता है: एक लाइब्रेरी एक टूलबॉक्स है जो आपके पास बैठा है जबकि आप बनाते हैं, और आप हर बार एक उपकरण उपयोगी होता है तो इसमें पहुंचते हैं। एक फ्रेमवर्क एक इमारत के फ्रेम के करीब है, जब आप पहुंचते हैं तो पहले से खड़ा होता है। दीवारें, तारांकन, और प्लंबिंग के अपनी जगह है, और आपका काम उन कमरों में जाता है जो इमारत को आपका बनाते हैं। दोनों आपका प्रयास बचाते हैं; अंतर यह है कि कौन निर्माण के आकार का फैसला करता है।

संरचना के साथ अपेक्षाएं आती हैं, और यह एक विशेषता है। अधिकांश फ्रेमवर्क कन्वेंशन ओवर कॉन्फ़िगरेशन का अभ्यास करते हैं: फ़ाइलों को वहां रखें जहां फ्रेमवर्क अपेक्षा करता है, चीजों का नाम वैसे ही रखें जैसे यह अपेक्षा करता है, और सब कुछ बिना सेटअप कोड के अपने आप तार हो जाता है। Rails ने वाक्यांश को प्रसिद्ध बनाया, और अधिकांश आधुनिक फ्रेमवर्क इसके कुछ संस्करण का पालन करते हैं। पेऑफ यह है कि कोई भी डेवलपर जो फ्रेमवर्क को जानता है इस पर बनाया गया कोई भी प्रोजेक्ट खोल सकता है और जान सकता है कि कहां देखना है। कीमत यह है कि कन्वेंशन सीखने के लिए एक और चीज़ है कि कुछ काम करने से पहले, और उनसे लड़ना लगभग हमेशा उनका पालन करने की तुलना में अधिक दर्दनाक है।

नियंत्रण का व्युत्क्रमण बदल देता है कि आप एक प्रोग्राम को कैसे पढ़ते और डिबग करते हैं। एक सादे स्क्रिप्ट में, कॉल स्टैक आपके कोड में शुरू होता है और इसमें सब कुछ आपका है। एक फ्रेमवर्क के अंदर, स्टैक फ्रेमवर्क इंटर्नल में गहरे शुरू होता है, और आपके फ़ंक्शन उन एंट्री के रूप में दिखाई देते हैं जो फ्रेमवर्क को कॉल करने के लिए चुना गया: hooks, handlers, lifecycle methods। पुरानी मजाक इसे बिल्कुल वर्णित करती है: "हमें न बुलाएं, हम आपको बुलाएंगे।" व्यावहारिक रूप से, इसका मतलब है कि एक फ्रेमवर्क सीखना इसके API सतह के बारे में कम है और इसके समय के बारे में अधिक है, आपके कौन से फ़ंक्शन को यह कॉल करता है, कब, और यह क्या अपेक्षा करता है। जब व्यवहार आपको आश्चर्य चकित करता है, तो उत्तर आमतौर पर उस समय में रहता है, और फ्रेमवर्क का lifecycle दस्तावेज़ नक्शा है जो खोल कर रखने लायक है।

Junoफ्रेमवर्क और लाइब्रेरी एक लाइब्रेरी एक टूलबॉक्स है: आपका प्रोग्राम शो चलाता है और जब इसे जरूरत हो तो एक उपकरण पकड़ता है। एक फ्रेमवर्क एक इमारत के फ्रेम की तरह अधिक है: संरचना पहले से ही ऊपर है, और आप इसमें अपनी कमरें बनाते हैं। संक्षेप जो मेरे लिए क्लिक किया है कि आप एक लाइब्रेरी को कॉल करते हैं, लेकिन एक फ्रेमवर्क आपको कॉल करता है।
Junoफ्रेमवर्क और लाइब्रेरी आप एक लाइब्रेरी को कॉल करते हैं; एक फ्रेमवर्क आपको कॉल करता है, और उस फ्लिप को नियंत्रण का व्युत्क्रमण कहा जाता है। फ्रेमवर्क इसे कन्वेंशन के साथ जोड़ते हैं: कोड को वहां रखें जहां फ्रेमवर्क अपेक्षा करता है और यह खुद को तार देता है। कन्वेंशन का पालन करें बजाय उनसे लड़ने के, यह एक को अच्छी तरह से उपयोग करने का अधिकांश कौशल है।
Junoफ्रेमवर्क और लाइब्रेरी नियंत्रण का व्युत्क्रमण मतलब है कि कॉल स्टैक फ्रेमवर्क में शुरू होता है और आपका कोड hooks के रूप में दिखाई देता है जो यह आह्वान करता है। तो सीखने की असली चीज़ है समय: आपके कौन से फ़ंक्शन को कॉल किया जाता है, कब, और फ्रेमवर्क क्या अपेक्षा करता है। एक फ्रेमवर्क ऐप को डिबग करना इसके lifecycle को पढ़ना है, और जितना जल्दी यह जादू की तरह महसूस करना बंद करता है, उतना बेहतर।

फ्रेमवर्क आपको क्या देता है, और इसकी कीमत क्या है

फ्रेमवर्क का मामला ठोस है। समस्याएं जो आपको हफ्तों का समय लगेंगी वह पहले से ही हल आती हैं, और उन लोगों द्वारा हल की जाती हैं जो कठिन किनारे को पहले मारते हैं: पासवर्ड हैंडलिंग, फॉर्म सत्यापन, राउटिंग, रेंडरिंग। आपके प्रोजेक्ट को एक संरचना मिलती है जो एक नया टीम का सदस्य मिनटों में पहचान सकता है, क्योंकि यह उसी फ्रेमवर्क पर हर दूसरे प्रोजेक्ट के समान है। और आप एक इकोसिस्टम को विरासत में लेते हैं: प्लगइन, ट्यूटोरियल, उत्तर दिए गए प्रश्न, और लोगों का एक किराये का पूल जो पहले से ही अपने रास्ते जानते हैं।

लागतें समान रूप से ठोस हैं, और वे समान सीधे नज़रिए के लायक हैं। एक फ्रेमवर्क एक बड़ी निर्भरता है जिसे आप नियंत्रित नहीं करते हैं, अपने बग के साथ, अपनी गति के साथ, और अपनी राय के साथ। कोड की पहली पंक्ति प्रस्तुत करने से पहले एक सीखने की वक्र है, और कुछ जो आप सीखते हैं वह फ्रेमवर्क के बारे में ज्ञान है न कि प्रोग्रामिंग के बारे में। आपका कोड इसके आकार में झुकता है, जो छोड़ना कठिन बनाता है जितना लंबे आप रहते हैं। और फ्रेमवर्क चलते हैं: प्रमुख संस्करण आते हैं, पैटर्न को फिर से सोचा जाता है, और अपडेट रहना चलना जारी रखता है जो आपको सादा कोड के रूप में नहीं था।

कोई भी सूची अपने आप में जीतती है। संतुलन पूरी तरह से प्रोजेक्ट पर निर्भर करता है, इसलिए किसी भी फ्रेमवर्क से पूछने का सवाल है "क्या यह इस प्रोजेक्ट को सरल बनाता है"। एक फ्रेमवर्क अपनी जगह अर्जित करता है आपके प्रोजेक्ट को सरल बनाकर। जब ऐसा करता है, तो इसे खुशी से उपयोग करें। जब ऐसा नहीं करता है, तो अगले दो अध्याय इसे जल्दी पहचानने के बारे में हैं।

इकोसिस्टम प्रभाव प्लस साइड पर कम आंका गया प्रवेश है। एक परिपक्व फ्रेमवर्क पर, संभावना है कि आपकी समस्या नई हो शून्य के करीब है: प्रमाणीकरण, फ़ाइल अपलोड, ईमेल भेजना, परिनियोजन, किसी ने प्रत्येक को पैकेज या दस्तावेज़ किया है। यह निर्माण के कई दिनों को असेंबलिंग के घंटों में रूपांतरित करता है। दर्पण किए गए प्रवेश माइनस साइड पर यह है कि यह धाराप्रवाहता फ्रेमवर्क में दर्शाया गया है: कुछ जो आप जानते हैं "Django कैसे करता है" के बजाय "वेब सर्वर कैसे काम करते हैं"। हर सुविधा के तहत सामान्य विचार पर नज़र रखें, जो ये दस्तावेज़ हैं।

दो लागतें केवल उत्पादन में दिखाई देती हैं। पहला, अमूर्तताओं को रिसाव होता है: फ्रेमवर्क की सुविधाजनक सतह वास्तविक मशीनरी को छुपाती है, और जिस दिन जादू गलत व्यवहार करता है, आप मशीनरी को डिबग करते हुए अंत करते हैं, अब एक अतिरिक्त परत के माध्यम से जिसे आपने नहीं लिखा। समझने के लिए बजट करें कि आपका फ्रेमवर्क नीचे क्या करता है, क्योंकि अंततः आपको इसकी जरूरत होगी। दूसरा, अपग्रेड ट्रेडमिल एक असली लाइन आइटम है: एक बड़े कोडबेस के प्रमुख संस्करण माइग्रेशन हफ्तों को अवशोषित कर सकते हैं, और उन्हें छोड़ देना चुपचाप अपैच किए गए सुरक्षा समस्याओं में बदल जाता है। दोनों को सादा कोड विकल्प के खिलाफ तौलें, जिसके पास कम चलते हिस्से हैं और कुछ भी माइग्रेट नहीं करना है, लेकिन हर हल की गई समस्या को फिर से खोलता है आपको फिर से हल करने के लिए, अपने जोखिम पर। यह व्यापार एक फ्रेमवर्क चुनना और सीखना का विषय है।

Junoफ्रेमवर्क क्या देते और खर्च करते हैं एक फ्रेमवर्क आपको हल की गई समस्याएं, एक पहचानने योग्य संरचना, और मदद का एक पूरा इकोसिस्टम देता है। बदले में आप एक बड़ी निर्भरता, एक सीखने की वक्र, और इसका तरीका लेते हैं। दोनों पक्ष वास्तविक हैं, इसलिए सवाल यह है कि क्या यह आपके विशेष प्रोजेक्ट को सरल बनाता है। कभी-कभी उत्तर एक खुशी हां है, और कभी-कभी सादा कोड शांत पथ है!
Junoफ्रेमवर्क क्या देते और खर्च करते हैं इकोसिस्टम व्यापार का कम आंका गया आधा है: एक परिपक्व फ्रेमवर्क पर लगभग कोई भी समस्या जो आप मारते हैं नई नहीं है। हर सुविधा के तहत सामान्य विचार पर ध्यान देते रहें, या आपका ज्ञान "यह फ्रेमवर्क कैसे करता है" के बजाय "चीज़ कैसे काम करती है" बन जाता है। फ्रेमवर्क प्रोजेक्ट को सरल बनाना चाहिए; यह पूरा परीक्षण है।
Junoफ्रेमवर्क क्या देते और खर्च करते हैं दो लागतें आपको बाद में बिल देती हैं: अमूर्तताओं को रिसाव होता है, इसलिए एक दिन आप फ्रेमवर्क की मशीनरी को एक परत के माध्यम से डिबग करते हैं जिसे आपने नहीं लिखा, और प्रमुख संस्करण माइग्रेशन असली काम है जिसे हमेशा नहीं छोड़ा जा सकता। मैंने दोनों चालान का भुगतान किया है; न तो मजेदार है, और न ही कोई सिद्धांत के लिए कारण है।

यह अगली कहां जाता है

विचार के साथ, अगला स्वाभाविक सवाल यह है कि वहां क्या है: फ्रेमवर्क के प्रकार प्रमुख परिवारों का दौरा करते हैं, वेब से गेम से परीक्षण तक, हर एक में सबसे लोकप्रिय विकल्प के साथ। इसके बाद, एक फ्रेमवर्क चुनना और सीखना एक चुनने के बारे में, एक को सीखने के बारे में, और जानने के बारे में व्यावहारिक हो जाता है कि आपको कभी किसी की जरूरत नहीं है। और अगर ऊपर JavaScript उदाहरण अपरिचित महसूस हुए, तो JavaScript ट्रैक भाषा को कवर करता है, जो किसी भी फ्रेमवर्क बनाने से पहले सही पहला कदम है।