एमवीसी आर्किटेक्चर के लिए सर्वोत्तम अभ्यास [बंद]


28

मेरा प्रश्न एमवीसी एप्लिकेशन को आर्किटेक्ट करने के तरीके के बारे में अधिक है। उदाहरण के लिए, हमें नियंत्रक से डेटा एक्सेस को डिकूप करने के लिए रिपॉजिटरी पैटर्न के साथ DI का उपयोग करने के लिए प्रोत्साहित किया जाता है, हालांकि HOW पर बहुत कम कहा जाता है कि विशेष रूप से MVC के लिए। उदाहरण के लिए, हम रिपॉजिटरी कक्षाएं कहाँ रखेंगे? वे विशेष रूप से मॉडल से संबंधित नहीं लगते हैं, क्योंकि मॉडल को वास्तविक डेटा एक्सेस प्रौद्योगिकियों से अपेक्षाकृत छोटा होना चाहिए।

एक दूसरे प्रश्न में शामिल है कि परतों या स्तरों की संरचना कैसे करें। अधिकांश उदाहरण अनुप्रयोगों (नर्ड डिनर, म्यूज़िक स्टोर, आदि ..) सभी एक स्तरीय, 2 परत दृष्टिकोण (गिनती परीक्षण नहीं) का उपयोग करते प्रतीत होते हैं, जिसमें आमतौर पर नियंत्रक सीधे L2S या EF कोड कहते हैं।

यदि मैं एक मल्टी-टीयर / लेयर एप्लिकेशन बनाना चाहता हूं तो MVC के संबंध में कुछ सर्वोत्तम अभ्यास क्या हैं?

जवाबों:


5

DI ASP MVC में एक नियंत्रक कारखाने का उपयोग करके पूरा किया जाता है। इस कारखाने का उपयोग आपके नियंत्रक निर्भरता को हल करने के लिए किया जाता है।

MvcContrib में कुछ नियंत्रक फेसोट्री कार्यान्वयन हैं जो आप बॉक्स से बाहर का उपयोग कर सकते हैं। मैं उनके कैसल विंडसर कार्यान्वयन का उपयोग करता हूं और यह अच्छी तरह से काम करता है। अपने TestHelper Class की जाँच करने का भी सुझाव देगा। नियंत्रक HTTPContext, सत्रों आदि का मजाक उड़ाने के लिए इसकी कुछ बहुत अच्छी कार्यक्षमता है। MVCContrib

व्यक्तिगत रूप से मुझे अपने मॉडल्स को काम करने के लिए रिपॉजिटरी का उदाहरण देना पसंद है। मॉडल रिपॉजिटरी (CRUD) के लिए एक एपीआई को उजागर करता है। किसी विशेष मॉडल पर नियंत्रक की निर्भरता निर्माण (निर्माता) पर इंजेक्ट की जाती है यह नियंत्रक कारखाने के माध्यम से इंजेक्ट किया जाता है। यह ऑब्जेक्ट ग्राफ के लिए मेरा प्रवेश बिंदु है जो मेरे IoC कंटेनर का प्रबंधन करता है।


2

उदाहरण के लिए, हम रिपॉजिटरी कक्षाएं कहाँ रखेंगे?

वे मॉडल में हैं; वे इन-एप्लिकेशन मॉडल हैं

मैं परतों की संरचना कैसे करूं? यदि मैं एक मल्टी-टीयर / लेयर एप्लिकेशन बनाना चाहता हूं तो MVC के संबंध में कुछ सर्वोत्तम अभ्यास क्या हैं?

टियर्स कोड के भौतिक पृथक्करण का प्रतिनिधित्व करते हैं। परतें तार्किक अलगाव का प्रतिनिधित्व करती हैं। MVC के लिए परतें (जैसा कि वे वर्तमान में हैं) अच्छी तरह से काम करती हैं। व्यावसायिक तर्क की मात्रा के आधार पर, इसे या तो आपके नियंत्रक में रखा जा सकता है, या इसे एक अलग असेंबली में रखा जा सकता है और अनुरोध चक्र के दौरान नियंत्रक द्वारा उपयोग किया जा सकता है।


तो आप सुझाव दे रहे हैं कि उन्हें बहु-स्तरीय एप्लिकेशन के UI प्रोजेक्ट में जाना चाहिए?
एरिक फनकेनबस

@ मिस्टर मैन यदि यह विशाल नहीं है, तो उन्हें उस परियोजना में जाना चाहिए जो आपके एमवीसी एप्लिकेशन को होस्ट करती है। विशेष रूप से, व्यावसायिक तर्क नियंत्रक में जाएगा और प्रत्येक क्रिया का अपना तर्क होगा। एमवीसी केवल यूआई केवल पैटर्न नहीं है; इसलिए मैं आपके दावे से असहमत हूं कि यह 'यूआई प्रोजेक्ट' है। यह नहीं है। यह एक एमवीसी परियोजना है जो एक Viewखंड के रूप में है (आपका यूआई है)।
जॉर्ज स्टॉकर

ठीक है, शायद मैं खराब प्रदर्शन किया। हालाँकि, क्या आप इस बात से सहमत नहीं हैं कि दृश्य परत को डेटाबेस में हेरफेर नहीं करना चाहिए? और यदि आप मॉडल में रिपॉजिटरी कक्षाएं डालते हैं, तो दृश्य ऐसा कर सकता है।
एरिक फनकेनबसच 17

एक छोटे MVC अनुप्रयोग में, UI "लेयर" केवल फ़ोल्डर है जो विचारों को रखता है। एक बड़े अनुप्रयोग में, यह अपनी परियोजना हो सकती है। यदि यह अपनी स्वयं की परियोजना है, तो यह नियंत्रक के साथ समन्वय करेगा, और नियंत्रक व्यवसायी को आवश्यकतानुसार हुक कर सकता है। नियंत्रक के बाहर किसी को भी पता करने की आवश्यकता नहीं होगी कि व्यावसायिक परत मौजूद है। मुझे लगता है कि आप स्वचालित रूप से सोच रहे हैं कि ये अलग-अलग परियोजनाओं में हैं, लेकिन उन्हें होना नहीं है।
जॉर्ज स्टॉकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.