क्या माना जाता है सॉफ्टवेयर?


200

मैं अक्सर लोगों को यह कहते हुए देखता हूं कि कुछ सॉफ्टवेयर "बहुत ही ओपिनियन" हैं या कि Microsoft "अन-ओपेरेटेड" फ्रेमवर्क लिखने के लिए कहता है। इसका वास्तव में क्या मतलब है?


जवाबों:


206

यदि एक रूपरेखा पर विचार किया जाता है, तो यह आपके काम करने के तरीके को लॉक या निर्देशित करता है।

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

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

जब यह अपने उत्पादों को डिजाइन करता है, तो Apple की मजबूत राय होती है।

अन-ओपेरेटेड सॉफ्टवेयर डिज़ाइन , PERL / PHP की तरह है। यह डेवलपर को अनुमति देता है और डेवलपर को सही निर्णय लेने के लिए भरोसा करता है और अपने हाथों में अधिक नियंत्रण रखता है।

मैं Microsoft को गैर-विचारित कॉलम में भी जगह दूंगा। एक Microsoft फ्रेमवर्क का एक अच्छा उदाहरण है, जो संयुक्त राष्ट्र द्वारा संचालित है .NET। सीएलआर और स्पेक्स को खोलकर, इसे सभी प्रकार की भाषाओं और कार्यान्वयन की शैलियों के लिए खोल दिया।


18
मैं यह नहीं कहूंगा कि आप "ताले" लगाते हैं, बल्कि इससे "सुनहरे" रास्ते को मोड़ना आसान नहीं होता। सुनहरा रास्ता आमतौर पर सबसे अच्छा अभ्यास है, कुछ ऐसा जो ज्यादातर लोगों के लिए काम करना चाहिए।
dpan

5
मैं मानता हूं कि ताले थोड़े मजबूत होते हैं, लेकिन मैं इस नकारात्मक धारणा को दूर करूंगा कि यह ध्यान में रखते हुए कि कितने सफल उत्पाद हैं।
cgp

32
ठीक है, यह स्पष्ट है कि यह उत्तर स्पष्ट है;)
dpan

6
एक ओपेरेटेड फ्रेमवर्क वह है जिसे इस तरह से डिज़ाइन किया गया है कि यह उपयोगकर्ताओं को उस फ्रेमवर्क के साथ कम से कम घर्षण का अनुभव करेगा जब फ्रेमवर्क इस तरह से उपयोग किया जाता है जो फ्रेमवर्क डिज़ाइनर द्वारा की गई मान्यताओं का उल्लंघन नहीं करता है।
क्रिप्पेल्ड्समर्फ़

2
मैं altCognito से सहमत हूं। .NET , उदाहरण के लिए, बटन क्लिक ईवेंट द्वारा उत्पन्न विधियों में व्यावसायिक तर्क डालना आसान बनाकर WinForms एप्लिकेशन में मॉडल और व्यू को मिक्स करने के लिए डेवलपर को प्रोत्साहित करता है। इस तरह, Microsoft अप्रत्यक्ष रूप से अदूरदर्शी डेवलपर्स को अपने कोड को उनके फ्रेमवर्क में लॉक करने के लिए प्रोत्साहित करता है। एक क्लीनर डिज़ाइन बेहतर प्रथाओं को लागू या प्रोत्साहित करेगा, जैसे एक अलग मॉड्यूल में मॉडल लॉजिक के साथ दूसरे फ़ंक्शन को कॉल करने के लिए बटन क्लिक विधि को मजबूर करना। ऐसा नहीं है कि स्वच्छ डिजाइन .NET में हासिल नहीं किया जा सकता है, यह सिर्फ डिफ़ॉल्ट रूप से प्रोत्साहित नहीं किया गया है।
जेरेड अपडेटाइक

62

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

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

मेरा आदर्श एक गैर-विचारित ढांचा है, लेकिन मजबूत सम्मेलनों के साथ। मैं ASP.NET MVC को इस श्रेणी में रखूँगा। हकीकत में सभी सॉफ्टवेयर को कुछ हद तक माना जाता है (हालांकि शायद पेरेल नहीं)। एमवीसी के पास अपनी पसंद के मॉडल में मजबूत सम्मेलन हैं, लेकिन उन सम्मेलनों के भीतर समस्याओं को हल करने के कई अलग-अलग तरीके हैं। उन तरीकों में से कुछ मॉडल को तोड़ भी सकते हैं। हालांकि, सही ढंग से इस्तेमाल किया, इस तरह के ढांचे में विकसित सम्मेलनों के अनुसार एक वास्तविक खुशी हो सकती है।


22

यह मूल रूप से सॉफ्टवेयर है जो हर किसी को खुश करने की कोशिश करने के बजाय इसके लेखकों के सोचने के तरीके को काम करता है। इसका मतलब है कि बहुत से लोग इसे पसंद नहीं करेंगे, लेकिन जो लोग इसे पसंद करेंगे, वे इसे पसंद करेंगे।

