एमवीसी बनाम एन-टियर आर्किटेक्चर


142

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

चियर्स

जवाबों:


94

एन-टियर आर्किटेक्चर में आमतौर पर प्रत्येक परत नेटवर्क से अलग होती है। IE प्रस्तुति परत कुछ वेब सर्वरों पर होती है, फिर वह व्यवसाय तर्क के लिए नेटवर्क पर ऐप सर्वर से बैकएंड पर बात करती है, फिर डेटाबेस सर्वर से बात करती है, फिर से नेटवर्क पर, और शायद ऐप सर्वर कुछ दूरस्थ सेवाओं के लिए भी कॉल करता है ( भुगतान प्रक्रिया के लिए Authorize.net)।

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

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


56
एन-टियर भी एक डिज़ाइन पैटर्न है, आपको 3-टियर सिस्टम करने के लिए 3 सर्वर की आवश्यकता नहीं है, वास्तव में, एक एकल फ़ाइल का उपयोग करके n- टियर सिस्टम करना संभव है, प्रत्येक टियर को एक वैचारिक अवधारणा द्वारा अलग किया जाता है।
मैगनेनल्स

6
टीयर का मूल रूप से अर्थ है कि एक इंटरप्रोसेस संचार आमतौर पर एक नेटवर्क लिंक पर हो रहा है। मैं असहमत हूं कि एक इन-प्रोसेस (एक ही फाइल में अकेला) कोड डिजाइन प्रवाह एक tiered डिजाइन दृष्टिकोण का गठन करता है। बेशक वह IMHO है। "सर्वर" का अर्थ है कि मशीन एक ही बॉक्स पर कई प्रक्रियाएं चला सकती है; और वे शायद अभी भी "लोकलहोस्ट" नेटवर्क पर बात कर सकते हैं।
ज़क

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

1
मैं किसी को भी इस प्रश्न को पढ़ने के लिए अन्य उत्तरों को पढ़ने की सलाह दूंगा, यह उत्तर गलत है
कीसार

@ मैगलन, 'जक' के साथ जाएं, पहले हमें टियर और लेयर के बीच अंतर को साफ करने की आवश्यकता है। यहां बहुत अच्छा कोडप्रोजेक्ट लेख है जिसमें स्पष्ट व्याख्या है
इरफ

42

यदि 3-स्तरीय डिजाइन इस तरह थे:

Client <-> Middle <-> Data

MVC संरक्षक होगा:

     Middle
     ^    |
     |    v
Client <- Data

जिसका अर्थ है कि:

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

पुनश्च ग्राहक होगा देखें और मध्य नियंत्रक


13
MVC में मॉडल ग्राहक (दृश्य) के साथ सीधे बातचीत कर सकता है ??? मुझे ऐसा नहीं लगता!
पलआला

6
@ इला, मैं सहमत हूं और इसलिए मुझे लगता है कि यह डेटा के प्रवाह की बात कर रहा है । अद्यतन: मैंने अभी विकिपीडिया में जाँच की है, और मॉडल पर्यवेक्षकों के माध्यम से दृश्य को इंटरैक्ट कर सकता है (सीधे नहीं)।
शून्य

1
MVC में: MVC आर्किटेक्चर त्रिकोणीय है: व्यू कंट्रोलर को अपडेट भेजता है, कंट्रोलर मॉडल को अपडेट करता है, और व्यू सीधे मॉडल से थ्री टीयर में अपडेट हो जाता है: थ्री टियर आर्किटेक्चर वह क्लाइंट टीयर है जो डेटा टियर के साथ कभी भी सीधे संवाद नहीं करता है। थ्री-टीयर मॉडल में सभी संचार माध्यमों से गुजरना होगा
केतन इटालिया

1
यहाँ यदि मध्य एक नियंत्रक है तो मध्य, ग्राहक और मध्य के बीच संचार, डेटा द्विदिश नहीं है, जैसा कि ans में वर्णित है ।... नियंत्रक डेटा को मॉडल में भेजता है और मॉडल नियंत्रक को अद्यतन किए गए डेटा को वापस लौटाता है जो फिर इसे ब्राउज़र में लौटाता है। दृश्य से गुजरने के बाद।
ड्रैगन

30

एन-टियर आर्किटेक्चर के बारे में यही कहना है

