इसके साथ समस्या MVC
यह है कि लोगों को लगता है कि नियंत्रक, और मॉडल को एक-दूसरे से जितना संभव हो उतना स्वतंत्र होना चाहिए। वे ऐसा नहीं करते हैं - एक दृश्य और नियंत्रक अक्सर intertwined होते हैं - इस बारे में सोचें M(VC)
।
नियंत्रक उपयोगकर्ता इंटरफ़ेस का इनपुट तंत्र है, जिसे अक्सर दृश्य में उलझा दिया जाता है, खासकर GUIs के साथ। फिर भी, दृश्य आउटपुट है और नियंत्रक इनपुट है। एक दृश्य अक्सर एक संबंधित नियंत्रक के बिना काम कर सकता है, लेकिन एक नियंत्रक आमतौर पर एक दृश्य के बिना बहुत कम उपयोगी होता है। उपयोगकर्ता के अनुकूल नियंत्रक उपयोगकर्ता के इनपुट की व्याख्या करने के लिए दृश्य का उपयोग अधिक सार्थक, सहज फैशन में करते हैं। यह वही है जो इसे मुश्किल से नियंत्रक अवधारणा को दृश्य से अलग करता है।
मॉडल के रूप में एक मोहरबंद बॉक्स में एक पता लगाने के क्षेत्र में एक रेडियो-नियंत्रित रोबोट के बारे में सोचो।
मॉडल सभी राज्य और राज्य संक्रमणों के बारे में है जिसमें आउटपुट (प्रदर्शन) की कोई अवधारणा नहीं है या जो राज्य के संक्रमण को ट्रिगर कर रहा है। मैं क्षेत्र पर रोबोट की स्थिति प्राप्त कर सकता हूं और रोबोट जानता है कि स्थिति को कैसे बदलना है (एक कदम आगे / पीछे / बाएं / दाएं ले जाएं। बिना किसी दृश्य या नियंत्रक के कल्पना करना आसान है, लेकिन कुछ भी उपयोगी नहीं है।
एक नियंत्रक के बिना एक दृश्य के बारे में सोचें, जैसे कि किसी अन्य कमरे में नेटवर्क पर किसी अन्य कमरे में रोबोट की स्थिति को देखने वाला व्यक्ति (एक्स, वाई) एक स्क्रॉल कंसोल को स्ट्रीमिंग करता है। यह दृश्य केवल मॉडल की स्थिति प्रदर्शित कर रहा है, लेकिन इस व्यक्ति के पास कोई नियंत्रक नहीं है। फिर, एक नियंत्रक के बिना इस दृश्य की कल्पना करना आसान है।
एक दृश्य के बिना एक नियंत्रक के बारे में सोचो, जैसे किसी को रेडियो की आवृत्ति के साथ बंधे रेडियो नियंत्रक के साथ एक कोठरी में बंद कर दिया गया। यह नियंत्रक इनपुट भेज रहा है और राज्य के संक्रमण का कारण बन रहा है, जिसके बारे में कोई विचार नहीं है कि वे मॉडल (यदि कुछ भी) कर रहे हैं। कल्पना करना आसान है, लेकिन दृश्य से किसी प्रकार की प्रतिक्रिया के बिना वास्तव में उपयोगी नहीं है।
अधिकांश उपयोगकर्ता के अनुकूल यूआई अधिक सहज उपयोगकर्ता इंटरफ़ेस प्रदान करने के लिए नियंत्रक के साथ दृश्य का समन्वय करता है। उदाहरण के लिए, 2-डी में रोबोट की वर्तमान स्थिति दिखाने वाली टच-स्क्रीन के साथ एक दृश्य / नियंत्रक की कल्पना करें और उपयोगकर्ता को स्क्रीन पर उस बिंदु को छूने की अनुमति देता है जो रोबोट के सामने होता है। नियंत्रक को दृश्य के बारे में विवरण की आवश्यकता होती है, उदाहरण के लिए व्यूपोर्ट की स्थिति और पैमाने, और स्थान की पिक्सेल स्थिति को स्क्रीन पर रोबोट की पिक्सेल स्थिति के सापेक्ष स्पर्श किया गया) इसे सही ढंग से व्याख्या करने के लिए (कोठरी में बंद आदमी के विपरीत) रेडियो नियंत्रक)।
क्या मैंने आपके प्रश्न का उत्तर दिया है? :-)
नियंत्रक कुछ भी है जो उपयोगकर्ता से इनपुट लेता है जिसका उपयोग मॉडल को संक्रमण की स्थिति के लिए किया जाता है। दृश्य और नियंत्रक को अलग रखने का प्रयास करें, लेकिन एहसास करें कि वे अक्सर एक-दूसरे पर निर्भर होते हैं, इसलिए यह ठीक है कि यदि उनके बीच की सीमा फ़र्ज़ी है, तो अलग-अलग पैकेज के रूप में दृश्य और नियंत्रक के रूप में आप जितनी सफाई से अलग नहीं हो सकते हैं पसंद है, लेकिन यह ठीक है। आपको स्वीकार करना पड़ सकता है कि नियंत्रक मॉडल से दृश्य के रूप में दृश्य से स्पष्ट रूप से अलग नहीं होगा।
... क्या कोई सत्यापन आदि नियंत्रक में किया जाना चाहिए? यदि ऐसा है, तो मैं व्यू पर वापस त्रुटि संदेश कैसे दे सकता हूं - क्या यह फिर से मॉडल के माध्यम से जाना चाहिए, या नियंत्रक को इसे सीधे देखने के लिए वापस भेजना चाहिए?
यदि दृश्य में सत्यापन किया जाता है, तो मैं नियंत्रक में क्या डाल सकता हूं?
मैं कहता हूं कि एक जुड़ा हुआ दृश्य और नियंत्रक मॉडल के माध्यम से जाने के बिना स्वतंत्र रूप से बातचीत करना चाहिए। नियंत्रक उपयोगकर्ता के इनपुट को लेता है और सत्यापन करना चाहिए (शायद मॉडल और / या दृश्य से जानकारी का उपयोग करके), लेकिन यदि सत्यापन विफल हो जाता है, तो नियंत्रक को सीधे संबंधित दृश्य (जैसे त्रुटि संदेश) को अपडेट करने में सक्षम होना चाहिए।
इसके लिए एसिड परीक्षण स्वयं से पूछना है कि क्या एक स्वतंत्र दृश्य (यानी दूसरे कमरे में लड़का नेटवर्क के माध्यम से रोबोट की स्थिति देख रहा है) किसी और की सत्यापन त्रुटि के परिणामस्वरूप कुछ भी देखना चाहिए या नहीं (जैसे कि कोठरी में आदमी) क्षेत्र से बाहर जाने के लिए रोबोट को बताने का प्रयास किया गया)। आम तौर पर, उत्तर नहीं है - सत्यापन त्रुटि ने राज्य संक्रमण को रोका। यदि कोई राज्य ट्रांसस्टिशियन नहीं था (रोबोट स्थानांतरित नहीं हुआ), तो अन्य विचारों को बताने की आवश्यकता नहीं है। कोठरी में रहने वाले व्यक्ति को कोई प्रतिक्रिया नहीं मिली कि उसने अवैध संक्रमण (कोई दृश्य - बुरा उपयोगकर्ता इंटरफ़ेस) पैदा करने की कोशिश की, और किसी और को यह जानने की आवश्यकता नहीं है।
अगर टचस्क्रीन वाले लड़के ने रोबोट को मैदान से बाहर भेजने की कोशिश की, तो उसे एक अच्छा यूजर फ्रेंडली मैसेज मिला जिसमें उसने पूछा कि वह रोबोट को डिटेक्टिंग फील्ड से भेजकर नहीं मारता, लेकिन फिर, किसी और को यह जानने की जरूरत नहीं है।
अन्य विचार तो है इन त्रुटियों के बारे में पता करने की जरूरत है, तो आप को प्रभावी ढंग से कह रहे हैं कि उपयोगकर्ता से इनपुट और किसी भी जिसके परिणामस्वरूप त्रुटियाँ हैं मॉडल के भाग और पूरी बात एक छोटे से अधिक जटिल है ...