अतीत में, मैंने अपने आवेदन में विंडोज रूपों के विस्तार की अनुमति देने के लिए विरासत का उपयोग किया है। यदि मेरे सभी रूपों में सामान्य नियंत्रण, कलाकृति, और कार्यक्षमता होगी, तो मैं सामान्य नियंत्रण और कार्यक्षमता को लागू करने वाला एक आधार प्रपत्र बनाऊंगा और फिर अन्य नियंत्रणों को उस आधार रूप से प्राप्त करने की अनुमति दूंगा। हालाँकि, मैं उस डिज़ाइन के साथ कुछ समस्याओं में चला गया हूँ।
नियंत्रण केवल एक समय में एक कंटेनर में हो सकते हैं, इसलिए आपके पास कोई भी स्थैतिक नियंत्रण मुश्किल होगा। उदाहरण के लिए: मान लीजिए कि आपके पास बेस फॉर्म था जिसका नाम बेसफार्म था जिसमें ट्रीव्यू शामिल था जिसे आप संरक्षित और स्थिर बनाते हैं ताकि इस वर्ग के अन्य (व्युत्पन्न) सभी उदाहरण उसी ट्री व्यू को संशोधित और प्रदर्शित कर सकें। यह बेसफ़ॉर्म से विरासत में मिली कई कक्षाओं के लिए काम नहीं करेगा, क्योंकि ट्री व्यू केवल एक समय में एक कंटेनर में हो सकता है। यह संभवतः प्रारंभिक रूप से अंतिम रूप में होगा। हालांकि हर उदाहरण नियंत्रण को संपादित कर सकता है, यह केवल एक निश्चित समय में प्रदर्शित होगा। बेशक, काम के आसपास हैं, लेकिन वे सभी बदसूरत हैं। (यह मेरे लिए एक बहुत बुरा डिजाइन है। क्यों कई कंटेनर एक ही वस्तु के लिए संकेत स्टोर नहीं कर सकते हैं? किसी भी तरह, यह वही है जो यह है।)
प्रपत्रों के बीच की स्थिति, यानी बटन स्टेट्स, लेबल टेक्स्ट आदि। मुझे लोड पर राज्यों को रीसेट करने और रीसेट करने के लिए वैश्विक चर का उपयोग करना होगा।
यह वास्तव में विजुअल स्टूडियो के डिजाइनर द्वारा बहुत अच्छी तरह से समर्थित नहीं है।
वहाँ एक बेहतर, अभी भी आसानी से बनाए रखने योग्य डिजाइन का उपयोग करने के लिए है? या क्या फॉर्म इनहेरिटेंस अभी भी सबसे अच्छा तरीका है?
अपडेट मैं एमवीसी को एमवीपी से ऑब्जर्वर पैटर्न को इवेंट पैटर्न में देखने पर गया। यहाँ मैं इस समय के लिए सोच रहा हूँ, कृपया समालोचना करें:
मेरे बेसफ़ॉर्म वर्ग में केवल नियंत्रण होंगे, और उन नियंत्रणों से जुड़ी घटनाएं। उन सभी घटनाओं को जिन्हें संभालने के लिए किसी भी प्रकार के तर्क की आवश्यकता होती है, तुरंत बेसफ़ॉर्मप्रेज़ेंट क्लास में पास हो जाएगी। यह वर्ग UI से डेटा को संभालेगा, कोई तार्किक कार्य करेगा और फिर BaseFormModel को अपडेट करेगा। मॉडल उन घटनाओं को उजागर करेगा, जो राज्य परिवर्तन पर प्रस्तुतकर्ता वर्ग को आग देगा, जिसे वह सदस्यता देगा (या निरीक्षण करेगा)। जब प्रस्तुतकर्ता घटना सूचना प्राप्त करता है, तो यह कोई भी तर्क देगा, और फिर प्रस्तुतकर्ता तदनुसार दृश्य को संशोधित करेगा।
स्मृति में केवल प्रत्येक मॉडल वर्ग में से एक होगा, लेकिन संभवतः बेसफोर्म के कई उदाहरण हो सकते हैं और इसलिए बेसफार्मर। यह बेसफ़ॉर्म के प्रत्येक उदाहरण को एक ही डेटा मॉडल में सिंक्रनाइज़ करने की मेरी समस्या को हल करेगा।
प्रशन:
कौन सी परत को अंतिम दबाया गया बटन की तरह सामान संग्रहीत करना चाहिए, ताकि मैं इसे उपयोगकर्ता के लिए हाइलाइट रख सकूं (जैसे सीएसएस मेनू में) रूपों के बीच?
कृपया इस डिजाइन की आलोचना करें। आपकी सहायताके लिए धन्यवाद!