2010-04-13 12 views
37

मुझे एमवीसी (मॉडल-व्यू-कंट्रोलर) अवधारणा के एक बहुत ही तकनीकी प्रबंधक को समझाने की आवश्यकता है और परेशानी में भाग गया। समस्या यह है कि स्पष्टीकरण "आपकी दादी इसे प्राप्त करेगा" स्तर पर होना चाहिए - उदा। यहां तक ​​कि MVC Wiki page पर दी गई काफी सीधी व्याख्या भी कम से कम मेरी टिप्पणी के साथ काम नहीं करती थी।एमवीसी (मॉडल-व्यू-कंट्रोलर) - क्या इसे सरल शब्दों में समझाया जा सकता है?

क्या किसी के पास साधारण शब्दों में एक अच्छा एमवीसी स्पष्टीकरण का संदर्भ है?

यह आदर्श रूप से गैर-तकनीकी रूपक उदाहरणों के साथ किया जाएगा (उदाहरण के लिए "सजावटी पैटर्न चश्मे की तरह है") - एक कारण मैं असफल रहा था कि सभी एमवीसी उदाहरण मैं साथ विकसित हो सकता था।

मैंने एक बार पैटर्न स्पष्टीकरण की एक सूची देखी लेकिन मेरी याददाश्त के सर्वोत्तम एमवीसी पर नहीं था।

धन्यवाद!

+7

मॉडल * है। * दृश्य * शो * (मॉडल क्या है)। नियंत्रक * परिवर्तन * (मॉडल क्या है या दृश्य क्या दिखाता है)। –

+1

कोई जवाब नहीं जोड़ सकता। लेकिन मुझे लगता है कि सबसे सरल उदाहरण कंप्यूटर का समानता है। कीबोर्ड और माउस नियंत्रक हैं। स्क्रीन दृश्य है। मॉडल स्मृति में बिट्स और बाइट्स है। – Pithikos

उत्तर

87

इस बारे में कैसे - मेरे सिर के ऊपर से, उम्मीद है कि यह आपके लिए काम करता है।

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

मैं टीवी देख रहा था, इसलिए मुझे वहां से कुछ प्रेरणा मिली!

+0

मैं अभी भी एमवीसी सीख रहा हूं, यह वास्तव में मुझे प्रबुद्ध करता है। इससे मुझे एक बेहतर तस्वीर मिली और हाँ, एमवीसी पर मेरी समझ का स्तर मेरी दादी है। –

+1

यह एक अच्छा रूपक है लेकिन मैं इसे जोड़ना चाहता हूं कि स्क्रीन के अलावा उपयोगकर्ता देखता है, रिमोट कंट्रोलर भी दृश्य का हिस्सा है। दृश्य गुई घटकों को निर्देशित करता है और नियंत्रक को उपयोगकर्ता इंटरैक्शन इनपुट भेजता है। नियंत्रक उपयोगकर्ता कार्रवाई की व्याख्या करता है, इसलिए इस रूपक में टेलीविजन के अंदर बिजली के घटक होंगे। मॉडल metephor में सही है। – Julian

30

मुझे रूपकों पर भरोसा नहीं है। लेकिन यह यह समझाने के लिए मुश्किल नहीं है:

  • मॉडल कोड है कि चीजें
  • जानता है का हिस्सा है
  • देखें कोड है कि चीजें मॉडल जानता
  • नियंत्रक है पता चलता का हिस्सा है उस कोड का हिस्सा जो उपयोगकर्ता से आदेश प्राप्त करता है और बताता है कि क्या दिखाना है और मॉडल क्या जानना है।
+6

मैं मदद नहीं कर सकता लेकिन नोटिस करता हूं कि आपने कहा है कि आप रूपकों पर भरोसा नहीं करते हैं, लेकिन आपके पूरे स्पष्टीकरण में उनका उपयोग करते हैं। –

+0

कोड "पता" कोड कर सकते हैं? कोड "शो" कोड कर सकते हैं? क्या नियंत्रक कुछ "बता सकता है"? –

+3

ये रूपक नहीं हैं, केवल शब्द सरलीकरण। यदि आप चाहते हैं, "ज्ञान" के बारे में "जानता है" का विस्तार करें या अधिक सटीक रूप से " – Javier

1

