ऐसा लगता है कि आप कुछ सामान्य नुकसान में गिर गए हैं, लेकिन चिंता न करें, उन्हें ठीक किया जा सकता है :)
सबसे पहले आपको अपने आवेदन को थोड़ा अलग तरीके से देखना होगा और इसे विखंडू में तोड़ना शुरू करना होगा। हम विखंडू को दो दिशाओं में विभाजित कर सकते हैं। पहले हम यूआई कोड से कंट्रोलिंग लॉजिक (बिजनेस रूल्स, डेटा एक्सेस कोड, यूजर राइट्स कोड, उस तरह का सारा सामान) अलग कर सकते हैं। दूसरा हम UI कोड को विखंडू में तोड़ सकते हैं।
तो हम बाद वाले हिस्से को पहले करेंगे, UI को विखंडू में तोड़ेंगे। ऐसा करने का सबसे आसान तरीका एक एकल होस्ट फॉर्म है, जिस पर आप अपने यूआई को यूजर कॉंट्रोल के साथ जोड़ते हैं। प्रत्येक उपयोगकर्ता नियंत्रण प्रपत्र के एक क्षेत्र का प्रभारी होगा। तो कल्पना कीजिए कि आपके आवेदन में उपयोगकर्ताओं की एक सूची थी, और जब आप किसी उपयोगकर्ता पर क्लिक करते हैं तो नीचे एक पाठ बॉक्स उनके विवरण से भरा होता है। आपके पास उपयोगकर्ता सूची के प्रदर्शन का प्रबंधन करने वाला एक उपयोगकर्ता नियंत्रण और उपयोगकर्ता के विवरण के प्रदर्शन का प्रबंधन करने वाला दूसरा व्यक्ति हो सकता है।
यहां वास्तविक चाल यह है कि आप नियंत्रणों के बीच संचार का प्रबंधन कैसे करते हैं। आप नहीं चाहते कि फार्म पर 30 उपयोगकर्ता नियंत्रण सभी बेतरतीब ढंग से एक-दूसरे के संदर्भों को पकड़े और उन पर कॉल करने के तरीके।
इसलिए आप प्रत्येक नियंत्रण के लिए एक इंटरफ़ेस बनाते हैं। इंटरफ़ेस में ऑपरेशन शामिल हैं जो नियंत्रण स्वीकार करेगा और किसी भी घटना को उठाएगा। जब आप इस ऐप के बारे में सोचते हैं, तो आपको परवाह नहीं है कि सूची बॉक्स सूची चयन में परिवर्तन होता है, आप इस तथ्य में रुचि रखते हैं कि एक नया उपयोगकर्ता बदल गया है।
इसलिए हमारे उदाहरण ऐप का उपयोग करते हुए, उपयोगकर्ताओं के सूची बॉक्स को नियंत्रित करने वाले नियंत्रण के लिए पहला इंटरफ़ेस उपयोगकर्ताचेंज नामक एक घटना को शामिल करेगा जो एक उपयोगकर्ता ऑब्जेक्ट को पास करता है।
यह बहुत अच्छा है क्योंकि अब अगर आप लिस्टबॉक्स से ऊब गए हैं और एक 3 डी ज़ूम मैजिक आई कंट्रोल चाहते हैं, तो आप इसे उसी इंटरफ़ेस पर कोड कर दें और इसे प्लग इन करें :)
ठीक है, इसलिए भाग दो, यूआई लॉजिक को डोमेन लॉजिक से अलग करता है। खैर, यह एक अच्छा पहना हुआ रास्ता है और मैं आपको एमवीपी पैटर्न को देखने की सलाह दूंगा। यह वास्तव में सरल है।
प्रत्येक नियंत्रण को अब एक व्यू (वीवीपी में वी) कहा जाता है और हमने पहले से ही अधिकांश को कवर किया है जो ऊपर आवश्यक है। इस मामले में, नियंत्रण और इसके लिए एक इंटरफ़ेस।
हम जो कुछ जोड़ रहे हैं वह मॉडल और प्रस्तुतकर्ता है।
मॉडल में वह तर्क होता है जो आपकी एप्लिकेशन स्थिति का प्रबंधन करता है। आप सामान जानते हैं, यह उपयोगकर्ताओं को प्राप्त करने के लिए डेटाबेस में जाएगा, जब आप एक उपयोगकर्ता जोड़ते हैं, तो डेटाबेस पर लिखेंगे, और इसी तरह। विचार यह है कि आप इस सब को बाकी सब चीज़ों से पूरी तरह अलग कर सकते हैं।
प्रस्तुतकर्ता समझाने के लिए थोड़ा और मुश्किल है। यह एक वर्ग है जो मॉडल और दृश्य के बीच बैठता है। यह दृश्य द्वारा बनाया गया है और दृश्य पहले प्रस्तुत किए गए इंटरफ़ेस का उपयोग करके प्रस्तुतकर्ता में स्वयं को पास करता है।
प्रस्तुतकर्ता के पास अपना स्वयं का इंटरफ़ेस नहीं है, लेकिन मुझे वैसे भी एक बनाना पसंद है। प्रस्तुतकर्ता को स्पष्ट करने के लिए आप क्या चाहते हैं।
अतः प्रस्तुतकर्ता ListOfAllUsers जैसी विधियों को प्रकट करेगा, जिसे View अपने उपयोगकर्ताओं की सूची प्राप्त करने के लिए उपयोग करेगा, वैकल्पिक रूप से, आप ViewUser विधि को View में रख सकते हैं और प्रस्तुतकर्ता से कॉल कर सकते हैं। मैं बाद वाला पसंद करता हूं। इस तरह प्रस्तुतकर्ता कभी भी उपयोगकर्ता को जब चाहे तब सूची बॉक्स में जोड़ सकता है।
प्रस्तुतकर्ता के पास CanEditUser जैसे गुण भी होंगे, जो उपयोगकर्ता द्वारा संपादित किए जाने पर सही वापस आ जाएगा। इसके बाद व्यू को हर बार जानना होगा। आप काले रंग में संपादन योग्य चाहते हैं और केवल ग्रे में पढ़ सकते हैं। तकनीकी रूप से यह दृश्य के लिए एक निर्णय है क्योंकि यह यूआई केंद्रित है, चाहे उपयोगकर्ता पहली बार में प्रस्तुतकर्ता के लिए संपादन योग्य हो। प्रस्तुतकर्ता जानता है क्योंकि यह मॉडल से बात करता है।
इसलिए सारांश में, एमवीपी का उपयोग करें। Microsoft SCSF (स्मार्ट क्लाइंट सॉफ़्टवेयर फ़ैक्टरी) नामक कुछ प्रदान करता है जो मेरे वर्णित तरीके से MVP का उपयोग करता है। यह कई अन्य चीजें भी करता है। यह काफी जटिल है और मुझे सब कुछ करने का तरीका पसंद नहीं है, लेकिन इससे मदद मिल सकती है।