मैंने कुछ समय पहले एक बहुत अच्छा ब्लॉग पढ़ा जो इस मुद्दे पर चर्चा करता है (कार्ल बेवफेल्ड द्वारा उल्लिखित), जो मूल रूप से कहता है कि यूआई किट थ्रेड को सुरक्षित बनाने और बनाने के लिए बहुत खतरनाक है, क्योंकि यह संभव गतिरोधों का परिचय देता है और इस पर निर्भर करता है कि यह कैसे है लागू किया, ढांचे में दौड़ की स्थिति।
एक प्रदर्शन पर विचार भी है। अभी इतना नहीं है, लेकिन जब स्विंग को पहली बार रिलीज़ किया गया था, तो इसके प्रदर्शन (खराब होने) के लिए इसकी बहुत आलोचना की गई थी, लेकिन यह वास्तव में स्विंग की गलती नहीं थी, यह लोगों की ज्ञान की कमी थी कि इसका उपयोग कैसे किया जाए।
SWT अपवादों को फेंककर थ्रेड सुरक्षा की अवधारणा को लागू करता है यदि आपका उल्लंघन करता है, तो यह सुंदर नहीं है, लेकिन कम से कम आपको इसके बारे में पता है।
यदि आप पेंटिंग की प्रक्रिया को देखते हैं, उदाहरण के लिए, जिस क्रम में तत्वों को चित्रित किया गया है वह बहुत महत्वपूर्ण है। आप नहीं चाहते कि स्क्रीन के किसी अन्य भाग पर एक घटक की पेंटिंग का दुष्प्रभाव हो। कल्पना करें कि क्या आप किसी लेबल की टेक्स्ट प्रॉपर्टी को अपडेट कर सकते हैं, लेकिन इसे दो अलग-अलग थ्रेड्स द्वारा चित्रित किया गया था, आप एक दूषित आउटपुट के साथ समाप्त कर सकते हैं। इसलिए सभी पेंटिंग एक ही धागे के भीतर की जाती हैं, जो आमतौर पर आवश्यकताओं / अनुरोधों के क्रम पर आधारित होती हैं (लेकिन कभी-कभी वास्तविक भौतिक पेंट चक्रों की संख्या को कम करने के लिए संघनित होती हैं)
आप झूले से बदलकर JavaFX का उल्लेख करते हैं, लेकिन आपको यह समस्या किसी भी UI फ्रेमवर्क (न केवल मोटे क्लाइंट, बल्कि वेब के साथ) के बारे में भी होगी, स्विंग केवल वह लगती है जो समस्या को उजागर करती है।
आप एक मध्यवर्ती परत (एक नियंत्रक का नियंत्रक?) डिजाइन कर सकते हैं जिसका काम यह सुनिश्चित करना है कि यूआई को कॉल सही ढंग से सिंक्रनाइज़ हो। यह जानना असंभव है कि आप अपने एपीआई के गैर-यूआई भागों को यूआई एपीआई के परिप्रेक्ष्य से कैसे डिज़ाइन कर सकते हैं और अधिकांश डेवलपर्स शिकायत करेंगे कि यूआई एपीआई में कार्यान्वित किसी भी थ्रेड सुरक्षा को प्रतिबंधित करना या उनकी आवश्यकताओं को पूरा नहीं करना था। अपनी आवश्यकताओं के आधार पर आपको यह तय करने की अनुमति देने के लिए बेहतर है कि आप इस मुद्दे को कैसे हल करना चाहते हैं
ज्ञात इनपुट्स के आधार पर, आपको जिन सबसे बड़े मुद्दों पर विचार करने की आवश्यकता है, वे घटनाओं के दिए गए क्रम को सही ठहराने की क्षमता है। उदाहरण के लिए, यदि उपयोगकर्ता विंडो का आकार बदलता है, तो इवेंट कतार मॉडल यह गारंटी देता है कि घटनाओं का एक दिया गया क्रम घटित होगा, यह सरल लग सकता है, लेकिन अगर कतार ने अन्य थ्रेड्स को ट्रिगर करने की घटनाओं की अनुमति दी है, तो आप अब आदेश की गारंटी नहीं दे सकते हैं जो घटनाएँ (एक दौड़ की स्थिति) हो सकती हैं और अचानक आपको अलग-अलग राज्यों के बारे में चिंता करना शुरू कर देना चाहिए और एक काम नहीं करना चाहिए जब तक कि कुछ और नहीं हो जाता है और आपको राज्य के झंडे चारों ओर साझा करने लगते हैं और आप स्पेगेटी के साथ समाप्त हो जाते हैं।
ठीक है, आप इसे किसी प्रकार की कतार के द्वारा हल कर सकते हैं, जो उस समय के आधार पर घटनाओं को जारी करने का आदेश देता है, लेकिन ऐसा नहीं है कि हमारे पास पहले से क्या है? इसके अलावा, आप अभी भी इस बात की कोई गारंटी नहीं दे सकते हैं कि थ्रेड बी यह घटनाओं के बाद उत्पन्न होगा धागा ए
लोगों को अपने कोड के बारे में सोचने के लिए परेशान होने का मुख्य कारण है, क्योंकि वे अपने कोड / डिज़ाइन के बारे में सोचने के लिए बने हैं। "यह सरल क्यों नहीं हो सकता है?" यह सरल नहीं हो सकता, क्योंकि यह एक साधारण समस्या नहीं है।
मुझे याद है कि जब PS3 जारी किया गया था और सोनी सेल प्रोसेसर से बात कर रहा था और यह लॉजिक, डिकोड, ऑडियो, वीडियो, लोड और मॉडल डेटा को अलग करने की अलग-अलग लाइनें करने की क्षमता है। एक गेम डेवलपर ने पूछा, "यह सब बहुत बढ़िया है, लेकिन आप धाराओं को कैसे सिंक्रनाइज़ करते हैं?"
डेवलपर जिस समस्या के बारे में बात कर रहा था, कुछ बिंदु पर, उन सभी अलग-अलग धाराओं को आउटपुट के लिए एकल पाइप के साथ सिंक्रनाइज़ करने की आवश्यकता होगी। गरीब प्रस्तोता बस के रूप में यह एक समस्या है कि वे से परिचित थे नहीं था। जाहिर है, उनके पास अब इस समस्या को हल करने के लिए समाधान है, लेकिन यह उस समय अजीब है।
आधुनिक कंप्यूटर बहुत सारे अलग-अलग स्थानों से एक साथ बहुत से इनपुट ले रहे हैं, उन सभी इनपुट को संसाधित करने और उपयोगकर्ता को वितरित करने की आवश्यकता होती है जो अन्य जानकारी की प्रस्तुति में हस्तक्षेप नहीं करता है, इसलिए यह एक जटिल समस्या है, बाहर एक सरल समाधान।
अब, फ्रेमवर्क को स्विच करने की क्षमता होने पर, BUT के लिए डिज़ाइन करना आसान बात नहीं है, MVC को एक पल के लिए ले लें, MVC को बहुस्तरीय बनाया जा सकता है, अर्थात, आपके पास MVC हो सकता है, जो सीधे UI फ्रेमवर्क के प्रबंधन से संबंधित है, आप फिर, एक उच्च परत MVC में लपेट सकता है, जो अन्य (संभावित बहु थ्रेडेड) चौखटे के साथ बातचीत करता है, यह इस परत की जिम्मेदारी होगी कि यह निर्धारित किया जाए कि निम्न MVC परत को कैसे अधिसूचित / अद्यतन किया जाए।
फिर आप इन विभिन्न परतों के निर्माण के लिए इंटरफ़ेस डिज़ाइन पैटर्न और फ़ैक्टरी या बिल्डर पैटर्न के लिए कोडिंग का उपयोग करेंगे। इसका मतलब है, कि आप एक विचार के रूप में, एक मध्यम परत के उपयोग के माध्यम से यूआई परत से बहुस्तरीय रूपरेखाओं का डिकॉउंड हो जाते हैं।