"अपनी दादी" बताएं कि आप मॉडल हैं (आप काम कर रहे हैं), वह नियंत्रक (यानी, मध्य प्रबंधक) है, और दृश्य विपणन की तरह है, उन्हें सभी क्रेडिट मिलते हैं।

+1

@DVK से संबंधित तंत्र लागू करता है यह विचार यह था कि एमवीसी आम आदमी के नियमों में क्या है। ऐप्पल के शेयर मूल्य के लिए, मुझे लगता है कि आप मेरी बात साबित कर चुके हैं। – gonzobrains

3

MVC के रूप में समझें: "आदेश विवरण (सहित ग्राहक & कर्मचारी की जानकारी)", "HTML/एएसपी फॉर्म (ORDERDETAILS प्रदर्शित करने के लिए)" और "आदेश सेवा वर्ग विवरण (होने SaveOrderDetails करने के तरीकों, GetOrderDetails आदि) ।

मॉडल (डाटा क्लास जैसे ORDERDETAILS)

The data you want to Display 

नियंत्रक (सेवा वर्ग)

Knows about the Model (Order Details) 
Has methods to manage the Model 
And as such can be unit tested Its Single Responsibility is to manage the OrderDetails CRUD operations. 
It knows NOTHING about the View 

Vi ew (एएसपी पृष्ठ)

Displays the Model (OrderDetail's ViewData). 
It has to know about the Model's structure so it can correctly display the data to the users on screen. 
The View's structure (style, layout, HTML etc., locale) can be changed at anytime without it changing anything in the application's functionality. 
And as such, many Views can display the same Model in many different ways. 
In multi-tenant web applications, Customer specific Views can be stored in a database table and displayed based on Customer information 
+3

यह गैर-डेवलपर को समझाते हुए पूरी तरह से तकनीकी है। – DVK

8

सबसे अच्छा तरीका है मैं यह होगा वर्णन:

  • मॉडल डेटा स्रोत है।यह आपका डेटाबेस स्टोरेज है, यह कोड है जो आपको वेयरहाउस जानकारी को जोड़ने/निकालने/अपडेट/बदलने के लिए आवश्यक है।
  • व्यू वह हिस्सा है जिसे उपयोगकर्ता देखता है और उससे संपर्क करता है। एक HTML पृष्ठ, एक एप्लिकेशन विंडो।
  • नियंत्रक वह कोड है जो मॉडल को दृश्य से विवाह करता है। यदि आपने "हटाएं" बटन पर क्लिक किया है, तो यह व्यवसाय तर्क और नियमों को नियंत्रित करता है (क्या आप इसे हटाने के लिए अधिकृत व्यक्ति हैं? क्या यह एक हटाने योग्य रिकॉर्ड इत्यादि है)।

दृश्य को मॉडल के बारे में कुछ भी जानने की आवश्यकता नहीं है। मॉडल को दृश्य के बारे में कुछ भी जानने की आवश्यकता नहीं है। कंट्रोलर आउटपुट (व्यू) के साथ सूचना स्रोत (मॉडल) से शादी करता है।

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

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

इस मामले में - आप इस खेल को खेलने देखें है, DirectX नियंत्रक, और मॉडल वीडियो कार्ड है।

+0

एक सही उत्तर लेकिन, एक खराब उदाहरण के साथ। आपका उदाहरण एमवीसी के बारे में बिंदु साबित करता है लेकिन गुमराह करता है कि जीपीयू कैसे काम करते हैं :) मुझे इसे ठीक करने दें। डायरेक्टएक्स अलग-अलग वीडियो कार्ड के विभिन्न निर्देशों का समर्थन करने के लिए नहीं लिखा गया है। यह कार्ड है जो डायरेक्टएक्स के विशिष्ट संस्करण तक समर्थन के लिए बनाया गया है। डायरेक्टएक्स मानकों को परिभाषित करता है और वीडियो कार्ड हार्डवेयर इसके अनुरूप है। यही कारण है कि हमारे पास नए डायरेक्टएक्स संस्करणों के लिए नई वीडियो कार्ड पीढ़ियां हैं, न कि प्रत्येक नए रिलीज किए गए वीडियो कार्ड का समर्थन करने के लिए नया डायरेक्टएक्स संस्करण। तो हाँ आपको प्रत्येक कार्ड के लिए लिखना नहीं है क्योंकि वे या तो डायरेक्टएक्स या ओपनजीएल का समर्थन करते हैं – sleepwalkerfx

संबंधित मुद्दे