मैं अक्सर लोगों को यह कहता हूं कि कुछ सॉफ्टवेयर "बहुत राय" है या माइक्रोसॉफ्ट "अन-राय" फ्रेमवर्क लिखने के लिए कहता है। इसका वास्तव में क्या मतलब है?राय सॉफ्टवेयर क्या है?
उत्तर
यदि कोई ढांचा माना जाता है, तो यह आपको चीजों को करने के तरीके में लॉक या गाइड करता है।
उदाहरण के लिए: कुछ लोग मानते हैं कि एक टेम्पलेट सिस्टम को उपयोगकर्ता परिभाषित विधियों और कार्यों तक पहुंच प्रदान नहीं करना चाहिए क्योंकि यह कच्चे HTML को वापस करने के लिए सिस्टम को खोलता है। तो एक रायबद्ध ढांचा डेवलपर केवल डेटा संरचनाओं तक पहुंच की अनुमति देता है। डिज़ाइन द्वारा, सॉफ़्टवेयर सीमित है और डिज़ाइनर को चीजों को करने में प्रोत्साहित करता है।
एक और उदाहरण (taken from the signals link) wiki का है। विकी के डिजाइनरों में बहुत सारी राय थीं। उन्होंने सोचा था कि एचटीएमएल लोगों को लिखने के लिए बहुत जटिल था, इसलिए वे जो भी महसूस करते थे, वे सामग्री को अपडेट करने का एक और प्राकृतिक तरीका था। उन्होंने इसे फैंसी डिज़ाइन से भी हटा दिया क्योंकि उन्हें लगा कि डिजाइन की तुलना में फोकस सामग्री पर अधिक होना चाहिए।
ऐप्पल के उत्पादों को डिजाइन करते समय मजबूत राय होती है।
गैर-विचारित सॉफ्टवेयर डिज़ाइन PERL/PHP की तरह अधिक है। यह डेवलपर को डेवलपर को सही निर्णय लेने और अपने हाथों में अधिक नियंत्रण रखने की अनुमति देता है।
मैं माइक्रोसॉफ्ट को गैर-विचारित कॉलम में भी रखूंगा। माइक्रोसॉफ्ट फ्रेमवर्क का एक अच्छा उदाहरण जो अनसुलझा है: .NET
। सीएलआर और चश्मा खोलकर, यह इसे सभी प्रकार की भाषाओं और कार्यान्वयन की शैलियों के लिए खोला गया।
मैं यह नहीं कहूंगा "आप ताले" , बल्कि यह "सुनहरा" पथ से अलग होना आसान नहीं बनाता है। सुनहरा मार्ग आमतौर पर सबसे अच्छा अभ्यास होता है, जो कि ज्यादातर लोगों के लिए ज्यादातर समय काम करना चाहिए। – dpan
मैं मानता हूं कि ताले थोड़ा मजबूत हैं, लेकिन मैं यह सोचकर उस नकारात्मक अर्थ को दूर कर दूंगा कि कितने सफल उत्पाद हैं। – cgp
खैर, यह स्पष्ट है कि इस उत्तर की राय है;) – dpan
यह मूल रूप से सॉफ़्टवेयर है जो अपने लेखकों को लगता है कि इसे काम करना चाहिए, हर किसी को खुश करने की कोशिश करने के बजाय काम करना चाहिए। इसका मतलब है कि बहुत से लोग इसे पसंद नहीं करेंगे, लेकिन जो लोग इसे पसंद करेंगे उन्हें पसंद करेंगे।
रेल शायद एक रायबद्ध ढांचे का कैननिकल उदाहरण है: आप चीजों को अपना रास्ता बनाते हैं, और सब कुछ चिकना है। यदि आप नहीं करते हैं, तो आप कुछ दर्द के लिए हैं। लेकिन यह ठीक है - अगर आप चीजों को अपना रास्ता नहीं बनाना चाहते हैं, तो आप रेल का उपयोग नहीं करना चाहते हैं।
मैं इसके साथ सहमत हूं .... मेरे पास विवादास्पद सॉफ़्टवेयर का एक टुकड़ा है ... और यह विवादित है क्योंकि यह मेरी छोटी पालतू परियोजना है ... मुझे नहीं पता था कि इसे व्यापक रूप से अपनाया जाएगा ... कुछ इसे प्यार करते हैं, दूसरों की शिकायत होती है। .. लेकिन वे सभी समझते हैं कि यह मेरी पालतू परियोजना है – TimothyP
यह एक फ्रेमवर्क में लागू किए गए सम्मेलनों और निर्णय लेने की संख्या है।
उदाहरण के लिए, नियंत्रक कार्रवाई (जो एएसपी.नेट एमवीसी में मामला है) में फॉर्म डेटा जमा करने के लिए 5 (या अधिक) विभिन्न तरीके हैं, तो ढांचा सुंदर "अन-राय" लगता है - निर्णय आप पर है!
यदि, हालांकि, ढांचा सक्षम करता है (या तो सीधे अन्य तरीकों को अक्षम करने के माध्यम से, या दृढ़ता से प्रोत्साहित करके) उस चीज को करने का एक ही तरीका (जो फूबू एमवीसी के मामले में है), आप कह सकते हैं कि निर्णय लिया गया है फ्रेमवर्क द्वारा लिया गया, इस प्रकार ढांचे को राय बना दिया।
स्वच्छंद सॉफ्टवेयर का मतलब है मूल रूप से एक ही रास्ता (सही तरीके से ™) काम करने के लिए है कि वहाँ और इसे दूसरे तरीके से करने के लिए मुश्किल है और निराशा हो जाएगा कोशिश कर रहा। दूसरी तरफ, सही तरीके से काम करना ™ सॉफ़्टवेयर के साथ विकसित करना बहुत आसान बना सकता है क्योंकि आपके द्वारा किए जाने वाले निर्णयों की संख्या कम हो गई है और सॉफ़्टवेयर डिज़ाइनर को सॉफ्टवेयर काम करने पर ध्यान केंद्रित करने की क्षमता है बढ़ा हुआ। यदि आपकी समस्या समाधान पर अच्छी तरह से नक्शा करती है, तो अच्छी तरह से किया जाता है, तो उचित सॉफ्टवेयर का उपयोग करने के लिए बहुत अच्छा हो सकता है। यह आपकी समस्या के उन हिस्सों को हल करने के लिए एक वास्तविक दर्द हो सकता है जो प्रदान किए गए टूल पर नक्शा न करें।यहां एक उदाहरण रेल पर रूबी होगा।
दूसरी ओर, गैर-विचारित सॉफ़्टवेयर उपयोगकर्ता (डेवलपर) को बहुत लचीलापन छोड़ देता है। यह किसी समस्या को हल करने की एक विधि को सब्सक्राइब नहीं करता है, लेकिन लचीली टूल्स प्रदान करता है जिसका उपयोग कई तरीकों से समस्या को हल करने के लिए किया जा सकता है। इसका नकारात्मक पक्ष यह हो सकता है क्योंकि उपकरण इतने लचीले होते हैं, किसी भी समाधान को विकसित करना अपेक्षाकृत कठिन हो सकता है। अधिकतर समाधान को उपयोगकर्ता (डेवलपर) द्वारा हाथ से कोडित किया जाना पड़ सकता है क्योंकि ढांचा पर्याप्त सहायता प्रदान नहीं करता है। आपको समाधान प्रदान करने के तरीके के बारे में और भी सोचना होगा और मध्यस्थ डेवलपर्स गरीब विचारों के साथ समाप्त हो सकते हैं, अगर उन्होंने कुछ राय किए गए सॉफ़्टवेयर में खरीदा है। PERL शायद गैर-विचारित सॉफ़्टवेयर का क्लासिक उदाहरण है।
मेरा आदर्श एक गैर-विचारित ढांचा है, लेकिन मजबूत सम्मेलनों वाला एक है। मैं इस श्रेणी में एएसपी.नेट एमवीसी डालूंगा। हकीकत में सभी सॉफ्टवेयर कुछ हद तक विचार किया जाता है (हालांकि शायद PERL नहीं)। एमवीसी के मॉडल की पसंद में मजबूत सम्मेलन हैं लेकिन उन सम्मेलनों में समस्याओं को हल करने के कई अलग-अलग तरीकों की पेशकश करता है। उनमें से कुछ तरीकों से मॉडल तोड़ सकता है। हालांकि, इस तरह के ढांचे में विकसित सम्मेलनों के अनुसार सही ढंग से उपयोग किया जा सकता है, यह एक वास्तविक खुशी हो सकती है।
इस उत्तर को ऊपर उठाना क्योंकि यह घटना के पीछे ड्राइविंग बलों को बताता है। –
उदाहरण में आप इस समय बहुत कुछ देखेंगे एएसपी.नेट एमवीसी ढांचा। यह आश्चर्यजनक रूप से एक्स्टेंसिबल है लेकिन कुछ मामलों में यह गिरावट है, इसके लिए कोई मांस नहीं है। डेटा एक्सेस करना चाहते हैं? आपको खुद को लिखना होगा। कुछ AJAX चल रहा है? डिट्टो।
हालांकि, क्योंकि यह अत्यधिक विस्तार योग्य है, यदि आप इसे बनाते हैं तो आप इसे एक रायबद्ध ढांचे में बदल सकते हैं। MVCContrib की पसंद यह है कि वे आपको चीजों को करने का विशिष्ट तरीका देते हैं जिसका अर्थ है कि आपको कम कोड लिखना है।
इसका मतलब यह है कि यदि आप राय से तोड़ना चाहते हैं तो आप वेनिला संस्करण पर काम करने के बजाय अक्सर अधिक काम करते हैं। हालांकि यह 80/20 परिदृश्य है। यदि आपने अपनी रायबद्ध ढांचे को सही तरीके से चुना है तो आप केवल 20% विचारों से तोड़ना चाहेंगे और आप उस समय के अन्य 80% उत्पादक बनेंगे।
एएसपी.नेट एमवीसी स्वाभाविक रूप से एएसपी.NET AJAX ढांचे के साथ फिट बैठता है, और यहां तक कि उस पुस्तकालय में एमवीसी-विशिष्ट परिवर्धन भी शामिल है, इसलिए मैं असहमत हूं कि अजाक्स कार्यान्वयन की पसंद पूरी तरह से निष्पक्ष है। इसके अलावा, लाइब्रेरी विशेष रूप से जरूरी नहीं है या jQuery की ue की भी अनुशंसा नहीं करती है, लेकिन यह मुंह के दौरान उस दिशा में तेजी से इशारा करते हुए इसे बंडल करती है, "इसे देखो"। – Rob
संतुलन के लिए मैं एक (बल्कि रायषित) विवरण प्रदान करूंगा जो राय दृष्टिकोण (कुछ अन्य उत्तरों के विपरीत) के लिए अधिक अनुकूल है।
रायबद्ध ढांचे "सुनहरा पथ" प्रदान करते हैं, जो अधिकांश लोगों और अधिकांश परिदृश्यों (लेखकों की आंखों में) के लिए सबसे अच्छा अभ्यास माना जाता है।
हालांकि इसका मतलब लॉक-इन का जरूरी नहीं है। इसका मतलब है कि चीजों को अलग-अलग करने के लिए इसे कुछ अतिरिक्त प्रयासों की आवश्यकता हो सकती है।
कम राय वाले ढांचे कई अलग-अलग विकल्प प्रदान करते हैं और निर्णय लेने के लिए इसे छोड़ देते हैं।
रायबद्ध ढांचे आमतौर पर पहिया को फिर से शुरू करने या फिर एक ही समस्या पर पुनर्विचार करने के लिए डेवलपर से बोझ हटा देते हैं और इस प्रकार वास्तविक समस्या पर ध्यान केंद्रित करने में मदद करते हैं।
ओपन-सोर्स दुनिया में आप कई राय अभी तक प्रतिस्पर्धी ढांचे को पा सकते हैं, इसलिए आपके पास अभी भी एक विकल्प है। आपको बस अपना खुद का सुनहरा मार्ग चुनना है।
+1, आपके उल्लेखनीय एंटरप्राइज़ ऐप्स की तरह लगता है। सिबेल का एक सुनहरा मार्ग है जो आसानी से टूटा नहीं जाता है, हालांकि यह किया जा सकता है और मैंने कभी-कभी एक टीम पर काम किया। यह विकास के साथ तेजी से आगे बढ़ सकता है क्योंकि आपको हर समय UI तत्व, डेटा संग्रहण और व्यावसायिक तर्क विकसित करने की आवश्यकता नहीं है। –
बहुत से लोग एएसपी.नेट एमवीसी को "अनियमित" ढांचे के रूप में संदर्भित कर रहे हैं, और मैं बस उस पर कुछ विचारों के साथ वजन करना चाहता था।
यह सच है कि एएसपी.नेट एमवीसी बहुत अधिक जरूरी नहीं है; आप जो भी दृढ़ता समाधान चाहते हैं उसका उपयोग कर सकते हैं, चाहे वह लिंक-टू-एसक्यूएल, एडीओ.नेट इकाइयां, एनएचबीरनेट आदि हो।
फ्लिप पक्ष पर, एमवीसी फ्रेमवर्क फिल हेक को उद्धृत करने के लिए "कॉन्फ़िगरेशन पर सम्मेलन" का पक्ष लेता है, जो नियंत्रकों, विचारों, मॉडल और अन्य कोड को ढूंढने के लिए पूर्व परिभाषित पैटर्न का पालन करने के लिए भारी सुझाव देता है। यद्यपि आप इस व्यवहार को बदल सकते हैं, लेकिन वर्तमान के साथ तैरना आसान है, और ज्यादातर लोगों के लिए, ऐसा करने में कोई समस्या नहीं है।
आस-पास के एएसपी.नेट एमवीसी के आसपास भी कई विचार-विमर्श वाले लोग हैं, जो मुझे लगता है कि कई पक्षपातपूर्ण ट्यूटोरियल हैं जो कवर पर जोर देते हैं, उदा। इकाई परीक्षण और निर्भरता इंजेक्शन; मैं सभी अच्छे परीक्षण और चिंताओं को अलग करने के लिए हूं, लेकिन मुझे लगता है कि इस तरह के विषयों को थोड़ा गड़बड़ कर दिया जाता है, अक्सर अधिक उपयोगी मूलभूत बातें शामिल करने से पहले।
वहां फिर से, मुझे यह स्वीकार करना होगा कि उन क्षेत्रों में, फ्रेमवर्क स्वयं जो भी इकाई परीक्षण समाधान चाहते हैं उसे अपनाने के लिए पूरी तरह से खुला है, साथ ही साथ जो भी निर्भरता इंजेक्शन और मॉकिंग फ्रेमवर्क आप उपयोग करना चाहते हैं, तो मुझे लगता है कि लचीलापन का एक और उदाहरण प्रदान करता है, यहां तक कि इकाई परीक्षण के "बाइबल बाशिंग" के भीतर भी, ऐसा लगता है कि ऐसा चल रहा है।
रायबद्ध सॉफ़्टवेयर इस तरह से बनाया गया है और डिज़ाइन किया गया है कि यह चीजों को एक निश्चित तरीके से करना आसान बनाता है। यह कुछ डिजाइन पैटर्न दूसरों के मुकाबले ज्यादा पसंद करता है। इस प्रक्रिया में सॉफ्टवेयर विकास की शैली से विचलित होना मुश्किल हो जाता है जिसके लिए इसे विकसित किया गया था। इसे डालने का एक और तरीका यह है कि यह "कॉन्फ़िगरेशन पर सम्मेलन" का पक्ष लेता है। यानी कॉन्फ़िगरेशन विकल्प बहुत सीमित हैं क्योंकि सॉफ़्टवेयर कई कॉन्फ़िगरेशन पहलुओं को मानता है। विचारों को समझने के बाद आम तौर पर प्रतिद्वंद्वी सॉफ़्टवेयर मास्टर के लिए तेज़ होता है।
दूसरी ओर अनौपचारिक सॉफ्टवेयर कुछ मान्यताओं को बनाता है। और नतीजतन, सॉफ़्टवेयर/सॉफ़्टवेयर विकास ढांचे जो अनपिनत होते हैं, अक्सर कॉन्फ़िगरेशन विकल्पों में बहुत अधिक होते हैं। एक डेवलपर को आम तौर पर सॉफ्टवेयर के विभिन्न पहलुओं के बारे में बहुत से निर्णय लेना पड़ता है। अक्सर, इन उपकरणों को आसानी से सुलझाने के लिए विभिन्न टूल्स विकसित किए जाते हैं। जैसे जावा के लिए .NET, ग्रहण आईडीई के लिए विजुअल स्टूडियो .NET इत्यादि। अनौपचारिक सॉफ़्टवेयर आम तौर पर राय वाले सॉफ़्टवेयर की तुलना में मास्टर तक अधिक समय लेता है।
tl; डॉ:
- स्वच्छंद: उदा रेल पर रूबी। चीजों को करने का एक विशेष रूप से पसंदीदा तरीका है, और आपको इस तरह से काम करने में बहुत मदद मिलती है। चीजों को अन्य तरीकों से करना मुश्किल है, या कुछ प्रणालियों के लिए असंभव है (कैसंद्रा दिमाग में आता है)।
- गैर-राय: उदा। पर्ल 5। आप किसी भी शैली में, किसी भी तरह से अपनी पसंद के अनुसार कुछ भी कर सकते हैं। सभी शैलियों समान रूप से खुले, वैध और समर्थित हैं।
[programmers.se] पर: [? क्या स्वच्छंद सॉफ्टवेयर 'वास्तव में क्या मतलब है] (http://programmers.stackexchange.com/q/12182/63183) – unor