वेब प्रपत्रों की तुलना में, MVC HTML आउटपुट के साथ-साथ पृष्ठ उत्पादन पर अधिक नियंत्रण और उच्च-स्तरीय, अधिक वास्तु-चालित दृष्टिकोण के साथ निचले स्तर का दृष्टिकोण है । मुझे वेब फॉर्म और एमवीसी पर कब्जा करने दें और मुझे बताएं कि मुझे क्यों लगता है कि तुलना कई स्थितियों में वेब फॉर्म की पक्षधर है - जब तक आप कुछ क्लासिक वेब फॉर्म के जाल में नहीं आते।
वेब प्रपत्र
वेब फ़ॉर्म मॉडल में, आपके पृष्ठ सीधे ब्राउज़र से पृष्ठ अनुरोध के अनुरूप हैं। इस प्रकार, यदि आप किसी उपयोगकर्ता को पुस्तकों की सूची में निर्देशित कर रहे हैं, तो संभवतः आपके पास "Booklist.aspx" नामक एक पृष्ठ होगा, जिस पर आप उसे निर्देशित करेंगे। उस पृष्ठ में, आपको उस सूची को दिखाने के लिए आवश्यक सब कुछ प्रदान करना होगा। इसमें डेटा खींचने, किसी भी व्यावसायिक तर्क को लागू करने और परिणामों को प्रदर्शित करने के लिए कोड शामिल हैं। यदि पेज को प्रभावित करने वाला कोई वास्तु या रूटिंग लॉजिक है, तो आपको पेज पर आर्किटेक्चर लॉजिक को भी कोड करना होगा। अच्छा वेब प्रपत्र विकास में आमतौर पर एक अलग (इकाई-परीक्षण योग्य) DLL में सहायक वर्गों के एक सेट का विकास शामिल होता है। ये वर्ग (तों) व्यापारिक तर्क, डेटा पहुंच और वास्तु / मार्ग संबंधी निर्णय लेंगे।
MVC
MVC वेब अनुप्रयोग विकास का एक और "वास्तुशिल्प" दृष्टिकोण लेता है: एक मानकीकृत पाड़ की पेशकश करता है जिस पर निर्माण करना है। यह स्थापित वास्तुकला के भीतर स्वचालित रूप से मॉडल, दृश्य और नियंत्रक कक्षाओं को बनाने के लिए उपकरण प्रदान करता है। उदाहरण के लिए, दोनों रूबी ऑन रेल्स (केवल "रेल्स" यहां से बाहर) और ASP.NET MVC आप हमेशा एक निर्देशिका संरचना के साथ शुरू करेंगे जो वेब एप्लिकेशन आर्किटेक्चर के उनके समग्र मॉडल को दर्शाता है। एक दृश्य, मॉडल और नियंत्रक को जोड़ने के लिए, आप Rails की "रेल्स स्क्रिप्ट / जनरेट स्कैफोल्ड {मॉडलनाम}" जैसी कमांड का उपयोग करेंगे (ASP.NET MVC आईडीई में समान कमांड प्रदान करता है)। परिणामी नियंत्रक वर्ग में, इंडेक्स (शो सूची), शो, न्यू और एडिट (नष्ट करना) के लिए तरीके ("क्रियाएं") होंगे (कम से कम रेल में, एमवीसी समान है)। डिफ़ॉल्ट रूप से, ये "
निर्देशिका और फ़ाइलों का लेआउट MVC में महत्वपूर्ण है। उदाहरण के लिए, ASP.NET MVC में, "बुक" ऑब्जेक्ट के लिए इंडेक्स विधि की संभावना सिर्फ एक पंक्ति होगी: "रिटर्न व्यू ()"; एमवीसी के जादू के माध्यम से, यह बुक मॉडल को "/View/Books/Index.aspx" पेज पर भेज देगा जहां आपको पुस्तकें प्रदर्शित करने के लिए कोड मिलेगा। रेल का दृष्टिकोण समान है हालांकि तर्क थोड़ा अधिक स्पष्ट और कम "जादू" है। MVC ऐप में एक दृश्य पृष्ठ आमतौर पर एक वेब फ़ॉर्म पृष्ठ की तुलना में सरल होता है क्योंकि उन्हें रूटिंग, व्यावसायिक तर्क या डेटा हैंडलिंग के बारे में अधिक चिंता करने की आवश्यकता नहीं होती है।
तुलना
एमवीसी के लाभ अपने उत्पादन के उत्पादन के लिए चिंताओं और स्वच्छ क्लीनर, अधिक HTML / CSS / AJAX / जावास्क्रिप्ट-केंद्रित मॉडल के चारों ओर घूमते हैं। यह परीक्षण क्षमता को बढ़ाता है, एक अधिक मानकीकृत डिजाइन प्रदान करता है और अधिक "वेब 2.0" प्रकार की वेब साइट के लिए दरवाजा खोलता है।
हालांकि, कुछ महत्वपूर्ण कमियां भी हैं।
सबसे पहले, जबकि एक डेमो साइट को प्राप्त करना आसान है, समग्र वास्तुशिल्प मॉडल में एक महत्वपूर्ण सीखने की अवस्था है। जब वे "कन्वेंशन ओवर कॉन्फ़िगरेशन" कहते हैं, तो यह अच्छा लगता है - जब तक आपको एहसास न हो कि आपके पास सीखने के लिए एक पुस्तक-सम्मेलन का मूल्य है। इसके अलावा, अक्सर यह पता लगाने के लिए कि क्या चल रहा है, क्योंकि आप स्पष्ट कॉल के बजाय जादू पर भरोसा कर रहे हैं , यह थोड़ा पागलपन है । उदाहरण के लिए, वह "रिटर्न देखें ();" ऊपर कॉल करें? ठीक उसी तरह की कॉल अन्य क्रियाओं में पाई जा सकती है लेकिन वे विभिन्न स्थानों पर जाती हैं। यदि आप एमवीसी सम्मेलन को समझते हैंफिर आप जानते हैं कि ऐसा क्यों किया जाता है। हालांकि, यह निश्चित रूप से अच्छे नामकरण या आसानी से समझने योग्य कोड के उदाहरण के रूप में योग्य नहीं है और नए डेवलपर्स के लिए वेब फॉर्म की तुलना में इसे चुनना बहुत कठिन है (यह सिर्फ राय नहीं है: मेरे पास पिछले साल एक ग्रीष्मकालीन इंटर्न लर्निंग वेब फॉर्म था और MVC इस वर्ष और उत्पादकता में अंतर स्पष्ट किया गया था - वेब फॉर्म के पक्ष में)। BTW, रेल इस संबंध में थोड़ा बेहतर है, हालांकि रूबी ऑन रेल्स गतिशील रूप से नामित तरीके हैं जो कुछ गंभीर रूप से उपयोग किए जा रहे हैं।
दूसरा, एमवीसी का अर्थ है कि आप एक क्लासिक CRUD शैली की वेब साइट बना रहे हैं। इस प्रकार के वेब एप्लिकेशन का समर्थन करने के लिए वास्तु निर्णय और विशेष रूप से कोड जनरेटर सभी बनाए गए हैं। यदि आप एक CRUD एप्लिकेशन का निर्माण कर रहे हैं और एक सिद्ध आर्किटेक्चर (या बस आर्किटेक्चर डिज़ाइन को नापसंद करना) को अपनाना चाहते हैं, तो आपको संभवतः MVC पर विचार करना चाहिए। हालांकि, यदि आप CRUD से अधिक कर रहे हैं और / या आप वास्तुकला के साथ उचित रूप से सक्षम हैं तो MVC स्ट्रेटजैकेट की तरह महसूस कर सकता है जब तक कि आप वास्तव में अंतर्निहित रूटिंग मॉडल (जो कि वेबफ्रेम ऐप में बस रूट करने की तुलना में काफी अधिक जटिल है) को मास्टर कर सकते हैं। फिर भी, मैंने महसूस किया है कि मैं हमेशा मॉडल से लड़ रहा था और अप्रत्याशित परिणामों के बारे में चिंतित था।
तीसरा, यदि आप Linq की परवाह नहीं करते हैं (या तो क्योंकि आप डरते हैं कि Linq-to-SQL गायब होने जा रहा है या क्योंकि आपको Linq-to-Entities laughably अधिक उत्पादित और संचालित के तहत मिल गया है) तो आप भी नहीं चाहते हैं ASP.NET MVC मचान उपकरण Linq के आसपास का निर्माण कर रहे हैं (यह मेरे लिए हत्यारा था) के बाद से इस रास्ते पर चलने के लिए। यदि आप SQL में अनुभव कर रहे हैं (और खासकर यदि आप TSQL में अच्छी तरह से वाकिफ हैं और संग्रहीत कार्यविधियाँ हैं!) की तुलना में रेल का डेटा मॉडल भी काफी अनाड़ी है।
चौथा, एमवीसी के प्रस्तावक अक्सर बताते हैं कि एमवीसी विचार वेब के HTML / CSS / AJAX मॉडल की भावना के करीब हैं। उदाहरण के लिए, "HTML हेल्पर्स" - आपके vew पेज में थोड़ा कोड कॉल करता है जो सामग्री में स्वैप करता है और इसे HTML नियंत्रणों में रखता है - वेब फ़ॉर्म नियंत्रणों की तुलना में जावास्क्रिप्ट के साथ एकीकृत करना बहुत आसान है। हालाँकि, ASP.NET 4.0 आपके नियंत्रणों को नाम देने की क्षमता का परिचय देता है और इस प्रकार इस लाभ को समाप्त करता है।
पांचवें, एमवीसी शुद्धतावादी अक्सर Viewstate से आगे निकलते हैं। कुछ मामलों में, वे ऐसा करने के लिए सही हैं। हालाँकि, Viewstate उत्पादकता के लिए एक महान उपकरण और एक वरदान भी हो सकता है। तुलना के माध्यम से, MVC ऐप में तीसरे पक्ष के वेब नियंत्रणों को एकीकृत करने की कोशिश करने की तुलना में व्यूस्टेट को संभालना बहुत आसान है। हालांकि नियंत्रण एकीकरण MVC के लिए आसान हो सकता है, वर्तमान प्रयासों के सभी जो मैंने देखा है (कुछ हद तक) कोड को इन कंट्रोल को देखने के नियंत्रक वर्ग (यानी - एमवीसी मॉडल के आसपास काम करने के लिए) से जोड़ने की आवश्यकता से पीड़ित है )।
निष्कर्ष
मुझे कई तरह से MVC का विकास पसंद है (हालाँकि मैं लंबे शॉट द्वारा ASP.NET MVC को रेल पसंद करता हूँ)। मुझे यह भी लगता है कि यह महत्वपूर्ण है कि हम इस सोच के जाल में न पड़ें कि ASP.NET MVC ASP.NET वेब फॉर्म्स का "एंटी-पैटर्न" है। वे अलग-अलग हैं, लेकिन पूरी तरह से विदेशी नहीं हैं और निश्चित रूप से दोनों के लिए जगह है।
हालाँकि, मैं वेब फॉर्म के विकास को प्राथमिकता देता हूं, क्योंकि अधिकांश कार्यों के लिए , चीजों को प्राप्त करना आसान है (सीआरयूडी रूपों के एक सेट का अपवाद पीढ़ी)। MVC भी कुछ हद तक, सिद्धांत की अधिकता से पीड़ित है। दरअसल, SO पर उन लोगों द्वारा पूछे गए कई सवालों पर गौर करें, जो पेज-ओरिएंटेड ASP.NET जानते हैं, लेकिन जो MVC का प्रयास कर रहे हैं। अपवाद के बिना, दांतों की बहुत अधिक संख्या होती है क्योंकि डेवलपर्स पाते हैं कि वे हुप्स के माध्यम से कूदने या एक विशाल सीखने की अवस्था को समाप्त किए बिना बुनियादी कार्य नहीं कर सकते हैं। यह वही है जो मेरी फॉर्म में MVC से वेब फॉर्म को श्रेष्ठ बनाता है: एमवीसी आपको अधिक परीक्षणनीयता हासिल करने के लिए एक वास्तविक दुनिया की कीमत का भुगतान करता है या, इससे भी बदतर, अभी तक शांत होने के लिए देखा जा सकता है क्योंकि आप उपयोग कर रहे हैंनवीनतम तकनिकी।
अपडेट: मुझे टिप्पणी अनुभाग में बहुत आलोचना की गई है - इसमें से कुछ काफी निष्पक्ष हैं। इस प्रकार, मैंने कई महीने रेल और ASP.NET MVC सीखने में बिताए हैं, यह सुनिश्चित करने के लिए कि मैं वास्तव में अगली बड़ी चीज़ को याद नहीं कर रहा हूँ! बेशक, यह यह सुनिश्चित करने में भी मदद करता है कि मैं प्रश्न को एक संतुलित और उचित प्रतिक्रिया प्रदान करता हूं। आपको पता होना चाहिए कि उपरोक्त प्रतिक्रिया मेरे प्रारंभिक उत्तर का एक प्रमुख पुनर्लेखन है, जब टिप्पणी सिंक से बाहर आती है।
जबकि मैं MVC में अधिक बारीकी से देख रहा था, मैंने सोचा, थोड़ी देर के लिए, कि मैं एक प्रमुख मेई पुलिया के साथ समाप्त हो जाऊंगा। अंत में मैंने निष्कर्ष निकाला कि, जबकि मुझे लगता है कि हमें वेब फॉर्म आर्किटेक्चर और परीक्षण क्षमता पर बहुत अधिक ऊर्जा खर्च करने की आवश्यकता है, एमवीसी वास्तव में मेरे लिए कॉल का जवाब नहीं देता है। तो, एक हार्दिक "लोगों को धन्यवाद" जो मेरे प्रारंभिक उत्तर के बुद्धिमान आलोचना प्रदान करते हैं।
उन लोगों के रूप में जिन्होंने इसे एक धार्मिक लड़ाई के रूप में देखा और जिन्होंने लगातार बाढ़ को बढ़ावा दिया, मुझे समझ नहीं आता कि आप क्यों परेशान होते हैं (कई मौकों पर एक दूसरे के सेकंड के भीतर 20+ डाउन-वोट निश्चित रूप से सामान्य नहीं हैं)। यदि आप इस उत्तर को पढ़ रहे हैं और सोच रहे हैं कि क्या मेरे उत्तर के बारे में वास्तव में कुछ "गलत" है, तो दिए गए स्कोर में अन्य कुछ उत्तरों की तुलना में कहीं कम है, बाकी का आश्वासन दिया है कि यह कुछ लोगों के बारे में अधिक कहता है जो सामान्य ज्ञान की तुलना में असहमत हैं समुदाय (कुल मिलाकर, यह एक 100 से अधिक बार उत्कीर्ण किया गया है)।
तथ्य यह है कि कई डेवलपर्स MVC की परवाह नहीं करते हैं और, वास्तव में, यह अल्पसंख्यक दृष्टिकोण नहीं है (यहां तक कि एमएस के भीतर भी जैसा कि ब्लॉग संकेत देते हैं)।