HMVC पैटर्न क्या है?


130

कोहना के दस्तावेज़ीकरण को पढ़ते हुए, मुझे पता चला कि 3.0 संस्करण में मुख्य अंतर यह है कि यह एमवीसी के बजाय एचएमवीसी पैटर्न का अनुसरण करता है जैसा कि संस्करण 2.50 करता है। कोहना के डॉक्स और विकिपीडिया पर इस बारे में पेज वास्तव में मुझे एक स्पष्ट विचार नहीं दिया।

तो सवाल: HMVC पैटर्न क्या है और यह MVC से कैसे भिन्न है?


30
इस विषय पर एक चर्चा कोहना मंचों के भीतर हुई। आप इसे मदद के लिए पा सकते हैं: forum.kohanaframework.org/discussion/1681
सैम्पसन

जवाबों:


86

सैम डी फ़्रीसिनेट (कोहना डेवलपर्स में से एक) ने एचएमवीसी के बारे में गहराई से लेख लिखा , यह क्या है, और इसका उपयोग कैसे किया जा सकता है।

लिंक मर चुका है: नया लिंक - https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc


एक अच्छे लिंक के लिए धन्यवाद, इस javaworld.com/jw-07-2000/jw-0721-hmvc.html
Owais Qureshi


लिंक हमेशा मर जाएगा! लिंक के बजाय सामग्री पोस्ट करें।
लोकी

58

मैं वर्तमान में मिश्र धातु नामक अपने स्वयं के PHP 5.3 HMVC ढांचे को विकसित करने की प्रक्रिया में हूं । चूंकि मुझे एचएमवीसी में भारी निवेश किया गया है और बेचा गया है, मैंने सोचा कि मैं एक अलग दृष्टिकोण पेश कर सकता हूं, और शायद एचएमवीसी का उपयोग क्यों किया जाए और इससे क्या लाभ होता है, इसका बेहतर विवरण।

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

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

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

तो, जबकि सैम डे फ़्रीसिंसेट के एचएमवीसी के साथ स्केलिंग पर टेकपॉर्टल लेख के बारे में सोचना दिलचस्प है, यह ऐसा नहीं है जहां एचएमवीसी फ्रेमवर्क का उपयोग करने वाले 90% + लोगों को इसके वास्तविक, व्यावहारिक, दिन-प्रतिदिन के लाभ मिलने वाले हैं।


5
हाँ, यह मैंने वास्तविक दुनिया के उपयोग में इसकी कल्पना की है, लेकिन इस दृष्टिकोण से नाम काफी उपयुक्त नहीं है क्योंकि एचएमवीसी में एच भ्रामक है (कोई वास्तविक पदानुक्रम नहीं है)।
मत्तेयो रीवा

2
हां, आप एक अच्छा मुद्दा बनाते हैं। मैं वास्तव में इस दृष्टिकोण का हिस्सा है और यह एक और नाम दिया - "नेस्टेड MVC" - एक प्रस्तुति मैं Confoo 2011 में यह Slideshare पर निर्भर है मिश्र धातु पर किया था में, # 20 स्लाइड: slideshare.net/vlucas/alloy-hmvc-php- ढांचा
वेंस लुकास

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

1
यह उत्तर विकिपीडिया की एक प्रति है: / en.wikipedia.org/wiki/…
EricG

3
@ EricG ऐसा लगता है जैसे किसी ने मेरे द्वारा दिए गए उत्तर की प्रतिलिपि बनाई, और फिर इसे विकिपीडिया में जोड़ा (यह मुझे नहीं था)। विकिपीडिया लेख के निचले भाग में "संदर्भ" अनुभाग देखें - यह इस टिप्पणी पर वापस लिंक करता है।
वांस लुकास

7

HMVC प्रेषण के लिए "घटक आधारित" दृष्टिकोण से निकटता से संबंधित है। मूल रूप से, एक डिस्पैचर होने के बजाय, जो एक नियंत्रक को सौंपता है, प्रत्येक नियंत्रक डिस्पैचर के रूप में कार्य कर सकता है। यह आपको नियंत्रकों का एक पदानुक्रम देता है। डिज़ाइन अधिक लचीला है और कोड के बेहतर इनकैप्सुलेशन का कारण बनता है, लेकिन उच्च अमूर्त की कीमत पर। कोनस्ट्रुक को इसी पैटर्न के आसपास डिज़ाइन किया गया है।

इस उत्तर को भी देखें: /programming/115629/simplest-php-routing-framework/120411#120411


7

