मैं एक Winforms समाधान के लिए MVP कैसे स्थापित करूं?


14

मैंने अतीत में एमवीपी और एमवीसी का उपयोग किया है, और मुझे एमवीपी पसंद है क्योंकि यह मेरे विचार में निष्पादन के प्रवाह को इतना बेहतर नियंत्रित करता है।

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

खंड एक

  1. मैंने एमवीपी को प्रवेश बिंदु के रूप में दृश्य का उपयोग करते हुए देखा है, जो कि व्यू कंस्ट्रक्टर विधि में है जो इसे प्रस्तुतकर्ता बनाता है, जो बदले में मॉडल बनाता है, आवश्यकतानुसार घटनाओं को वायरिंग करता है।

  2. मैंने प्रस्तुतकर्ता को प्रवेश बिंदु के रूप में भी देखा है, जहां एक दृश्य, मॉडल और प्रस्तुतकर्ता बनाया जाता है, इस प्रस्तुतकर्ता को घटनाओं को तार करने के लिए इसके निर्माता में एक दृश्य और मॉडल ऑब्जेक्ट दिया जाता है।

  3. जैसा कि 2 में है, लेकिन मॉडल प्रस्तुतकर्ता को पारित नहीं किया गया है। इसके बजाय मॉडल एक स्थिर वर्ग है जहां तरीकों को बुलाया जाता है और प्रतिक्रियाएं सीधे लौटती हैं।

अनुभाग बी

दृश्य और मॉडल को सिंक में रखने के संदर्भ में मैंने देखा है।

  1. जब भी बदले हुए दृश्य में कोई मान होता है, तो TextChanged.Net / C # में ईवेंट। यह आग है DataChangedEventजो हर समय सिंक में रखने के लिए, मॉडल के माध्यम से पारित किया जाता है। और जहां मॉडल बदलता है, यानी एक पृष्ठभूमि घटना जिसे वह सुनता है, तो दृश्य को एक ही विचार के माध्यम से अद्यतन किया जाता है DataChangedEvent। जब कोई उपयोगकर्ता परिवर्तन करना चाहता है SaveEvent, तो यह आग को बचाने के लिए मॉडल में गुजरता है। इस मामले में मॉडल दृश्य के डेटा की नकल करता है और कार्रवाई करता है।

  2. # B1 के समान, हालांकि दृश्य हर समय मॉडल के साथ सिंक नहीं करता है। इसके बजाय जब उपयोगकर्ता परिवर्तन करना चाहता है, SaveEventतो निकाल दिया जाता है और प्रस्तुतकर्ता नवीनतम विवरणों को पकड़ लेता है और उन्हें मॉडल में पास करता है। इस मामले में मॉडल को उस दृश्य डेटा के बारे में पता नहीं है, जब तक उस पर कार्रवाई करने के लिए आवश्यक नहीं है, उस स्थिति में यह सभी आवश्यक विवरणों को पारित किया जाता है।

अनुभाग सी

दृश्य में व्यावसायिक वस्तुओं का प्रदर्शन, अर्थात कोई वस्तु (MyClass) आदिम डेटा नहीं (int, double)

  1. दृश्य के पास अपने सभी डेटा के लिए संपत्ति फ़ील्ड हैं जो इसे डोमेन / व्यावसायिक वस्तुओं के रूप में प्रदर्शित करेगा। जैसे कि view.Animalsएक IEnumerable<IAnimal>संपत्ति को उजागर करता है , भले ही दृश्य इन्हें ट्रीव्यू में नोड्स में संसाधित करता है। तब चयनित जानवर के लिए यह संपत्ति के SelectedAnimalरूप में सामने आएगा IAnimal

  2. दृश्य में डोमेन ऑब्जेक्ट्स का कोई ज्ञान नहीं है, यह आदिम / फ्रेमवर्क (.Net / जावा) के लिए संपत्ति को उजागर करता है जिसमें केवल ऑब्जेक्ट शामिल हैं। इस उदाहरण में प्रस्तुतकर्ता डोमेन ऑब्जेक्ट पर एक एडाप्टर ऑब्जेक्ट को पारित करेगा, एडेप्टर किसी दिए गए व्यावसायिक ऑब्जेक्ट को दृश्य पर दिखाई देने वाले नियंत्रणों में अनुवाद करेगा। इस उदाहरण में एडॉप्टर को दृश्य पर वास्तविक नियंत्रणों तक पहुंच होनी चाहिए, न कि केवल किसी भी दृश्य को और अधिक कसकर युग्मित करने के लिए।

