जवाबों:
मुझे इसका उत्तर देने में बहुत देर हो चुकी है। लेकिन, मैं एक उदाहरण साझा करना चाहूंगा, जिसके बारे में मैंने आज ही सोचा था। यदि मैंने आपको 5 मी 5 आयामों के साथ कागज के एक टुकड़े को काटने के लिए कहा, तो निश्चित रूप से आप ऐसा करेंगे। लेकिन मान लीजिए कि मैं आपसे एक ही आयाम के कागज के 1000 टुकड़े करने के लिए कहता हूं। इस मामले में, आप 1000 बार माप नहीं करेंगे; स्पष्ट रूप से, आप 5 मी 5 मी का एक फ्रेम बनाते हैं, और फिर इसकी मदद से आप कम समय में 1000 टुकड़ों के कागज को काटने में सक्षम होंगे। इसलिए, आपने जो किया वह एक ऐसा ढांचा था जो एक विशिष्ट प्रकार का कार्य करेगा। एक ही प्रकार के अनुप्रयोगों के लिए बार-बार एक ही प्रकार का कार्य करने के बजाय, आप एक अच्छी पैकेट में उन सभी सुविधाओं को एक साथ मिलकर एक रूपरेखा बनाते हैं, इसलिए आपके आवेदन के लिए अमूर्तता प्रदान करते हैं और अधिक महत्वपूर्ण रूप से कई अनुप्रयोग।
तकनीकी रूप से, आपको एक रूपरेखा की आवश्यकता नहीं है । यदि आप वास्तव में बहुत ही सरल साइट बना रहे हैं (1992 में वेब पर वापस जाएं), तो आप इसे केवल हार्ड-कोडेड HTML और कुछ CSS के साथ कर सकते हैं।
और अगर आप एक आधुनिक वेबप बनाना चाहते हैं, तो आपको वास्तव में उसके लिए एक फ्रेमवर्क का उपयोग करने की आवश्यकता नहीं है ।
इसके बजाय आप हर बार अपने आप को ज़रूरत के सभी तर्क लिखना चुन सकते हैं। आप अपनी खुद की डेटा-दृढ़ता / भंडारण परत लिख सकते हैं, या - यदि आप बहुत व्यस्त हैं - बस हर एक डेटाबेस एक्सेस के लिए कस्टम SQL लिखें। आप अपनी खुद की प्रमाणीकरण और सत्र हैंडलिंग परतें लिख सकते हैं। और अपने स्वयं के टेम्पलेट तर्क तर्क। और आपके अपने अपवाद-हैंडलिंग तर्क। और आपके अपने सुरक्षा कार्य। और यह सुनिश्चित करने के लिए कि आपकी सभी इकाई परीक्षण रूपरेखा ठीक है। और आपका अपना ... [काफी लंबे समय तक चलता है]
फिर से, यदि आप एक फ्रेमवर्क का उपयोग करते हैं , तो आप अच्छे, आमतौर पर सहकर्मी की समीक्षा और दर्जनों के बहुत अच्छी तरह से परीक्षण किए गए कार्यों से लाभ उठा पाएंगे यदि सैकड़ों अन्य डेवलपर्स नहीं हैं, जो आपके लिए बेहतर हो सकते हैं। आपको निर्माण करना होगा जो आप तेजी से चाहते हैं, बिना समय बिताने के लिए या ऊपर सूचीबद्ध बुनियादी सुविधाओं के बारे में चिंता किए बिना।
आप कम समय में अधिक काम कर सकते हैं, और यह जान सकते हैं कि आप जिस फ्रेमवर्क कोड का उपयोग कर रहे हैं या कर रहे हैं, वह आपके द्वारा स्वयं किए जाने से बेहतर होने की संभावना है।
और इस की लागत? कुछ समय के लिए ढांचा सीखना। लेकिन - जैसा कि वस्तुतः हर वेब देवता वहाँ उपस्थित होगा - यह निश्चित रूप से सीखने लायक समय है कि आप जो भी फ्रेमवर्क चुनते हैं उससे बड़े पैमाने पर (वास्तव में, बड़े पैमाने पर) लाभ मिलता है।
विकिपीडिया पर सारांश (सॉफ्टवेयर फ्रेमवर्क) (पहले गूगल हिट btw) इसे काफी अच्छी तरह से समझाता है:
कंप्यूटर प्रोग्रामिंग में एक सॉफ्टवेयर फ्रेमवर्क, एक अमूर्तता है जिसमें सामान्य कोड प्रदान करने वाला सामान्य कोड विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा चुनिंदा ओवरराइड या विशेष किया जा सकता है। फ्रेमवर्क सॉफ्टवेयर पुस्तकालयों का एक विशेष मामला है जिसमें वे एक अच्छी तरह से परिभाषित एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) में लिपटे हुए कोड के पुन: प्रयोज्य सार हैं, फिर भी उनमें कुछ महत्वपूर्ण विशिष्ट विशेषताएं हैं जो उन्हें सामान्य पुस्तकालयों से अलग करती हैं।
सॉफ्टवेयर फ्रेमवर्क में ये विशिष्ट विशेषताएं हैं जो उन्हें पुस्तकालयों या सामान्य उपयोगकर्ता अनुप्रयोगों से अलग करती हैं:
- नियंत्रण का उलटा - एक ढांचे में, पुस्तकालयों या सामान्य उपयोगकर्ता अनुप्रयोगों के विपरीत, समग्र कार्यक्रम के नियंत्रण का प्रवाह कॉलर द्वारा निर्धारित नहीं किया जाता है, लेकिन फ्रेमवर्क द्वारा।
- डिफ़ॉल्ट व्यवहार - एक रूपरेखा में एक डिफ़ॉल्ट व्यवहार होता है। यह डिफ़ॉल्ट व्यवहार वास्तव में कुछ उपयोगी व्यवहार होना चाहिए, न कि ऑप्स की एक श्रृंखला।
- एक्स्टेंसिबिलिटी - उपयोगकर्ता द्वारा आमतौर पर चयनात्मक ओवरराइडिंग द्वारा या विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा एक फ्रेमवर्क बढ़ाया जा सकता है।
- गैर-परिवर्तनीय फ्रेमवर्क कोड - सामान्य रूप से फ्रेमवर्क कोड को संशोधित करने की अनुमति नहीं है। उपयोगकर्ता रूपरेखा का विस्तार कर सकते हैं, लेकिन इसके कोड को संशोधित नहीं कर सकते।
आपको इसे "आवश्यकता" हो सकती है क्योंकि यह आपको अनुप्रयोगों को विकसित करते समय एक शानदार शॉर्टकट प्रदान कर सकता है, क्योंकि इसमें पहले से ही बहुत कुछ लिखा और परीक्षण किया गया कार्यक्षमता शामिल है। कारण काफी हद तक हम सॉफ्टवेयर पुस्तकालयों का उपयोग करने के कारण के समान है।
पहले से ही बहुत सारे अच्छे जवाब हैं, लेकिन मुझे देखने दें कि क्या मैं आपको एक और दृष्टिकोण दे सकता हूं।
चीजों को काफी सरल करके, आप एक रूपरेखा को एक अनुप्रयोग के रूप में देख सकते हैं जो वास्तविक कार्यक्षमता को छोड़कर पूरा हो गया है। आप कार्यक्षमता और PRESTO में प्लग करते हैं! आपके पास एक आवेदन है।
एक GUI ढांचे पर विचार करें। फ़्रेमवर्क में वह सब कुछ है जो आपको एक एप्लिकेशन बनाने के लिए आवश्यक है। वास्तव में आप अक्सर स्रोत के बहुत कम लाइनों के साथ तुच्छ रूप से एक न्यूनतम आवेदन कर सकते हैं जो बिल्कुल कुछ भी नहीं करता है - लेकिन यह आपको विंडो प्रबंधन, उप-विंडो प्रबंधन, मेनू, बटन बार, आदि देता है जो कि चीजों का ढांचा पक्ष है। अपने एप्लिकेशन की कार्यक्षमता को जोड़ने और "इसे" में सही स्थानों पर प्लग इन करने से आप इस खाली ऐप को चालू करते हैं जो विंडो प्रबंधन आदि से अधिक वास्तविक, पूर्ण-विकसित एप्लिकेशन में कुछ भी नहीं करता है।
वेब ऐप्स के लिए, सर्वर-साइड ऐप्स आदि के लिए समान प्रकार के फ्रेमवर्क हैं। प्रत्येक मामले में फ्रेमवर्क आपको वास्तविक समस्या डोमेन कार्यक्षमता प्रदान करते समय थकाऊ, दोहराव कोड (उम्मीद) के थोक प्रदान करता है। (यह आदर्श है। वास्तव में, फ्रेमवर्क की सफलता अत्यधिक परिवर्तनशील है।)
मैं फिर से जोर देता हूं कि यह एक रूपरेखा क्या है का सरलीकृत दृष्टिकोण है। मैं डरावने शब्दों का उपयोग नहीं कर रहा हूं जैसे "नियंत्रण का उलटा" और जैसे कि अधिकांश रूपरेखाओं में ऐसी डरावनी अवधारणाएं अंतर्निहित हैं। जब से आप एक शुरुआत कर रहे हैं, मैंने सोचा कि मैं आपको शब्दजाल छोड़ दूंगा और एक आसान उपमा के साथ जाऊंगा।
मुझे यकीन नहीं है कि "फ्रेमवर्क" की स्पष्ट-कट परिभाषा है। कभी-कभी पुस्तकालयों के एक बड़े सेट को एक ढांचा कहा जाता है, लेकिन मुझे लगता है कि शब्द का सामान्य उपयोग लाया गया परिभाषा के करीब है।
यह बहुत अच्छा लेख सिर्फ पुस्तकालयों के एक सेट और एक रूपरेखा के बीच अंतर को बताता है:
एक रूपरेखा को पुस्तकालयों के एक सेट के रूप में परिभाषित किया जा सकता है जो कहते हैं कि "हमें फोन न करें, हम आपको कॉल करेंगे।"
एक फ्रेमवर्क कैसे आपकी मदद करता है? क्योंकि खरोंच से कुछ लिखने के बजाय, आप मूल रूप से किसी दिए गए, काम करने वाले एप्लिकेशन का विस्तार करते हैं। आप इस तरह से बहुत अधिक उत्पादकता प्राप्त करते हैं - कभी-कभी परिणामी आवेदन आपके द्वारा एक ही समय सीमा में किए गए कार्य से कहीं अधिक विस्तृत हो सकता है - लेकिन आप आमतौर पर बहुत अधिक लचीलेपन में व्यापार करते हैं।
एक सरल व्याख्या है: एक ढांचा एक पाड़ है कि आप चारों ओर अनुप्रयोगों का निर्माण कर सकते हैं।
एक फ्रेमवर्क आम तौर पर कुछ आधार कार्यक्षमता प्रदान करता है जिसका उपयोग आप कर सकते हैं और अधिक जटिल एप्लिकेशन बनाने के लिए विस्तार कर सकते हैं, सभी प्रकार की चीजों के लिए फ्रेमवर्क हैं। माइक्रोसोफ्ट एमवीसी ढांचा इसका एक अच्छा उदाहरण है। यह आपको एमवीसी पैटर्न का उपयोग करके ग्राउंड बिल्डिंग की वेबसाइट से हटने की जरूरत है, यह वेब अनुरोधों, मार्गों और इस तरह से काम करता है। आपको बस "कंट्रोलर्स" को लागू करना है और "व्यूज़" प्रदान करना है जो एमवीसी ढांचे द्वारा परिभाषित दो निर्माण हैं। MVC फ्रेमवर्क तब आपके नियंत्रकों को कॉल करने और आपके विचार प्रस्तुत करने का काम करता है।
शायद सबसे अच्छा शब्द नहीं है, लेकिन मुझे आशा है कि यह मदद करता है
सबसे निचले स्तर पर, एक ढांचा एक वातावरण है, जहां आपको काम करने के लिए उपकरणों का एक सेट दिया जाता है
यह उपकरण पुस्तकालयों, विन्यास फाइलों आदि के रूप में आते हैं।
यह तथाकथित "पर्यावरण" आपको मूल सेटअप (त्रुटि रिपोर्टिंग, लॉग फ़ाइलें, भाषा सेटिंग्स, आदि) प्रदान करता है ... जिसे संशोधित, विस्तारित और निर्मित किया जा सकता है।
लोगों को वास्तव में फ्रेमवर्क की आवश्यकता नहीं है, यह सिर्फ समय बचाने की इच्छा है, और अन्य सिर्फ व्यक्तिगत वरीयताओं का मामला है।
लोग यही कहेंगे कि एक रूपरेखा के साथ, आपको खरोंच से कोड करने की आवश्यकता नहीं है। लेकिन वे सिर्फ ढांचे के साथ पुस्तकालयों को भ्रमित करने वाले लोग हैं।
मैं यहाँ पक्षपाती नहीं हूँ, मैं वास्तव में अभी एक रूपरेखा का उपयोग कर रहा हूँ।
एक फ्रेमवर्क विशेष समस्या क्षेत्र को कार्यक्षमता / समाधान प्रदान करता है। विकि
से परिभाषा :
कंप्यूटर प्रोग्रामिंग में एक सॉफ्टवेयर फ्रेमवर्क, एक अमूर्तता है जिसमें सामान्य कोड प्रदान करने वाला सामान्य कोड विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा चुनिंदा ओवरराइड या विशेष किया जा सकता है। फ्रेमवर्क सॉफ्टवेयर पुस्तकालयों का एक विशेष मामला है जिसमें वे एक अच्छी तरह से परिभाषित एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) में लिपटे हुए कोड के पुन: प्रयोज्य सार हैं, फिर भी उनमें कुछ महत्वपूर्ण विशिष्ट विशेषताएं हैं जो उन्हें सामान्य पुस्तकालयों से अलग करती हैं।
एक ढांचा हमें "पहले से निर्मित" का उपयोग करने में मदद करता है, एक रूपक की तरह हो सकता है,
लगता है कि पृथ्वी सामग्री प्रोग्रामिंग भाषा है,
और उदाहरण के लिए "एक कैमरा" कार्यक्रम है, और आपने एक नोटबुक बनाने का फैसला किया। आपको हर बार कैमरे को फिर से बनाने की आवश्यकता नहीं है, आप सिर्फ पृथ्वी के ढांचे का उपयोग करें (उदाहरण के लिए एक प्रौद्योगिकी स्टोर के लिए) कैमरा ले जाएं और इसे अपनी नोटबुक में एकीकृत करें।
एक रूपरेखा के कुछ कार्य हैं जिनकी आपको आवश्यकता हो सकती है। आपको शायद कुछ प्रकार के सरणियों की आवश्यकता है जिसमें इनबिल्ट छँटाई तंत्र हो। या हो सकता है कि आपको एक ऐसी खिड़की की आवश्यकता है जहाँ आप कुछ नियंत्रण रखना चाहते हैं, जो आप एक रूपरेखा में पा सकते हैं। यह एक प्रकार का कार्य है जो आपके स्वयं के काम के आसपास एक फ्रेम का विस्तार करता है।
संपादित करें: ठीक है, मैं उन लोगों को खोदने के बारे में हूं जो आप लोग मुझे बताने की कोशिश कर रहे थे;) शायद आपने पंक्तियों के बीच की जानकारी "काम करना जो कि एक फ्रेम के चारों ओर फैली हुई है ..." के बीच जानकारी देखी, इससे पहले कि यह गहरी एन गहरी हो रही है। मैं उम्मीद कर रहा हूं कि आप इसे एक मंजिल देने की कोशिश कर रहे हैं:
सवाल का एक अच्छा स्पष्टीकरण "एक पुस्तकालय और एक फ्रेमवर्क के बीच अंतर" मुझे यहां मिला
http://ifacethoughts.net/2007/06/04/difference-between- एक-पुस्तकालय और एक-ढांचा /
परिभाषाओं से परे, जो कभी-कभी ही समझ में आता है यदि आप पहले से ही समझते हैं, तो एक उदाहरण ने मेरी मदद की।
मुझे लगता है कि मुझे .Net में एक सूची को छांटने पर समझ की झलक मिलती है; एक कार्यक्षमता प्रदान करने वाले ढांचे का एक उदाहरण जो विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा अनुरूप है। List.Sort (IComparer) लें। सॉर्ट एल्गोरिथ्म, जो क्रमबद्ध विधि में .Net ढांचे में रहता है, को तुलना की एक श्रृंखला करने की आवश्यकता है; ऑब्जेक्ट A, B से पहले या बाद में आता है? लेकिन क्रमबद्ध करें खुद की तुलना करने के लिए कोई सुराग नहीं है; केवल छांटे जाने वाले प्रकार को जानता है। आप एक तुलना सॉर्ट एल्गोरिथ्म नहीं लिख सकते हैं जो कई उपयोगकर्ताओं द्वारा पुन: उपयोग किया जा सकता है और उन सभी विभिन्न प्रकारों का अनुमान लगा सकता है जिन्हें आपको सॉर्ट करने के लिए कहा जाएगा। आप उपयोगकर्ता के लिए काम के उस बिट को छोड़ने के लिए मिल गया है। तो यहाँ, सॉर्ट करें, उर्फ फ्रेमवर्क, उपयोगकर्ता कोड में एक विधि को कॉल करता है, जिस प्रकार को सॉर्ट किया जा रहा है ताकि वह तुलना कर सके। (या एक प्रतिनिधि का उपयोग किया जा सकता है;
क्या मुझे यह अधिकार मिला?