मॉडल-व्यू-कंट्रोलर (एमवीसी) डिज़ाइन पैटर्न

नील गोल्डस्टीन, डेव विल्सन द्वारा

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



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



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

बढ़िया - अब तक - लेकिन एक अजीब सवाल अभी भी प्रोग्रामर को परेशान करता है:



वास्तव में आप वस्तुओं के बारे में कैसे निर्णय लेते हैं और प्रत्येक क्या करता है?

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

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



एमवीसी पैटर्न, वास्तव में, आवेदन के लिए एक लघु ब्रह्मांड बनाता है, जो तीन अलग-अलग प्रकार की वस्तुओं से भरा होता है। यह तीनों प्रकार की वस्तुओं के लिए भूमिकाओं और जिम्मेदारियों को भी निर्दिष्ट करता है और जिस तरह से वे एक दूसरे के साथ बातचीत करने वाले हैं, उसे निर्दिष्ट करता है। चीजों को और अधिक ठोस बनाने के लिए (यानी, अपने सिर को विस्फोट से बचाने के लिए), एक बड़े, सुंदर, 60-इंच, फ्लैट स्क्रीन टीवी की कल्पना करें। यहाँ सार है:

  • मॉडल ऑब्जेक्ट: इन वस्तुओं में एक साथ आपके ऐप का सामग्री इंजन शामिल होता है। उनमें ऐप का डेटा और तर्क होता है - जो आपके ऐप को सिर्फ एक सुंदर चेहरे से अधिक बनाता है।

    आप के बारे में सोच सकते हैं नमूना (जो एक वस्तु या कई हो सकते हैं जो बातचीत करते हैं) एक विशेष टेलीविजन कार्यक्रम के रूप में, एक जो, काफी स्पष्ट रूप से, यह नहीं बताता है कि यह किस टीवी सेट पर दिखाया गया है।

    वास्तव में, मॉडल को हूट नहीं देना चाहिए। भले ही यह अपने डेटा का मालिक हो, लेकिन इसका यूजर इंटरफेस से कोई संबंध नहीं होना चाहिए और इसके डेटा के साथ क्या किया गया है, इसके बारे में आनंदपूर्वक अनभिज्ञ होना चाहिए।

    एज़ो यूटी साइड इफेक्ट
  • ऑब्जेक्ट देखें: ये ऑब्जेक्ट स्क्रीन पर चीजें प्रदर्शित करते हैं और उपयोगकर्ता के कार्यों का जवाब देते हैं। आप जो कुछ भी देख सकते हैं वह एक प्रकार की दृश्य वस्तु है - उदाहरण के लिए खिड़की और सभी नियंत्रण।

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

    आप के बारे में सोच सकते हैं राय एक टेलीविजन स्क्रीन के रूप में जो इस बात की परवाह नहीं करता कि यह कौन सा कार्यक्रम दिखा रहा है या आपने अभी कौन सा चैनल चुना है।

    UIKitफ्रेमवर्क कई अलग-अलग प्रकार के विचार प्रदान करता है, जैसा कि आप अगले भाग में देखेंगे।

    यदि दृश्य मॉडल के बारे में कुछ नहीं जानता है, और मॉडल दृश्य के बारे में कुछ नहीं जानता है, तो आप एक से दूसरे में जाने के लिए डेटा और अन्य सूचनाएं कैसे प्राप्त करते हैं? उस बातचीत को शुरू करने के लिए (मॉडल: मैंने अभी अपना डेटा अपडेट किया है। देखें: अरे, मुझे प्रदर्शित करने के लिए कुछ दें, उदाहरण के लिए), आपको एमवीसी ट्रायमवीरेट, नियंत्रक में तीसरे तत्व की आवश्यकता है।

  • नियंत्रक वस्तुएं: ये ऑब्जेक्ट एप्लिकेशन के व्यू ऑब्जेक्ट को उसके मॉडल ऑब्जेक्ट से जोड़ते हैं। वे दृश्य वस्तुओं की आपूर्ति करते हैं जो उन्हें प्रदर्शित करने की आवश्यकता होती है (इसे मॉडल से प्राप्त करना) और दृश्य से उपयोगकर्ता इनपुट के साथ मॉडल भी प्रदान करते हैं।

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

मूल एप्लिकेशन आर्किटेक्चर चित्र 4-8 जैसा दिखता है।

बुनियादी अनुप्रयोग वास्तुकला।

खांसी और जुकाम के लिए एंटीबायोटिक का नाम

जब आप मॉडल, दृश्य और नियंत्रक वस्तुओं के संदर्भ में अपने आवेदन के बारे में सोचते हैं, तोUIKitरूपरेखा समझ में आने लगती है। ढांचे को इस तरह से समझना भी आपके आवेदन-विशिष्ट व्यवहार का कम से कम हिस्सा बनाने के लिए जहां पर लटका हुआ कोहरे को उठाना शुरू कर देता है।

हालांकि, इससे पहले कि आप उस विषय में गहराई से जाएं, आपको उन कक्षाओं के बारे में कुछ और जानना होगा जो किUIKitप्रदान करता है, क्योंकि ये वे लोग हैं जिन्हें आप MVC डिज़ाइन पैटर्न - विंडो क्लास, व्यू क्लास और व्यू कंट्रोलर क्लासेस को लागू करने का काम करेंगे।

ऑब्जेक्टिव-सी में, क्लासेस में इंस्टेंस वेरिएबल, प्रॉपर्टीज और मेथड्स शामिल होते हैं (जो क्लास के इंस्टेंस वेरिएबल को एक्सेस कर सकते हैं)। कक्षाएं आपके प्रोजेक्ट की फाइलों के बारे में हैं जिनमें कोड होता है। कक्षाएं हैं प्रकार आपके कार्यक्रम में।

दूसरी ओर, ऑब्जेक्ट रनटाइम पर मौजूद होते हैं और हैं उदाहरणों एक वर्ग का। आप उस प्रकार की वस्तु के निर्माण के लिए एक वर्ग को एक खाका के रूप में सोच सकते हैं।