मेरे अनुभव में, एक पारंपरिक डेस्कटॉप mvc gui कार्यक्रम में, नियंत्रक को दृश्य में स्पैगेटिड समाप्त होता है। अधिकांश लोग एक नियंत्रक वर्ग को बाहर करने के लिए समय नहीं लेते हैं।
स्मॉलटाकल एमवीसी में डिजाइन पैटर्न
मॉडल / व्यू / कंट्रोलर (MVC) वर्गों का त्रय [KP88] का उपयोग स्मॉलटाकल -80 में उपयोगकर्ता इंटरफेस बनाने के लिए किया जाता है। MVC के अंदर के डिज़ाइन पैटर्न को देखकर आपको यह देखने में मदद करनी चाहिए कि हम "पैटर्न" शब्द का क्या मतलब है।
एमवीसी में तीन तरह की वस्तुएं होती हैं। मॉडल एप्लिकेशन ऑब्जेक्ट है, दृश्य इसकी स्क्रीन प्रस्तुति है, और नियंत्रक उपयोगकर्ता के इनपुट के उपयोगकर्ता के प्रतिक्रिया के तरीके को परिभाषित करता है। MVC से पहले, यूजर इंटरफेस डिजाइन इन वस्तुओं को एक साथ गांठ करने के लिए जाता है। एमवीसी उन्हें लचीलापन बढ़ाने और पुन: उपयोग करने के लिए decouples।
एमवीसी उनके बीच एक सदस्यता / अधिसूचित प्रोटोकॉल की स्थापना करके विचारों और मॉडलों को प्रदर्शित करता है। एक दृश्य को यह सुनिश्चित करना चाहिए कि इसका स्वरूप मॉडल की स्थिति को दर्शाता है। जब भी मॉडल का डेटा बदलता है, तो मॉडल उन विचारों को सूचित करता है जो उस पर निर्भर करते हैं। जवाब में, प्रत्येक दृश्य को खुद को अपडेट करने का अवसर मिलता है। यह दृष्टिकोण आपको विभिन्न प्रस्तुतियों को प्रदान करने के लिए एक मॉडल में कई दृश्य संलग्न करने देता है। आप इसे फिर से लिखे बिना एक मॉडल के लिए नए विचार भी बना सकते हैं।
निम्नलिखित आरेख एक मॉडल और तीन दृश्य दिखाता है। (हमने सादगी के लिए नियंत्रकों को छोड़ दिया है।) मॉडल में कुछ डेटा मान हैं, और एक स्प्रेडशीट, हिस्टोग्राम और पाई चार्ट को परिभाषित करने वाले विचार इन डेटा को विभिन्न तरीकों से प्रदर्शित करते हैं। मॉडल अपने विचारों के साथ संचार करता है जब उसके मूल्य बदलते हैं, और विचार इन मूल्यों तक पहुंचने के लिए मॉडल के साथ संवाद करते हैं।
अंकित मूल्य पर लिया गया, यह उदाहरण एक डिजाइन को दर्शाता है जो मॉडल से विचारों को डिकॉउंड करता है। लेकिन डिजाइन एक अधिक सामान्य समस्या पर लागू होता है: वस्तुओं को डिकूप करना ताकि किसी को किसी भी संख्या को प्रभावित करने के लिए दूसरों की जानकारी जानने के लिए बदले हुए ऑब्जेक्ट की आवश्यकता के बिना किसी को प्रभावित किया जा सके। यह अधिक सामान्य डिजाइन ऑब्जर्वर (पेज 293) डिजाइन पैटर्न द्वारा वर्णित है।
MVC की एक और विशेषता यह है कि विचारों को नेस्टेड किया जा सकता है। उदाहरण के लिए, बटन के एक नियंत्रण कक्ष को नेस्टेड बटन दृश्यों वाले एक जटिल दृश्य के रूप में लागू किया जा सकता है। ऑब्जेक्ट इंस्पेक्टर के लिए यूजर इंटरफेस में नेस्टेड विचार शामिल हो सकते हैं जिन्हें डीबगर में पुन: उपयोग किया जा सकता है। MVC समग्र दृश्य वर्ग, दृश्य उपवर्ग के साथ नेस्टेड दृश्यों का समर्थन करता है। सम्मिश्र दृश्य वस्तुओं की तरह काम करते हैं; जहाँ भी दृश्य का उपयोग किया जा सकता है, वहाँ एक समग्र दृश्य का उपयोग किया जा सकता है, लेकिन इसमें निहित विचार भी होते हैं और प्रबंधित होते हैं।
फिर, हम इसे एक डिजाइन के रूप में सोच सकते हैं जो हमें एक समग्र दृश्य का इलाज करने देता है जैसे हम उसके घटकों में से एक का इलाज करते हैं। लेकिन डिज़ाइन एक अधिक सामान्य समस्या पर लागू होता है, जो तब होता है जब हम वस्तुओं को समूह करना चाहते हैं और समूह को एक व्यक्तिगत वस्तु की तरह मानते हैं। यह अधिक सामान्य डिजाइन कम्पोजिट (163) डिजाइन पैटर्न द्वारा वर्णित है। यह आपको एक वर्ग पदानुक्रम बनाने की सुविधा देता है जिसमें कुछ उपवर्ग आदिम वस्तुओं (जैसे, बटन) को परिभाषित करते हैं और अन्य वर्ग मिश्रित वस्तुओं (कंपोजिटव्यू) को परिभाषित करते हैं जो प्राथमिक वस्तुओं को अधिक जटिल वस्तुओं में इकट्ठा करते हैं।
MVC आपको अपनी दृश्य प्रस्तुति को बदले बिना उपयोगकर्ता इनपुट के प्रति प्रतिक्रिया के तरीके को बदलने की सुविधा देता है। आप उदाहरण के लिए, कीबोर्ड के प्रति प्रतिक्रिया के तरीके को बदलना चाहते हैं या कमांड कमांड के बजाय पॉप-अप मेनू का उपयोग कर सकते हैं। MVC एक नियंत्रक ऑब्जेक्ट में प्रतिक्रिया तंत्र को एन्क्रिप्ट करता है। नियंत्रकों की एक श्रेणी पदानुक्रम है, जिससे मौजूदा नियंत्रक पर भिन्नता के रूप में एक नया नियंत्रक बनाना आसान हो जाता है।
एक दृश्य एक विशेष प्रतिक्रिया रणनीति को लागू करने के लिए एक नियंत्रक उपवर्ग का एक उदाहरण का उपयोग करता है; एक अलग रणनीति को लागू करने के लिए, बस एक अलग प्रकार के नियंत्रक के साथ उदाहरण को बदलें। उपयोगकर्ता के इनपुट के प्रति प्रतिक्रिया के तरीके को देखने के लिए रन-टाइम में किसी व्यू कंट्रोलर को बदलना संभव है। उदाहरण के लिए, एक दृश्य को अक्षम किया जा सकता है ताकि यह इनपुट को केवल एक नियंत्रक देकर स्वीकार न करे जो इनपुट घटनाओं को अनदेखा करता है।
व्यू-कंट्रोलर संबंध रणनीति (315) डिज़ाइन पैटर्न का एक उदाहरण है। एक रणनीति एक वस्तु है जो एक एल्गोरिथ्म का प्रतिनिधित्व करती है। यह तब उपयोगी होता है जब आप एल्गोरिथ्म को या तो वैधानिक रूप से या गतिशील रूप से बदलना चाहते हैं, जब आपके पास एल्गोरिथ्म के बहुत से रूप होते हैं, या जब एल्गोरिथ्म में जटिल डेटा संरचनाएं होती हैं, जिन्हें आप एनकैप्सुलेट करना चाहते हैं।
MVC अन्य डिज़ाइन पैटर्न का उपयोग करता है, जैसे किसी दृश्य के लिए डिफ़ॉल्ट नियंत्रक वर्ग को निर्दिष्ट करने के लिए फ़ैक्टरी विधि (107) और दृश्य को स्क्रॉलिंग जोड़ने के लिए डेकोरेटर (175)। लेकिन एमवीसी में मुख्य संबंध प्रेक्षक, समग्र और रणनीति डिजाइन पैटर्न द्वारा दिए गए हैं।