कोहाना में, कम से कम, एचएमवीसी अनुरोध एक HTTP अनुरोध है जिसे "आंतरिक रूप से" सेवित किया जाता है: नेटवर्क पर जारी किए जाने के बजाय, इसे रूट किया जाता है, भेजा जाता है और फ्रेमवर्क द्वारा ही नियंत्रित किया जाता है। "एचएमवीसी" और "एमवीसी" नामों की समानता इस बात में भ्रमित है कि यह उन शर्तों के बीच अंतर्निहित संबंध का सुझाव देता है जो वास्तव में मौजूद नहीं हैं: एक दूसरे का मामूली रूपांतर या संशोधन नहीं है, वे पूरी तरह से अलग चीजें हैं। (HMVC को क्लाइंट-साइड HTTP रिक्वेस्ट के बिना भी अजाक्स के रूप में वर्णित किया गया है।) कोहना के जोर, और "HMVC" के लिए समर्थन का अर्थ है कि फ्रेमवर्क में HTTP- आधारित सेवा उन्मुख वास्तुकला के लिए मजबूत समर्थन है।

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

जबकि यह एक समझदार वास्तुशिल्प पैटर्न है, इसे अपना नाम देना अनावश्यक लगता है (Symfony2 एक ही अवधारणा " उप-अनुरोधों " का वर्णन करता है ), और वास्तव में यह नाम एक मिथ्या नाम लगता है: कोई विशेष आवश्यकता या आवश्यकता नहीं है कि अनुरोध प्रपत्र पदानुक्रम (प्रत्येक अनिवार्य कार्यक्रम के मानक कॉल ग्राफ के अलावा); उदाहरण के लिए अनुरोध आसानी से पुनरावर्ती हो सकते हैं।

[ अपडेट २०११, मार्च २०१२: टिप्पणियों के जवाब में उत्तर पर विस्तार किया।]


2
'आंतरिक' सेवा अनुरोधों को 'बाहरी' अनुरोधों में बदलने में सक्षम होने के कारण आप आवश्यकता पड़ने पर अधिक आसानी से स्केल कर सकते हैं, अर्थात कुछ एप्लिकेशन मॉड्यूल को अपने सर्वर पर स्थानांतरित कर सकते हैं।
किम प्रिंस

1
हाँ, इसके साथ और इसके बिना एक आंतरिक वेब सेवा को लागू करने का प्रयास करें, यह देखने के लिए कि क्या यह वास्तव में "वास्तव में इतना मायने नहीं रखता है"।
केमो

@ केमो मुझे लगता है कि यह एक बेहतरीन वास्तुकला है, मुझे लगता है कि यह नाम भ्रमित करने वाला है, और इसका मतलब है कि कोहना कुछ विशेष रूप से असामान्य है।
एमजे

मुझे यकीन नहीं है कि आपका उत्तर कैसे सहायक है। आप केवल नाम के बारे में शिकायत करने वाले प्रश्न का उत्तर नहीं दे रहे हैं और यह अनावश्यक है (जो ठीक है)।
डेव

4

HMVC Hierarchical Model View नियंत्रक है। सामान्य MVC में हर GUI ऑब्जेक्ट का MVC होता है। लेकिन, HMVC के विपरीत मूल GUI ऑब्जेक्ट और चाइल्ड GUI ऑब्जेक्ट के बीच कोई संबंध नहीं है। HMVC में प्रत्येक GUI ऑब्जेक्ट की उसके चाइल्ड ऑब्जेक्ट्स तक पहुँच है और प्रत्येक चाइल्ड ऑब्जेक्ट अपने पैरेंट ऑब्जेक्ट तक पहुँच सकते हैं।

इसलिए हर दृश्य में एक माता-पिता का दृष्टिकोण होता है। जो इसे अभिभावक के दृष्टिकोण तक पहुँचा सकता है। प्रत्येक कंट्रोलर के लिए एक पेरेंट कंट्रोलर होता है, जिसके द्वारा वह ईवेंट को पैरेंट कंट्रोलर को भेज सकता है (यदि ईवेंट उसके दायरे में नहीं है)

विवरण के विवरण के लिए कृपया यहां क्लिक करें

नया लिंक यह पता है


1
एक अच्छे उत्तर की निशानी कोई अन्य जानकारी या संदर्भ नहीं है। कृपया आप अपना जवाब खर्च कर सकते हैं और लिंक किए गए पोस्ट के संबंधित हिस्से को संक्षेप में बता सकते हैं?
केव

1
@ संजी, किसी भी कारण से आपने मोबाइल के लिए gwt की स्थिति पर HMVC लेख से लिंक के गंतव्य को बदल दिया है?
ब्रैड कोच

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