पहली नज़र में, तीन स्तरीय MVC (मॉडल दृश्य नियंत्रक) अवधारणा के समान लग सकते हैं; हालाँकि, टोपोलॉजिकल रूप से वे भिन्न हैं। त्रि-स्तरीय वास्तुकला में एक मौलिक नियम यह है कि ग्राहक स्तरीय डेटा टियर के साथ सीधे संवाद नहीं करता है; थ्री-टियर मॉडल में सभी संचार मिडलवेयर टियर से होकर गुजरना चाहिए। वैचारिक रूप से त्रिस्तरीय वास्तुकला रैखिक है। हालाँकि, MVC आर्किटेक्चर त्रिकोणीय है: व्यू कंट्रोलर को अपडेट भेजता है, कंट्रोलर मॉडल को अपडेट करता है, और व्यू सीधे मॉडल से अपडेट हो जाता है।


11
अच्छा लगता है, लेकिन मुझे विश्वास नहीं होता कि "व्यू सीधे मॉडल से अपडेट हो जाता है" एक अच्छा विचार है। यह अद्यतन और आवेषण के लिए नियंत्रक का उपयोग करने के लिए समझ में नहीं आता है, लेकिन चयन और फ़िल्टर के लिए नहीं, और मैं केवल मॉडल को देखने के लिए बाध्य करने के लिए चिंताओं को अलग करने का बिंदु नहीं देखता! निष्कर्ष - एमवीसी उन लोगों में से एक है जो उनके द्वारा बनाए गए आक्षेपों का एक अनुमान है। मुझे याद नहीं है कि 3-स्तरीय "सिस्टम आर्किटेक्चर" या "एप्लिकेशन डिज़ाइन" तक सीमित है। केंद्रीय अवधारणा चिंताओं से अलग है
सैम

1
यह इस बात पर निर्भर करेगा कि आप क्या कर रहे हैं। एक iOS एप्लिकेशन के लिए MVC ऐप (जो संभवतः मॉडल से दृश्य को सीधे अपडेट करने की अनुमति नहीं देगा) एक वेब ऐप (जो हो सकता है) से अलग होगा। एमवीसी एक प्रतिमान है, न कि चीजों को करने का एक सही तरीका।
डेव कंटर

2
@ सम पूरी तरह से सहमत हैं। सहज ज्ञान युक्त अवधारणा के लिए बहुत सारे शब्दजाल।
smwikipedia

1
अच्छा लगता है, काम नहीं करता है। विकिपीडिया सत्य का अंतिम स्रोत नहीं है
ACV

इसका तरीका आप सच्चाई की व्याख्या करते हैं, और फिर से यह इस बात पर निर्भर करता है कि आपके लक्ष्य क्या हैं
एक्सिनस

17

एकमात्र समानता यह है कि दो पैटर्न में उनके आरेखों में तीन बक्से होते हैं। मौलिक रूप से वे अपने उपयोगों में पूरी तरह से अलग हैं। यदि वास्तव में, यह आमतौर पर पसंद करने के लिए नहीं है कि किस पैटर्न का उपयोग करना है, लेकिन दोनों पैटर्न एक साथ उपयोग कर सकते हैं। यहाँ दो की एक अच्छी तुलना है: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
मुझे लगता है कि यह अब तक का सबसे अच्छा जवाब है, विशेष रूप से MVC वास्तव में UI पर केंद्रित है, और यह 3 स्तरीय डिज़ाइन में आपका UI स्तरीय हो सकता है। लिंक में आरेख यह बहुत अच्छी तरह से प्रदर्शित करता है।
एलेक्स

5

थ्री-टियर आर्किटेक्चर में एक मौलिक नियम यह है कि क्लाइंट टियर कभी भी डेटा टियर के साथ सीधे संवाद नहीं करता है; थ्री-टियर मॉडल में सभी संचार मिडलवेयर टियर से होकर गुजरना चाहिए।

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


5

@Cherry मध्य वेयर MVC पैटर्न में एक अनुरोध हैंडलर या पुनर्निर्देशक की तरह अधिक काम करता है।

मैं एमवीसी के बारे में थोड़ा विस्तार से बताना चाहूंगा, मेरे अनुसार मॉडल व्यू कंट्रोलर इस तरह से काम करता है।

  1. ग्राहक किसी भी सेवा के लिए अनुरोध करके सत्र आरंभ करता है।
  2. यह अनुरोध नियंत्रक (अनुरोध हैंडलर, पुनर्निर्देशक आदि) द्वारा प्राप्त और संभाला जाता है।
  3. नियंत्रक अनुरोध पर एक मूल जानकारी संसाधित करता है और इसे संबंधित मॉडल पर पुनर्निर्देशित करता है जो डेटा अनुरोध को भर सकता है।
  4. मॉडल नियंत्रक द्वारा दिए गए मापदंडों के अनुसार अनुरोध को भरें और नियंत्रक को परिणाम वापस भेजें। (नोट: यहाँ मुझे यह स्पष्ट करना पसंद है कि डेटा को सही MVC आर्किटेक्चर में क्लाइंट को सीधे नहीं लौटाया जाता है, बल्कि यह नियंत्रक पर वापस आ जाता है।)
  5. उस डेटा को देखने (क्लाइंट) को भेजने की तुलना में नियंत्रक।
  6. क्लाइंट के सामने अनुरोधित सेवा है।