अनुभाग डी

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

  1. आप एक विशाल दृश्य बनाते हैं, जिसमें सभी अलग-अलग नियंत्रण शामिल होते हैं जो कि दृश्य इंटरफ़ेस के माध्यम से उजागर होते हैं।

  2. आपके कई विचार हैं। आप मेनू और एक खाली पैनल के लिए एक दृश्य है। यह दृश्य आवश्यक अन्य दृश्य बनाता है, लेकिन उन्हें प्रदर्शित नहीं करता है (दृश्य = गलत), यह दृश्य उस प्रत्येक दृश्य के लिए इंटरफ़ेस को भी लागू करता है जिसमें यह शामिल है (अर्थात बच्चे के विचार) ताकि यह एक प्रस्तुतकर्ता को उजागर कर सके। रिक्त पैनल अन्य विचारों ( Controls.Add(myview)) और ( (myview.visible = true) से भरा है । इन "बाल"-साक्षात्कारों में उठाई गई घटनाओं को माता-पिता के दृष्टिकोण द्वारा नियंत्रित किया जाता है जो बदले में घटना को प्रस्तुतकर्ता को सौंप देते हैं, और बच्चे के तत्वों को वापस करने की घटनाओं के लिए वीज़ा वर्सा देते हैं।

  3. प्रत्येक दृश्य, यह मुख्य माता-पिता या छोटे बच्चे के विचार हैं, प्रत्येक को वहां प्रस्तुतकर्ता और मॉडल में वायर्ड किया गया है। आप एक मौजूदा रूप में केवल एक दृश्य नियंत्रण को छोड़ सकते हैं और इसकी कार्यक्षमता तैयार होगी, बस पर्दे के पीछे एक प्रस्तुतकर्ता में तारों की आवश्यकता होती है।

अनुभाग ई

क्या सब कुछ एक इंटरफ़ेस होना चाहिए, अब उपरोक्त उदाहरणों में एमवीपी कैसे किया जाता है इसके आधार पर इस उत्तर को प्रभावित करेगा क्योंकि वे क्रॉस-संगत नहीं हो सकते हैं।

  1. हर चीज में एक इंटरफ़ेस, व्यू, प्रस्तोता और मॉडल होता है। इनमें से प्रत्येक में स्पष्ट रूप से एक ठोस कार्यान्वयन है। यहां तक ​​कि अगर आपके पास केवल एक ठोस दृष्टिकोण, मॉडल और प्रस्तुतकर्ता है।

  2. व्यू और मॉडल में एक इंटरफ़ेस है। यह विचारों और मॉडलों को अलग करने की अनुमति देता है। प्रस्तुतकर्ता दृश्य और मॉडल ऑब्जेक्ट बनाता / देता है और यह केवल उनके बीच संदेश भेजने का कार्य करता है।

  3. केवल दृश्य में एक इंटरफ़ेस है। मॉडल में स्थिर विधियाँ हैं और इसे बनाया नहीं गया है, इस प्रकार इंटरफ़ेस की कोई आवश्यकता नहीं है। यदि आप एक अलग मॉडल चाहते हैं, तो प्रस्तुतकर्ता स्थिर वर्ग विधियों का एक अलग सेट कहता है। मॉडल स्थिर होने से प्रस्तुतकर्ता के लिए कोई लिंक नहीं है।

व्यक्तिगत विचार

मेरे द्वारा प्रस्तुत किए गए सभी विभिन्न रूपों से (ज्यादातर मैंने शायद किसी रूप में उपयोग किया है) जिनमें से मुझे यकीन है कि कुछ और भी हैं। मैं कम से कम डेटा दोहराव और कम घटनाओं को निकाल दिया जा रहा है के लिए एमवीपी, बी 2 के बाहर व्यापार तर्क को पुन: प्रयोज्य रखने के रूप में A3 को प्राथमिकता देता हूं। C1 को किसी अन्य वर्ग में नहीं जोड़ने के लिए, सुनिश्चित करें कि यह एक छोटी मात्रा में गैर-इकाई परीक्षण योग्य तर्क को एक दृश्य में रखता है (एक डोमेन ऑब्जेक्ट की कल्पना कैसे की जाती है) लेकिन यह कोड की समीक्षा की जा सकती है, या बस एप्लिकेशन में देखी जा सकती है। यदि तर्क जटिल था, तो मैं एक एडेप्टर वर्ग से सहमत होगा, लेकिन सभी मामलों में नहीं। खंड डी के लिए, मुझे लगता है कि डी 1 एक ऐसा दृश्य बनाता है जो मेनू उदाहरण के लिए बहुत बड़ा है। मैंने पहले भी डी 2 और डी 3 का उपयोग किया है। D2 के साथ समस्या यह है कि आप अंत में प्रस्तुतकर्ता से सही बच्चे को देखने के लिए मार्ग घटनाओं के लिए बहुत सारे कोड लिखने के लिए, और इसके ड्रैग / ड्रॉप संगत नहीं हैं, प्रत्येक नए नियंत्रण को एकल प्रस्तुतकर्ता का समर्थन करने के लिए अधिक तारों की आवश्यकता होती है। डी 3 मेरी पसंद की पसंद है लेकिन दृश्य से निपटने के लिए प्रस्तुतकर्ता और मॉडल के रूप में अभी तक अधिक कक्षाओं में जोड़ता है, भले ही दृश्य बहुत सरल हो या फिर पुन: उपयोग करने की कोई आवश्यकता न हो। मुझे लगता है कि डी 2 और डी 3 का मिश्रण परिस्थितियों पर आधारित है। खंड ई के रूप में, मुझे लगता है कि एक इंटरफ़ेस वाले सब कुछ ओवरकिल हो सकता है मैं इसे पहले से ही डोमेन / व्यावसायिक वस्तुओं के लिए करता हूं और अक्सर ऐसा करके "डिजाइन" में कोई फायदा नहीं दिखता है, लेकिन यह परीक्षणों में वस्तुओं का मजाक उड़ाने में मदद करता है। व्यक्तिगत रूप से मैं E2 को एक क्लासिक समाधान के रूप में देखूंगा, हालाँकि मैंने E3 को उन 2 परियोजनाओं में उपयोग किया है जिन्हें मैंने पहले काम किया है। मुझे लगता है कि डी 2 और डी 3 का मिश्रण परिस्थितियों पर आधारित है। खंड ई के रूप में, मुझे लगता है कि एक इंटरफ़ेस वाले सब कुछ ओवरकिल हो सकता है मैं इसे पहले से ही डोमेन / व्यावसायिक वस्तुओं के लिए करता हूं और अक्सर ऐसा करके "डिजाइन" में कोई फायदा नहीं दिखता है, लेकिन यह परीक्षणों में वस्तुओं का मजाक उड़ाने में मदद करता है। व्यक्तिगत रूप से मैं E2 को एक क्लासिक समाधान के रूप में देखूंगा, हालाँकि मैंने E3 को उन 2 परियोजनाओं में उपयोग किया है जिन्हें मैंने पहले काम किया है। मुझे लगता है कि डी 2 और डी 3 का मिश्रण परिस्थितियों पर आधारित है। खंड ई के रूप में, मुझे लगता है कि एक इंटरफ़ेस वाले सब कुछ ओवरकिल हो सकता है मैं इसे पहले से ही डोमेन / व्यावसायिक वस्तुओं के लिए करता हूं और अक्सर ऐसा करके "डिजाइन" में कोई फायदा नहीं दिखता है, लेकिन यह परीक्षणों में वस्तुओं का मजाक उड़ाने में मदद करता है। व्यक्तिगत रूप से मैं E2 को एक क्लासिक समाधान के रूप में देखूंगा, हालाँकि मैंने E3 को उन 2 परियोजनाओं में उपयोग किया है जिन्हें मैंने पहले काम किया है।

सवाल

क्या मैं एमवीपी को सही तरीके से लागू कर रहा हूं? क्या इसके बारे में जाने का एक सही तरीका है?

मैंने मार्टिन फाउलर के काम को पढ़ा है जिसमें विविधताएं हैं, और मुझे याद है कि जब मैंने पहली बार एमवीसी करना शुरू किया था, तो मैं अवधारणा को समझ गया था, लेकिन मूल रूप से यह काम नहीं कर सका कि प्रवेश बिंदु कहां है, सब कुछ का अपना कार्य है लेकिन क्या नियंत्रण करता है और मूल बनाता है MVC ऑब्जेक्ट्स का सेट।


2
इस प्रश्न को पूछने का कारण यह है कि मैं इसे लगभग पहले प्रयास में ही सही समझ रहा हूँ। मेरे पास एक मानक एमवीपी का पालन करने के बजाय एक ही पैटर्न के लिए विभिन्न रूपों का उपयोग करके 6 एप्लिकेशन बनाने के लिए होगा।
जॉनविलिस

परफेक्ट ... मैं इसे लंबे समय से पूछना चाहता था
द किंग

जवाबों:


4

यहां जो कुछ भी आप प्रस्तुत करते हैं, वह बहुत ही उचित और सरल है। कुछ विकल्प आवेदन के साथ बारीकियों पर निर्भर करने वाले हैं और कौन सा "सही" लगता है। जैसा कि ज्यादातर समय होता है, एक सही जवाब नहीं है। कुछ विकल्पों में से कुछ समझ में आएगा और वे विकल्प अगले आवेदन और परिस्थितियों के लिए पूरी तरह से गलत हो सकते हैं। ऐप की कुछ बारीकियों को जाने बिना, मुझे लगता है कि आप सही रास्ते पर हैं और कुछ ध्वनि, विचारशील निर्णय लिए हैं।

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


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

मैं यह सुनिश्चित करने के लिए कि इसे इकाई परीक्षण नहीं किया जा रहा है, को सही ठहराने के लिए सभी प्रयासों के साथ सहमत होना चाहिए, फिर प्रस्तुतकर्ता का नियंत्रण होना चाहिए। इसके साथ मेरी एकमात्र चिंता (मेरे सिर में सोच गलत हो सकती है) यह है कि winforms / usercontrols को मूल तत्वों से जोड़ने की आवश्यकता हो सकती है और आश्चर्य हो सकता है कि इसे लिखने के लिए प्रस्तुतकर्ता में अतिरिक्त तर्क की आवश्यकता है।
JonWillis

@Jon - तरीके MVP गलत हैं? मेरी पुस्तक में यह तब होगा जब दृश्य प्रस्तुतकर्ता के बारे में जानता है। यह इस अर्थ में "गलत" नहीं हो सकता है कि यह काम करता है, लेकिन यह सिर्फ एमवीपी नहीं होगा, यह उस बिंदु पर किसी और चीज़ में बदल जाता है। डिजाइन पैटर्न के साथ समस्या यह है कि उदाहरण हमेशा यथासंभव स्वच्छ और सरल होते हैं। फिर जब आप पहली बार उन्हें लागू करने के लिए जाते हैं और वास्तविक दुनिया उछल जाती है और कहती है कि 'अरे असली एप्स उस दंडनीय उदाहरण की तुलना में अधिक जटिल हैं।' यहीं से आपकी ग्रोथ शुरू होती है। आपके और ऐप की परिस्थितियों के लिए क्या काम करता है, इसका पता लगाएं।
वाल्टर

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

1
@Jon - एमवीपी की भावना को ध्यान में रखते हुए आपकी विविधताएं बहुत सुंदर हैं। जहाँ तक इंटरफेस या कंक्रीट प्रकार के साथ काम करने की बात है, यह ऐप की परिस्थितियों पर निर्भर करता है। यदि एप्लिकेशन बहुत छोटा है, बहुत जटिल नहीं है, तो शायद इंटरफेस जोड़ना आवश्यक नहीं है। मुझे चीजों को यथासंभव सरल रखना पसंद है, जब तक कि यह बिल्कुल स्पष्ट न हो जाए कि ऐप को एक्स आर्किटेक्चर को लागू करने की आवश्यकता है। और अधिक विस्तार के लिए इस उत्तर को देखें: programmers.stackexchange.com/questions/34547/…
Walter

4

हम अपने .NET 2.0 Winforms ऐप पर MVP के संशोधित रूप का उपयोग करते हैं। हम जो दो टुकड़े याद कर रहे थे, वह WPF ViewModel का संशोधित एडॉप्टर था, और डेटा बाइंडिंग को जोड़ रहा था। हमारा विशिष्ट पैटर्न MVPVM है।

हम प्रस्तोता-प्रथम के रूप में वायर करते हैं, लगभग हर मामले में, कस्टम यूज़रकंट्रोल को छोड़कर, जो कि व्यू-फर्स्ट फ्रेंडलीनेस के लिए वायर्ड हैं। हम मॉडल के लिए निर्भरता इंजेक्शन, कोड-जेनरेट किए गए ViewModels, BDD प्रस्तुतकर्ताओं के लिए, और TDD / TED का उपयोग करते हैं।

VM के गुणों के बड़े पैमाने पर, सपाट, वेड हैं जो संपत्ति के परिवर्तन को बढ़ाते हैं जब वे बदल जाते हैं। कोड (और उनके संबद्ध व्यायाम इकाई परीक्षणों) द्वारा इन्हें उत्पन्न करना बहुत आसान था। हम उन्हें पढ़ने और लिखने के लिए उपयोगकर्ता-इंटरेक्टेबल नियंत्रणों और सक्षम स्थितियों को नियंत्रित करने के लिए उपयोग करते हैं। ViewModel व्यू के साथ युग्मित है, क्योंकि हम सब कुछ के पास लानत के लिए डेटाबाइंडिंग का उपयोग करते हैं।

दृश्य कभी-कभी उन चीज़ों को पूरा करने के लिए उस पर तरीके होंगे जो वीएम नहीं कर सकते। यह आमतौर पर वस्तुओं की दृश्यता को नियंत्रित करता है (WinForms इसके बारे में picky हो सकता है), और चीजें जो डेटाबाउंड होने से इनकार करती हैं। व्यू हमेशा "एग्रेस" या "रिस्टार्ट" जैसी घटनाओं को उजागर करता है, उपयोगकर्ता के व्यवहार पर कार्य करने के लिए उपयुक्त EventArgs के साथ। जब तक हमें "View.ShowLoginBox" जैसी हैक का उपयोग नहीं करना पड़ता है, तब तक दृश्य पूरी तरह से विनिमेय है जब तक कि यह सामान्य डिजाइन आवश्यकताओं को पूरा नहीं करता है।

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


मुझे पता है कि आपका एमवीपीवीएम वाणिज्यिक हित में हो सकता है, लेकिन यदि इसका ठीक है तो आप कोई नमूना कोड प्रदान कर सकते हैं? एक साइड नोट पर, आप मॉडल में क्या करते हैं और प्रस्तुतकर्ता में क्या जाता है, इस पर रेखा खींचते हैं। मैंने देखा है कि प्रस्तुतकर्ता बहुत बुनियादी है वे घटनाओं को संभालते हैं और बस मॉडल को कॉल करते हैं, प्रस्तुतकर्ता को व्यावसायिक वस्तुओं को एक मॉडल में पास करने के लिए डेटा परतों तक पहुंचते हैं, सभी तरह से मॉडल प्रस्तुतकर्ता द्वारा प्रतिस्थापित किया जा रहा है।
जॉनविले

हां, मुझे एक उदाहरण खत्म करने दें। यह हमारे व्यवसाय के लिए थोड़ा सा सिलवाया जाएगा, क्योंकि मैं इसे घर में प्रशिक्षण उपकरण के रूप में उपयोग कर रहा हूं।
ब्रायन बोएचर

धन्यवाद, मैं सप्ताहांत पर इसे देखूंगा कि क्या मैं इसे समझता हूं
जॉनविल

@ आइंस्टा - लिंक नीचे है, क्या आप इसे कहीं फिर से लोड कर सकते हैं?
यवेस शेल्पे

1
बकवास मैं सिर्फ एक हफ्ते पहले की तरह इसे हटा दिया। आंकड़े :(
ब्रायन Boettcher

2

मैं PureMvc के एक संस्करण का उपयोग कर रहा हूं जिसे .Net के लिए संशोधित किया गया है, और फिर अपने द्वारा विस्तारित किया गया है।

मैं FlexM अनुप्रयोगों में इसका उपयोग करने से PureMvc करने के लिए इस्तेमाल किया गया था। यह एक नंगे हड्डियों का ढांचा है, इसलिए यदि आप इसे अनुकूलित करना चाहते हैं, तो इसे अनुकूलित करना काफी आसान है।

मैंने इसके साथ निम्नलिखित स्वतंत्रताएं लीं:

  • परावर्तन का उपयोग करते हुए मैं व्यू-मीडिएटर में निजी गुणों को प्राप्त करने में सक्षम था, जो कि फॉर्म क्लास में जाने और प्रत्येक नियंत्रण के लिए (निजी) संदर्भ को हड़पने में सक्षम था।
  • प्रतिबिंब का उपयोग करके मैं अपने मध्यस्थ में ईवेंट हस्ताक्षर पर नियंत्रणों को ऑटो-वायर कर सकता हूं, जो सामान्य हैं, इसलिए मैं सिर्फ प्रेषक पैरामीटर पर स्विच करता हूं।
  • आम तौर पर, PureMvc व्युत्पन्न मध्यस्थों को एक फ़ंक्शन में अपने अधिसूचना हितों को परिभाषित करना चाहता है जो स्ट्रिंग की एक सरणी लौटाएगा। चूंकि मेरे हित ज्यादातर स्थिर हैं, और मैं मध्यस्थों के हितों को देखने का एक आसान तरीका चाहता था, इसलिए मैंने एक संशोधन किया ताकि मध्यस्थ एक विशेष हस्ताक्षर के साथ सदस्य चर के सेट द्वारा अपने हितों की घोषणा कर सकें: _ _ _ <classname _ <अधिसूचना-नाम>। इस तरह मैं देख सकता हूं कि एक फंक्शन के अंदर देखने के बजाय IDE मेंबर ट्री का इस्तेमाल करने पर क्या चल रहा है।

PureMvc में, आप प्रवेश बिंदु होने के लिए एक कमांड का उपयोग कर सकते हैं, एक विशिष्ट स्टार्ट कमांड मॉडल को उस सीमा तक सेट करेगा, जब वह मेनफ़ॉर्म बना सकता है, उस फॉर्म के लिए और उसके साथ मध्यस्थ बना और रजिस्टर कर सकता है, फिर Application.Run करें। फॉर्म पर।

फॉर्म के लिए मध्यस्थ सभी उप-मध्यस्थों को स्थापित करने के लिए जिम्मेदार होगा, इनमें से कुछ को फिर से, प्रतिबिंब चाल का उपयोग करके स्वचालित किया जा सकता है।

मैं जिस सिस्टम का उपयोग कर रहा हूं वह ड्रैग / ड्रॉप संगत है, अगर मैं आपका अर्थ समझता हूं। वास्तविक रूप सभी VS में बनाया गया है, लेकिन मेरा अनुभव केवल उन रूपों के साथ है, जिनमें सांख्यिकीय रूप से नियंत्रण हैं। गतिशील रूप से बनाई गई मेनू आइटम जैसी चीजें उस मेनू या सबमेनू के लिए मध्यस्थ की एक बिट के साथ व्यवहार्य लगती हैं। जहां यह बालों को प्राप्त होता है, जब मध्यस्थ के पास स्थिर जड़ तत्व नहीं होता है और आप गतिशील 'उदाहरण' मध्यस्थ बनाने में जुट जाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.