जीयूआई लिखते समय, मैं अक्सर निम्नलिखित समस्या पर आ जाता हूं: मान लें कि आपके पास एक मॉडल और नियंत्रक है। नियंत्रक के पास विजेट W
है जिसका उपयोग मॉडल के X
को दिखाने के लिए किया जाता है।जीयूआई में ब्रेकिंग इवेंट चक्र
क्योंकि मॉडल नियंत्रक के बाहर से बदला जा सकता है (उसी मॉडल का उपयोग कर अन्य नियंत्रक हो सकते हैं, पूर्ववत ऑपरेशन इत्यादि), नियंत्रक मॉडल पर परिवर्तनों को सुनता है। नियंत्रक विजेट W
पर घटनाओं को भी सुनता है और तदनुसार संपत्ति X
अद्यतन करता है।
अब, निम्न होता है:
W
में मूल्य- एक घटना उत्पन्न होता है बदल गया है, नियंत्रक शुरू हो जाती है में हैंडलर
- नियंत्रक नया मान सेट मॉडल
- मीटर Odel घटनाओं का उत्सर्जन करता है, क्योंकि यह बदल दिया गया है
- नियंत्रकमॉडल से एक परिवर्तन घटना
- नियंत्रक
X
का मूल्य हो जाता है प्राप्त करता है और विजेट - गोटो 1. में यह सेट
उस के लिए कई संभावित समाधान हैं:
- मॉडल अद्यतन होने पर ध्वज सेट करने के लिए नियंत्रक को संशोधित करें, और यदि यह ध्वज सेट किया गया है तो मॉडल से किसी भी घटना पर प्रतिक्रिया न दें।
- डिस्कनेक्ट नियंत्रक अस्थायी रूप से (या मॉडल बता कुछ समय के लिए किसी भी घटनाओं को भेजने के लिए नहीं)
- विजेट
अतीत में से अपडेट फ्रीज, मैं आमतौर पर विकल्प 1. के लिए, चला गया क्योंकि यह सबसे सरल बात इसमें झंडे के साथ आपकी कक्षाओं को छेड़छाड़ करने की कमी है, लेकिन अन्य तरीकों में भी उनकी कमी है।
बस रिकॉर्ड के लिए, मुझे जीटीके +, क्यूटी और एसडब्ल्यूटी सहित कई जीयूआई टूलकिट्स के साथ यह समस्या आई है, इसलिए मुझे लगता है कि यह सुंदर टूलकिट-अज्ञेयवादी है।
कोई भी सर्वोत्तम प्रथाओं? या क्या वास्तुकला मैं बस गलत उपयोग करता हूं?
@Shy: यह कुछ मामलों के लिए एक समाधान है, लेकिन अगर आपको X
नियंत्रक के बाहर से बदल दिया गया है (उदाहरण के लिए, पूर्ववत/redo के लिए कमांड पैटर्न का उपयोग करते समय), तो फिर भी आप अनावश्यक घटनाओं का दौर प्राप्त करते हैं, क्योंकि तब मान बदल गया है, W
अद्यतन किया गया है और एक घटना को आग लगती है। मॉडल के लिए एक और (बेकार) अपडेट को रोकने के लिए, विजेट द्वारा उत्पन्न घटना निगलनी होगी।
अन्य मामलों में, मॉडल अधिक जटिल हो सकता है और वास्तव में जो कुछ भी बदला गया है, उस पर एक सरल जांच संभव नहीं हो सकती है, उदा। एक जटिल पेड़ दृश्य।
मुझे हर समय एमएफसी में सूची बॉक्स के साथ यह समस्या है। –