MVC में, नियंत्रक और राउटर के बीच अंतर क्या है?


19

क्या उनका मतलब एक ही बात है (URL को क्रियाओं या URL से क्रियाओं से जोड़ना) या क्या कोई अंतर है जो मुझे याद आ रहा है?

उदाहरण: http://github.com/dannyvankooten/PHP-Router बनाम http://konstrukt.dk


1
यह राउटर मेरे लिए एक शानदार छद्म की तरह लगता है
शाफ़्ट सनकी

आपको केवल एक मॉडल (डेटाबेस), एक नियंत्रक (जो राउटर है), और दृश्य (एक पृष्ठ) की आवश्यकता है। बस। यदि आपके पास एक राउटर और एक नियंत्रक है तो आप इसे जटिल कर चुके हैं और केवल राउटर का उपयोग करके किसी नियंत्रक को डेटा पास कर रहे हैं। एक नियंत्रक एक राउटर है, लेकिन एक राउटर एक नियंत्रक नहीं है। यहां देखें कोड। Tutsplus.com/tutorials/mvc-for-noobs--net-10488
एक मात्रा

जवाबों:


15

रूटर:

रूटिंग एक यूआरआई एंडपॉइंट (यूआरआई का वह हिस्सा जो आधार URL के बाद आता है) लेने की प्रक्रिया है और यह निर्धारित करने के लिए कि मॉड्यूल, नियंत्रक, और उस नियंत्रक की कार्रवाई को निर्धारित करने के लिए इसे प्राप्त करना चाहिए मापदंडों में विघटित करना चाहिए।

नियंत्रक:

नियंत्रक एक »नियंत्रक पैटर्न लागू करता है, जिसमें सभी अनुरोधों को नियंत्रक द्वारा इंटरसेप्ट किया जाता है और अनुरोध किए गए URL के आधार पर अलग-अलग एक्शन कंट्रोलर्स को भेज दिया जाता है (जो राउटर से अनुरोध को रूट कर रहा है)।


4

एक दृश्यपटल-नियंत्रक एक साथ सहयोग करना चाहिए रूटर और एक डिस्पैचर के आधार पर तय करने के लिए (HTTP) अनुरोध के खिलाफ आवेदन जो ठोस कार्रवाई निष्पादित किया जाना है और फिर इसे डिस्पैचिज।

कैसे विस्तृत एक डिजाइन के आधार पर, कुछ नियंत्रक रों बिना काम रूटर रों और वे अपने स्वयं के मार्ग या मार्ग डिजाइन कैसे अनुरोध संसाधित होने में निहित है।

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

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

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

हालाँकि मैं शर्तों से कहूँगा कि नियंत्रक समग्र अनुप्रयोग में एक उच्च भूमिका में है। यह वह जगह है जहां कार्रवाई कहने के लिए जाती है।


3

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


2

राउटर कंट्रोलर लेयर का हिस्सा होते हैं । राउटर प्रसंस्करण तंत्र पुराने स्कूल फ्रंट कंट्रोलर पैटर्न (index.php में बड़ा स्विच) का प्रतिस्थापन है।

एक आधुनिक ढांचे में एक राउटर संभावित अनुरोधों और इसके प्रोसेसर के बीच एक सीधा संबंध निर्धारित करता है। इसके विपरीत, एक नियंत्रक सिर्फ जानकारी की पहचान करता है, और इस डेटा को अपने संदर्भ में पार्स करता है।


0

काफी बस एक राउटर अनुप्रयोग के माध्यम से एक यात्रा करता है, आमतौर पर GET या POST चर जैसे बाहरी इनपुट पर आधारित होता है।

राउटर हालांकि MVC का कोई हिस्सा नहीं है, कई MVC और HMVC फ्रेमवर्क राउटर्स का उपयोग करते हैं, लेकिन यह उन्हें MVC के पैटर्न से नहीं बांधता है।

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


-1

रूटर लेता है

निवेदन

और यह तय करता है कि कौन सी नियंत्रक / नियंत्रक विधियाँ अनुरोध को संभालेंगी।

नियंत्रक अनुरोधों को स्वीकार करता है और इसे संभालता है!

अब मैंने कंट्रोलर भी बना लिया है जो url को विभाजित करता है और बेस url के बाद पहले भाग और नियंत्रक के रूप में दूसरे भाग का उपयोग करता है। यह नियंत्रक के साथ एक फ़ाइल लोड करता है और कार्रवाई के साथ संगत उस फ़ाइल के भीतर एक विधि।

यह वास्तव में एक नियंत्रक नहीं है (जहाँ तक MVC का संबंध है) यह रूटिंग का हिस्सा है।

उदाहरण के लिए , [GET] uri लें: example.com/article/view/123 MVC राउटर uri को पार्स करेगा और निम्नलिखित सेगमेंट ढूंढेगा

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

ArticleController में एक $ ArticleId पैरामीटर के साथ एक दृश्य विधि होगी। यह विधि संभवत: कुछ ऐसा करेगी: निर्दिष्ट लेख प्राप्त करें (उदाहरण के लिए एक मॉडल के माध्यम से एक db से) और फिर इसे प्रदर्शित करें (शायद एक दृश्य लौटाकर जिसे लेख मॉडल द्वारा लौटा दिया गया है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.