रेल शायद एक विचारित रूपरेखा का विहित उदाहरण है: आप चीजों को अपने तरीके से करते हैं, और सब कुछ सुचारू है। यदि आप नहीं करते हैं, तो आप कुछ दर्द में हैं। लेकिन यह ठीक है - यदि आप चीजों को अपने तरीके से नहीं करना चाहते हैं, तो आप रेल का उपयोग नहीं करना चाहते हैं।


1
मैं इस बात से सहमत हूं .... मेरे पास एक सॉफ़्टवेयर का एक टुकड़ा है ... और यह एक छोटी सी परियोजना है, क्योंकि मुझे लगता है कि यह व्यापक रूप से अपनाया जाएगा ... मुझे नहीं लगता कि इसे पसंद करते हैं, दूसरों को शिकायत है .. लेकिन वे सब समझते हैं कि यह मेरा पालतू प्रोजेक्ट है
टिमोथी 18

8

संतुलन की खातिर मैं एक (बल्कि रायशुमारी) विवरण प्रदान करूंगा जो कि अन्य दृष्टिकोण (कुछ अन्य उत्तरों के विपरीत) के लिए अधिक अनुकूल है।

ओपिनियेटेड फ्रेमवर्क एक "सुनहरा रास्ता" प्रदान करता है, जिसे अधिकांश लोगों और अधिकांश परिदृश्यों (लेखकों की नजर में) के लिए सबसे अच्छा अभ्यास माना जाता है।

यह जरूरी नहीं कि लॉक-इन का मतलब है। इसका मतलब है कि चीजों को अलग तरीके से करने के लिए कुछ अतिरिक्त प्रयासों की आवश्यकता हो सकती है।

कम राय वाली रूपरेखाएं कई अलग-अलग विकल्प प्रदान करती हैं और इसे तय करने के लिए आपको छोड़ देती हैं।

ओपिनियेटेड फ्रेमवर्क आमतौर पर व्हील को फिर से मजबूत करने के लिए डेवलपर से बोझ को हटाते हैं या एक ही समस्या को बार-बार दोहराते हैं और इस तरह हाथ में वास्तविक समस्या पर ध्यान केंद्रित करने में मदद करते हैं।

ओपन-सोर्स दुनिया में आप अभी तक कई प्रतिस्पर्धी रूपरेखाओं को पा सकते हैं, इसलिए आपके पास अभी भी एक विकल्प है। आपको बस अपना सुनहरा रास्ता चुनना है।


1
+1, आपके उल्लिखित एंटरप्राइज़ ऐप्स की तरह लगता है। सीबेल के पास एक सुनहरा रास्ता है जो आसानी से टूटा नहीं है, हालांकि यह किया जा सकता है और मैंने एक टीम पर काम किया जो कभी-कभार होती थी। यह विकास को तेज गति से आगे बढ़ा सकता है क्योंकि आपको हर समय यूआई तत्वों, डेटा भंडारण और व्यावसायिक तर्क को विकसित करने की आवश्यकता नहीं है।
जे। पोलफर

5

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

दूसरी ओर बिना सोचे-समझे सॉफ़्टवेयर कुछ धारणाएँ बनाता है। और इसके परिणामस्वरूप, सॉफ्टवेयर्स / सॉफ्टवेयर डेवलपमेंट फ्रेमवर्क जो बिना लाइसेंस के होते हैं, उनमें अक्सर बहुत सारे कॉन्फ़िगरेशन विकल्प होते हैं। एक डेवलपर को आमतौर पर सॉफ्टवेयर के विभिन्न पहलुओं के बारे में कई निर्णय लेने होते हैं। अक्सर, विभिन्न उपकरणों को विकसित किया जाता है ताकि इन विशाल विकल्पों से निपटना आसान हो सके। उदाहरण के लिए .NET के लिए Visual Studio .NET, जावा आदि के लिए ग्रहण आईडीई। अनोपिनियेटेड सॉफ़्टवेयर आम तौर पर राय वाले सॉफ़्टवेयर की तुलना में अधिक समय लेता है।


5

tl; डॉआर :

  • मत : उदा। रूबी ऑन रेल्स । चीजों को करने के लिए एक विशेष रूप से पसंदीदा तरीका है, और आपको इस तरह से काम करने में बहुत सहायता मिलती है। अन्य तरीकों से करना कठिन है, या कुछ प्रणालियों के लिए असंभव है (कैसेंड्रा के दिमाग में आता है)।
  • अन-राय : उदा पर्ल 5 । आप किसी भी तरह से, किसी भी शैली में, अपनी पसंद के अनुसार कुछ भी कर सकते हैं। सभी शैलियाँ समान रूप से खुली, मान्य और समर्थित हैं।

