8

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

मेरे सवाल यह है: मैं कैसे दृश्य से मेरी नियंत्रक अलग हैं? क्या दृश्य नियंत्रक से घटनाओं से जुड़ा होना चाहिए - या दृश्य को एक इंटरफ़ेस को कार्यान्वित करना चाहिए जिसमें नियंत्रक इंटरैक्ट करता है?

उत्तर

6

यदि मैं आप थे तो मैं आपके विचार के इंटरफ़ेस से ईवेंट का पर्दाफाश करूंगा। यह आपको संपूर्ण बातचीत के लिए नियंत्रक केंद्रीय बनाने की अनुमति देगा।

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

क्या आप करना चाहते हैं तो भी एक घटना दलाल जो देखने के प्रति एक अंतरफलक की घोषणा करने की जरूरत शून्य होगा इस्तेमाल कर सकते हैं। इस तरह आप गुणों के माध्यम से घटनाओं से बंध सकते हैं।

यह आपको नियंत्रक के साथ मॉडल और दृश्य इंटरफ़ेस पर निर्भर होने के साथ छोड़ देगा, यह दृश्य केवल डेटा पर निर्भर है और मॉडल पर निर्भरता नहीं है।

उपर्युक्त डिजाइन सोच के कुछ उदाहरण सीएबी और स्मार्ट क्लाइंट सॉफ्टवेयर फैक्टरी Link To Smart Client में पाए जा सकते हैं। वे एमवीपी पैटर्न का उपयोग करते हैं लेकिन यह एमवीसी पैटर्न पर भी आसानी से लागू किया जा सकता है।

1

इस जीयूआई की कल्पना कीजिए:

Zergling इकाई एक विदेशी चिह्न के रूप में उपयोगकर्ता के लिए प्रस्तुत किया गया है। आप देख सकते हैं कि यह अपनी निष्क्रिय एनीमेशन में है। इसे देखें कॉल करें।

खिलाड़ी यह और एक लक्ष्य स्थान पर क्लिक करके इकाई ले जाता है। यदि आप चाहें तो आप एआई के लिए खिलाड़ी को घटा सकते हैं। इसे नियंत्रक कहते हैं। जब इकाई से निपटने में है

हिमाचल प्रदेश और यूनिट के हमले रेंज हर खेल फ्रेम गणना की जाती है। ज़रलिंग को एक श्रेणी इकाई में बनाने के लिए आप इस डेटा को बदल सकते हैं। मॉडल को कॉल करें।

इसे ध्यान में सादृश्य रखें और इसे अपने MVC डिजाइन के लिए विस्तार।

+0

ग्रेट संदर्भ। : डी – nevelis

1

आपके लिए याद रखने के लिए अमूर्त चीज यह है कि आपके एमवीसी सेटअप में नियंत्रक को पता होना चाहिए कि किस कॉल को कॉल करना है, लेकिन दृश्य को नियंत्रक के कुछ भी नहीं पता होना चाहिए।

तो आपके दृश्य को नियंत्रकों के साथ बातचीत करने के लिए एक सामान्यीकृत तरीका प्रदान करना होगा, ताकि आपके पास कई अलग-अलग नियंत्रक एक ही दृश्य (उदाहरण के लिए पैरामीटर के रूप में प्रदान किए गए कुछ डेटा का मानकीकृत ग्राफिकल आउटपुट) कह सकें।

यह आपको लचीलापन प्रदान करता है:

  1. अपने ग्राहक कुछ की पीडीएफ उत्पादन आप केवल HTML उत्पादन, के लिए आप एक नया PDF देखें लेखन के साथ भाग प्राप्त कर सकते हैं प्रदान करते हैं चाहता है नियंत्रक से के नाम से जाना एचटीएमएल व्यू के समान पैरामीटर के साथ।
  2. यदि आपका ग्राहक किसी भिन्न डेटा स्रोत (कहें) के समान HTML आउटपुट चाहता है, तो आप एक नए नियंत्रक को कोडिंग करने से दूर हो सकते हैं जो एक ही पुराने HTML व्यू को एक अलग डेटा सेट प्रदान करता है, जो एक ही HTML रिपोर्ट को अन्य के साथ देता है डेटा।

यदि आप अपने व्यू को विशिष्ट नियंत्रकों से अलग रखते हैं, और ज्ञान को अपने नियंत्रक से कॉल करने के बारे में जानकारी देते हैं, तो आप अपने रास्ते पर अच्छे हैं।

0

आपका नियंत्रक निश्चित रूप से दृश्य कार्यान्वयन के इंटरफेस पर परिभाषित घटनाओं से जुड़ा होना चाहिए।

आप यह करने के बारे में कैसे जाते हैं यह मुश्किल हिस्सा हो सकता है। निर्भरता अन्तःक्षेपण? एक दृश्य कारखाना? क्या दृश्य उस नियंत्रक को तुरंत चालू करता है जिसे वह चाहता है? यह वास्तव में इस बात पर निर्भर करता है कि एप्लिकेशन कितना जटिल होगा।

कुछ वास्तव में त्वरित और सरल के लिए मैं प्रत्येक दृश्य को इसके नियंत्रक का निर्माण करने के साथ शुरू करूंगा और फिर बड़े होने की आवश्यकता होने पर अन्य विकल्पों को देखें। व्यक्तिगत रूप से मुझे लगता है कि पूर्ण निर्भरता इंजेक्शन ढांचा आधा दर्जन रूपों के लिए अधिक है:]

3

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

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

याद रखें: एमवीसी एक महान पैटर्न है, लेकिन यह एक आकार नहीं है, सभी आकार फिट बैठता है, एमवीसी में किसी समस्या को हल करने और मजबूर नहीं करते हैं जब घटना-आधारित या कार्यात्मक शैली प्रोग्रामिंग आपके जीवन को आसान बना देगी।

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