php एचएमवीसी पैटर्न क्या है?




kohana hmvc (4)

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

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

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

[ अपडेट अप्रैल 2011, मार्च 2012: टिप्पणियों के जवाब में उत्तर पर विस्तारित।]

कोहाना के दस्तावेज को पढ़ते हुए, मुझे पता चला कि 3.0 संस्करण में मुख्य अंतर यह है कि यह एमवीसी के बजाय संस्करण 2.x के रूप में एचएमवीसी पैटर्न का पालन करता है। कोहाना के दस्तावेज़ों और विकिपीडिया पर एक के बारे में यह पृष्ठ वास्तव में मुझे एक स्पष्ट विचार नहीं देता था।

तो सवाल: एचएमवीसी पैटर्न क्या है और यह एमवीसी से अलग कैसे है?


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

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

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

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

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


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

यह उत्तर भी देखें: https://.com/questions/115629/simplest-php-routing-framework/120411#120411


एचएमवीसी पदानुक्रमित मॉडल व्यू कंट्रोलर है। सामान्य एमवीसी में प्रत्येक जीयूआई ऑब्जेक्ट में इसकी एमवीसी होती है। लेकिन एचएमवीसी के विपरीत माता-पिता जीयूआई ऑब्जेक्ट और चाइल्ड जीयूआई ऑब्जेक्ट के बीच कोई संबंध नहीं है। एचएमवीसी में प्रत्येक जीयूआई ऑब्जेक्ट के पास अपने बच्चे की वस्तुओं तक पहुंच होती है और प्रत्येक बच्चा ऑब्जेक्ट अपने मूल ऑब्जेक्ट तक पहुंच सकता है।

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

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

नया लिंक here







hmvc