3

बहुत सारे लोग ASP.NET MVC को "अनोपिनियेटेड" फ्रेमवर्क के रूप में संदर्भित कर रहे हैं, और मैं बस उस पर कुछ विचारों के साथ तौलना चाहता था।

यह सच है कि ASP.NET MVC बहुत अधिक जनादेश नहीं देता है; आप जो भी दृढ़ता समाधान पसंद करते हैं, उसका उपयोग कर सकते हैं, यह Linq-to-SQL, ADO.NET Entities, NHibernate, आदि।

पल हॅक को उद्धृत करने के लिए, एमवीसी फ्रेमवर्क "कॉन्फ़िगरेशन पर कन्वेंशन" का पक्ष लेता है, जो नियंत्रकों, विचारों, मॉडल और अन्य कोड के लिए पूर्व-परिभाषित पैटर्न का पालन करने के लिए भारी सुझाव देता है। यद्यपि आप इस व्यवहार को बदल सकते हैं, वर्तमान के साथ तैरना आसान है, और अधिकांश लोगों के लिए, ऐसा करने में कोई समस्या नहीं है।

इसके अलावा आस-पास ASP.NET MVC बहुत सारे लोगों की राय है, जो मुझे लगता है कि बहुत सारे पक्षपाती ट्यूटोरियल हैं जो कवर करने पर जोर देते हैं, जैसे इकाई परीक्षण और निर्भरता इंजेक्शन; मैं सभी के अच्छे परीक्षण और चिंताओं को अलग करने के लिए हूं, लेकिन मुझे लगता है कि इस तरह के विषय किसी के गले से थोड़े ही नीचे होते हैं, अक्सर कुछ उपयोगी मूल बातें कवर करने से पहले।

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


2

यह एक फ्रेमवर्क में लागू किए गए सम्मेलनों की मात्रा और निर्णय की संख्या है जो लिया गया है।

यदि, उदाहरण के लिए, नियंत्रक कार्रवाई (जो ASP.NET MVC में मामला है) के लिए प्रपत्र डेटा प्रस्तुत करने के लिए 5 (या अधिक) अलग-अलग तरीके हैं, तो रूपरेखा सुंदर प्रतीत होती है "संयुक्त राष्ट्र की राय" - निर्णय ऊपर है आप को!

यदि, हालांकि, ढांचा सक्षम करता है (या तो सीधे अन्य तरीकों से अक्षम करने के माध्यम से, या इसे दृढ़ता से प्रोत्साहित करके) उस काम को करने का केवल एक ही तरीका है (जो कि फ़ुबु एमवीसी के साथ मामला है), आप कह सकते हैं कि निर्णय फ्रेमवर्क द्वारा लिया गया है , इस प्रकार रूपरेखा तैयार की।


1

उदाहरण आप इस समय एक बहुत कुछ देखेंगे ASP.NET MVC फ्रेमवर्क है। यह आश्चर्यजनक रूप से एक्स्टेंसिबल है, लेकिन यह कुछ मायनों में इसका पतन है, इसमें कोई मांस नहीं है। डेटा एक्सेस करना चाहते हैं? आपको खुद लिखना होगा। कुछ AJAX चाहते हैं? डिट्टो।

हालाँकि, जैसा कि यह बहुत ही एक्स्टेंसिबल है, अगर आप इस पर निर्माण करते हैं तो आप इसे एक ओपेरेटेड फ्रेमवर्क में बदल सकते हैं। MVCContrib की पसंद यही है, वे आपको उन चीजों को करने के विशिष्ट तरीके देते हैं, जिसका अर्थ है कि आपको कम कोड लिखना होगा।

इसका मतलब यह है कि यदि आप इस राय से अलग होना चाहते हैं कि क्या आप वैनिला संस्करण पर काम कर रहे हैं तो इससे अधिक काम करना है। हालांकि यह एक 80/20 परिदृश्य है। यदि आपने अपनी राय का ढांचा सही ढंग से चुना है, तो आप केवल 20% समय की राय से टूटना चाहेंगे और आप अन्य 80% समय के लिए अत्यधिक उत्पादक होंगे।


ASP.NET MVC, ASP.NET AJAX फ्रेमवर्क के साथ स्वाभाविक रूप से फिट है, और यहां तक ​​कि MVC- विशिष्ट परिवर्धन भी उस पुस्तकालय में शामिल है, इसलिए मैं असहमत हूँ कि Ajax कार्यान्वयन का विकल्प पूरी तरह से निष्पक्ष है। इसके अलावा, पुस्तकालय विशेष रूप से jQuery के आदेश की सिफारिश नहीं करता है या नहीं करता है, लेकिन यह बंडल करता है, इस दिशा में फुर्ती से इशारा करते हुए, "यह देखो"।
रोब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.