यह सब MVC के बारे में है जो मुझे पता है।


1
मुझे लगता है कि जैसा कि ऊपर कहा गया है, एमवीसी त्रिकोणीय है, इसलिए व्यू कभी-कभी मॉडल से सीधे बात कर सकता है और इसके विपरीत, जैसा कि इस दस्तावेज़ में बताया गया है: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche

5

खुद को एक ब्रेक दें। और वास्तविक दुनिया की समस्याओं को हल करते समय अपने आप को कुछ पैटर्न तक सीमित न रखें। बस कुछ सामान्य सिद्धांतों को याद रखें, जिनमें से एक है CONPERATION OF CONCERNS


4

रैखिक होने के अलावा, एक और बड़ा अंतर जो यहां पर्याप्त जोर नहीं दिया गया था वह यह है कि एन-टियर मॉडल में, एन जरूरी 3-स्तरीय नहीं है! यह अक्सर तीन स्तरों (प्रस्तुति, ऐप, डेटा) के रूप में लागू होता है, जिसमें मध्य परत दो उप-स्तरीय (व्यावसायिक तर्क और डेटा एक्सेस) होती है। इसके अलावा, MVC के मॉडल में डेटा हेरफेर के लिए डेटा और व्यावसायिक तर्क दोनों शामिल हो सकते हैं, जबकि ये n-tier में अलग-अलग स्तरों में होंगे।


3

एन-टीयर आर्किटेक्चर को परिनियोजन आरेख का उपयोग करके सबसे अच्छा परिभाषित किया गया है।

एक MVC आर्किटेक्चर को सीक्वेंस डायग्राम का उपयोग करके सबसे अच्छा परिभाषित किया गया है।

2 समान नहीं हैं और संबंधित नहीं हैं और आप दो आर्किटेक्चर को एक साथ जोड़ सकते हैं। न केवल तैनाती और स्केलेबिलिटी के लिए, बल्कि कोड पुन: उपयोग के लिए भी कई कंपनियों ने N Tier'd आर्किटेक्चर बनाने के लिए कदम उठाए हैं।

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


यदि mvc आपके दिए गए परिदृश्य के लिए कुछ भी पुन: उपयोग नहीं कर रहा है, तो n tier arch की तुलना में mvc के कोई लाभ हैं।
ड्रैगन

2

निष्कर्ष: N-tier एक आर्किटेक्चर है, MVC एक डिज़ाइन पैटर्न है। वे एक ही रूपक हैं जो दो अलग-अलग क्षेत्रों में लागू होते हैं।


1

जेरी: यहाँ एक सरल उदाहरण है कि दोनों कैसे संबंधित हैं:


टियर 1 - उन मॉडलों से मिलकर जो किसी प्रकार की नेटवर्क सेवा या समान के माध्यम से टियर 2 के साथ संचार करते हैं, इनपुट सत्यापन, गणना और विचारों के लिए प्रासंगिक अन्य चीजों को संभालने के लिए नियंत्रक। और इसमें स्वयं के विचार शामिल हैं, टोकेर - जो डेस्कटॉप ऐप में GUI या वेब-ऐप में वेब-इंटरफ़ेस हो सकता है।


टियर 2 - टीयर 1 से किसी तरह की सेवा या संदेशों को पुनः प्राप्त करने के अन्य तरीके शामिल हैं। टीयर 1 के बारे में पता नहीं होना चाहिए या नहीं, इसलिए केवल ऊपर से कॉल का जवाब दे सकता है - कभी भी खुद से चीजों के लिए न पूछें। इसमें सभी व्यावसायिक-तर्क भी शामिल हैं।


टीयर 3 - इसमें डोमेन मॉडल, डेटाबेस का ऑब्जेक्ट प्रतिनिधित्व और डेटाबेस-प्रविष्टियों को संचार और अद्यतन करने के लिए सभी तर्क शामिल हैं।


1

त्रि-स्तरीय मॉडल में सभी संचार मध्य स्तरीय के माध्यम से गुजरना चाहिए। वैचारिक रूप से त्रिस्तरीय वास्तुकला रैखिक है। हालांकि, [मॉडल-व्यू-कंट्रोलर] एमवीसी आर्किटेक्चर त्रिकोणीय है: व्यू कंट्रोलर को अपडेट भेजता है, कंट्रोलर मॉडल को अपडेट करता है, और व्यू सीधे मॉडल से अपडेट हो जाता है।


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