ASP.NET MVC साइट को मॉड्यूलर कैसे बनाया जाए


14

मैं एक कर्मचारी इंट्रानेट प्रणाली के लिए ASP.NET MVC 4 के साथ निर्मित होने की योजना बना रहा हूं। हम चाहेंगे कि साइट में अलग-अलग "मॉड्यूल" शामिल हों, जिनमें से प्रत्येक एक अलग सुविधा प्रदान करता है: संदेश, पेरोल परिवर्तन, आदि। मैं चाहूंगा कि ये मॉड्यूल संकलित समय पर सक्षम या अक्षम होने में सक्षम हों। होमपेज कुछ प्रकार के नेविगेशन को प्रदर्शित करेगा जो लोड किए गए प्रत्येक मॉड्यूल से लिंक होगा।

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

मेरा मानना ​​है कि यह एमवीसी के क्षेत्रों का उपयोग करने से पहले होता है, क्योंकि वे उस मामले के लिए डिज़ाइन किए गए हैं जब साइट का लेआउट पहले से जाना जाता है। MEF ऐसा लगता है कि यह उचित हो सकता है, हालाँकि लोगों को MVC के साथ MEF के संयोजन में मिश्रित सफलता मिली है। क्या MEF वास्तव में यहाँ जाने का तरीका है, या क्या मुझे पूरा करने का एक बेहतर तरीका है?


अच्छा सवाल, मुझे लगता है कि आपका समाधान शायद प्रतिबिंब का उपयोग करने के चारों ओर घूमेगा। आप अपने आइटम बनाते समय अभी भी क्षेत्रों का उपयोग कर सकते हैं, लेकिन मेनू बनाने की आपकी विधि को आपके सभी प्रकार (आपको बदलते कोड को बचाने के लिए) प्राप्त करने के लिए प्रतिबिंब का उपयोग करने की आवश्यकता होगी। क्या होगा अगर वे सभी एक ही इंटरफ़ेस IModule इंटरफ़ेस को लागू करते हैं। आप तब इंटरफ़ेस के सभी उत्तराधिकारियों को प्राप्त कर सकते हैं ताकि उन सभी मॉड्यूल को प्राप्त कर सकें जिन्हें आपको लिंक करने की आवश्यकता है, समस्या तब है कि आप वास्तव में किसी अतिरिक्त डेटा के बिना लिंक के साथ कैसे जुड़ने जा रहे हैं ? हम्म प्लॉट को मोटा करता है ...
mattytommo

1
मुझे लगता है जैसे आप एक सीएमएस बनाना चाहते हैं, सिवाय इसके कि सीएमएस के भीतर से सीएमएस प्रशासन करने के बजाय, आप चाहते हैं कि इसे बिल्ड समय पर किया जाए। जो मुझे इस सवाल की ओर ले जाता है कि आप यह क्यों चाहते हैं कि इसका निर्माण समय पर किया जाए?
जेम्स पी। राइट

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

nopCommerce ( nopcommerce.com/documentation.aspx ) आपके इच्छित भाग का एक अच्छा उदाहरण है। कैसे एक प्लगइन लिखने के लिए और DI के लिए उनके दृष्टिकोण पर एक नज़र डालें।
रुई मर्क

अनुसंधान उद्देश्यों के लिए मैं उत्सुक था कि एमवीसी के साथ MEF के संयोजन में 'मिश्रित सफलता' क्या थी। चूंकि आजकल कोडप्लेक्स "आर्काइव में रहता है", ओपी ने जो लिंक दिया है वह अब काम नहीं करता है। किसी और अतिरिक्त किसी समय के लिए: के साथ विचार-विमर्श-पट्टी पर 'Microsoft.Composition के माध्यम से MVC4 साथ MEF2' के लिए Ctrl + F खोज archive.codeplex.com/?p=mef ;)
केविन

जवाबों:


4

मेरे पास पहले एक केंद्रीकृत वर्ग होगा जो ऐप के लिए एक स्थिर निर्माता और संकलित सदस्य सूची के साथ संकलित मॉड्यूल को पंजीकृत करने के लिए उपयोग किया जाता है जो सिस्टम में थे। मॉड्यूल में एक स्थैतिक संपत्ति होती है जो यह बताती है कि इसका मेनू आइटम है या नहीं और मेनू में इसे किस क्रम में दिखाना चाहिए।

प्रत्येक मॉड्यूल का अपना स्थैतिक निर्माता होगा जो खुद को केंद्रीकृत वर्ग में नोट करेगा जो मॉड्यूल का ट्रैक रखता है।

इस प्रणाली के बारे में अधिक सोचें जैसे कि एक समय घड़ी प्रणाली जहां कर्मचारी अंदर आते हैं और घड़ी करते हैं। फिर पेरोल के समय पर, हम सभी कर्मचारियों को भुगतान करना जानते हैं, जो घड़ी में काम करते हैं, आदि के आधार पर।

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

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

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

आप स्थानीय स्तर पर संकलन करने और DLL को चारों ओर धकेलने के बजाय साधारण FTP या GIT पुश के साथ JIT का लाभ उठा सकते हैं।

स्टैक ओवरफ्लो पर उस लेख का लिंक यहां दिया गया है


जैसा मैं कल्पना कर रहा था वैसा ही लगता है। एकमात्र मुद्दा यह है कि, मैं मॉड्यूल को पहली जगह में कैसे लोड करूं? किस तंत्र द्वारा मैं उनमें से प्रत्येक को केंद्रीय वर्ग के साथ खुद को पंजीकृत करने के लिए कहता हूं? यह वह जगह है जहाँ MEF ऐसा लग रहा था कि यह उचित हो सकता है।
बिशेषम

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

1

आप एमवीसी के साथ एमईएफ का उपयोग करना चाह सकते हैं। यह आपको पुन: जोड़ने या तैनात किए बिना आवश्यकतानुसार जोड़ने - दूर ले जाने की क्षमता देगा। हमेशा की तरह, स्कॉट शुरू करने के लिए एक अच्छी जगह है: http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx

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