9

यह एक सामान्य सवाल होने जा रहा है।एक जीयूआई आवेदन व्यवस्थित करना

मैं एक जीयूआई आवेदन, esp डिजाइन करने में संघर्ष कर रहा हूं। विभिन्न भागों के बीच बातचीत के साथ निपटने के साथ।

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

एक उदाहरण:

मैं अपने आवेदन रास्ते से एक Emacs/विम प्रकार में बढ़ाई होना चाहता हूँ, स्क्रिप्ट के माध्यम से। जाहिर है, कुछ प्रकार के साझा राज्य को संशोधित करने की आवश्यकता है, ताकि जीयूआई इसका इस्तेमाल करे। मेरी प्रारंभिक योजना में वैश्विक "सत्र" था जो हर जगह से सुलभ है, लेकिन मुझे इसके बारे में इतना यकीन नहीं है।

एक मुश्किल उपयोग केस कुंजी बाइंडिंग है। मैं चाहता हूं कि उपयोगकर्ता स्क्रिप्ट से कस्टम कीबाइंडिंग निर्दिष्ट कर सके। प्रत्येक कीबाइंडिंग मैप्स एक मनमानी कमांड के लिए, जो सत्र को एकमात्र तर्क के रूप में प्राप्त करता है।

अब, संपादक घटक कुंजीपटल को कैप्चर करता है। इसे कीमैपिंग तक पहुंच होनी चाहिए, जो प्रति सत्र हैं, इसलिए इसे सत्र तक पहुंच की आवश्यकता है। सत्र में संपादक को एक अच्छा विचार जोड़ रहा है? अन्य घटकों को कीबाइंडिंग तक पहुंचने की भी आवश्यकता होगी, इसलिए सत्र अब साझा हो जाता है और एक सिंगलटन हो सकता है ...

क्या एमवीसी से परे जीयूआई अनुप्रयोगों को डिजाइन करने के बारे में कोई अच्छी पढ़ाई है?

यह पायथन और WxPython, FWIW है।

[संपादित करें]: ठोस कंक्रीट उपयोग जोड़ा गया।

उत्तर

3

इस सवाल पर इतनी देर से कूदने के लिए खेद है, लेकिन कुछ भी नहीं, मेरा मतलब है कुछ भी नहीं कुछ ऐसा करने वाले एप्लिकेशन के स्रोत को देखकर हरा सकता है। (मैं http://pida.co.uk जैसे कुछ की सिफारिश कर सकता हूं, लेकिन वहां बहुत सारे एक्स्टेंसिबल डब्ल्यूएक्स + पायथन आईडीई हैं जो आपके द्वारा बनाई जा रही चीज़ों की तरह लगता है)।

मैं कुछ नोट्स बना सकता है:

  1. संदेश गुजर स्वाभाविक बुरा नहीं है, और यह जरूरी रूप में लंबे समय घटक इंटरफेस का पालन के रूप में घटकों के बीच युग्मन कारण नहीं है।

  2. साझा राज्य स्वाभाविक रूप से खराब नहीं है, लेकिन मैं आपके आंत वृत्ति के साथ जाऊंगा और जितना संभव हो उतना उपयोग करूँगा। चूंकि ब्रह्मांड ही राज्यपूर्ण है, इसलिए आप वास्तव में इसे पूरी तरह से नहीं बचा सकते हैं। मैं एक साझा "बॉस" ऑब्जेक्ट का उपयोग करता हूं जो आमतौर पर प्रति एप्लिकेशन एक गैर-सिंगलटन एकल उदाहरण होता है, और अन्य घटकों को ब्रोक करने के लिए ज़िम्मेदार होता है।

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

मैं पर जा सकते हैं, लेकिन मैं क्या कहना है के अधिकांश, तो अपने मूल मुद्दे पर PIDA codebase में है ...

2

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

1

एमवीसी में, मॉडल सामग्री जानकारी की साझा स्थिति है।

नियंत्रण सामग्री जीयूआई नियंत्रण सेटिंग्स और माउस-क्लिक और प्रतिक्रियाओं के जवाबों की साझा स्थिति है।

आपका पटकथा कोण

1) अद्यतन कर सकते हैं मॉडल वस्तुओं। यह अच्छा है। नियंत्रण मॉडल ऑब्जेक्ट्स के "पर्यवेक्षक" हो सकते हैं और दृश्य को देखा गया परिवर्तनों को दर्शाने के लिए अद्यतन किया जा सकता है।

2) नियंत्रण वस्तुओं को अद्यतन करें। यह इतना अच्छा नहीं है, लेकिन ... नियंत्रण वस्तुएं मॉडल और/या दृश्य में उचित परिवर्तन कर सकती हैं।

मुझे यकीन नहीं है कि समस्या एमवीसी के साथ क्या है। क्या आप विशिष्ट मुद्दों या चिंताओं के साथ एक और विस्तृत डिजाइन उदाहरण प्रदान कर सकते हैं?

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