मैं जावाएफएक्स का अध्ययन करने का प्रयास कर रहा हूं क्योंकि मैं इसे अपने कार्यक्रम के जीयूआई के रूप में उपयोग करना चाहता हूं। मेरा सवाल अनिवार्य रूप से एक वैचारिक है:क्या जावाएफएक्स में ऑब्जर्वेबललिस्ट का उपयोग मॉडल-व्यू-कंट्रोलर अलगाव के खिलाफ जाता है?
आज तक मेरा कार्यक्रम एमवीसी पैटर्न का "मॉडल" हिस्सा है; यानी, मेरे लगभग सभी कोड कक्षाओं के अर्थ में अवशोषण का ओओ-प्रतिनिधित्व है, और वह सभी कोड तार्किक कोड है।
चूंकि मैं अपने कार्यक्रम का एकमात्र उपयोगकर्ता नहीं बनना चाहता, इसलिए मैं एमवीसी का "व्यू" हिस्सा जोड़ना चाहता हूं ताकि लोग आसानी से मेरे प्रोग्राम के "मॉडल" भाग का उपयोग और कुशलतापूर्वक उपयोग कर सकें। इसके लिए, मैं जावाएफएक्स का उपयोग करना चाहता हूं।
मेरे "मॉडल" कक्षाओं में मैं स्पष्ट रूप से जावा संग्रह एपीआई से विभिन्न सूचियों, मानचित्रों और अन्य वर्गों का उपयोग करता हूं। मेरे कार्यक्रम के उपयोगकर्ताओं को इन अंतर्निहित सूचियों और मानचित्रों में हेरफेर करने के लिए मैं जावाएफएक्स में अवलोकन (सूची/मानचित्र) इंटरफेस का उपयोग करना चाहता हूं।
एक ठोस उदाहरण स्थिति के लिए स्पष्टता लाने के लिए:
कहते हैं कि मैं एक MachineMonitor वर्ग है कि हर 3 मिनट में इस तरह करता है, तो कनेक्शन अभी भी अच्छा है के रूप में एक मशीन के कुछ गुण, की जाँच करता है करते हैं, गति जो गियर मोड़ रहे हैं, इत्यादि। यदि कुछ असमानताओं को पूरा किया जाता है (कहें कि गियर की गति 1 मोड़/सेकंड की दर से गिर गई है) मशीन मॉनिटर एक रेस्टार्टमैचिनवेन्ट को आग लगती है।
वर्तमान में मैं एक ArrayList < MachineMonitor> का उपयोग 'व्यक्तिगत MachineMonitor रों के सभी का ट्रैक रखने के। अब एमवीसी के "व्यू" भाग में विस्तार करने के लिए, मैं चाहता हूं कि उपयोगकर्ता एक टेबल व्यू में हेरफेर करने में सक्षम हो जो मशीन मॉनिटर एस की सूची प्रदर्शित करता है ताकि उदाहरण के लिए, वे नए मशीन मॉनिटर की मॉनिटर करने के लिए बना और निकाल सकें विभिन्न मशीनें
ताकि मैं ट्रैक कर सकूं कि मेरे प्रोग्राम का उपयोगकर्ता क्या करना चाहता है (कहें, मशीन मॉनिटर मशीन # 5 के लिए बनाएं जो यह देखने के लिए जांचता है कि गियर का बारी/सेकंड 0.5 से नीचे आता है) एक ObservableList < MachineMonitor> तालिका दृश्य के लिए अंतर्निहित सूची के रूप में।
"मॉडल" और "देखें" लिंक करने के लिए सबसे आसान तरीका है मेरे कार्यक्रम बस एक ObservableList < MachineMonitor> और नहीं एक ArrayList के लिए "मॉडल" वर्ग बदलने के लिए होगा की < MachineMonitor> लेकिन (प्रश्न के विषय में आना) मुझे लगता है कि यह बहुत गन्दा है क्योंकि यह "मॉडल" और "व्यू" कोड मिश्रण करता है।
एक भोली दृष्टिकोण tableview के लिए एक ObservableList < MachineMonitor> का उपयोग करें और मेरी ArrayList < MachineMonitor> के उपयोग बनाए रखने के लिए किया जाएगा। हालांकि, ObservableList < मशीन मॉनिटर> में किए गए परिवर्तन जावाएफएक्स विनिर्देशों के अनुसार अंतर्निहित सूची को प्रभावित नहीं करते हैं।
इस को देखते हुए, ObservableList < MachineMonitor> कि "प्रसारित" ObservableList < MachineMonitor> अंतर्निहित "मॉडल" ArrayList < करने में किए गए परिवर्तनों के लिए एक ChangeListener बनाने के लिए इस पहेली को हल करने के लिए सबसे अच्छा तरीका है मशीन मॉनिटर>? शायद इसे मशीन मॉनिटर कंट्रोलर नामक कक्षा में रखें?
यह विज्ञापन-समाधान बहुत गन्दा और गैर-आदर्श लगता है।
मेरा प्रश्न है: इस परिदृश्य में "मॉडल" और "व्यू" के बीच लगभग पूर्ण अलगाव को बनाए रखने का सबसे अच्छा तरीका क्या है?
हालांकि मैं एमवीसी अवधारणा के महत्व का सम्मान और समझता हूं, लेकिन मैं यह कहना चाहूंगा कि आपको हमेशा मूल्यांकन करना चाहिए यदि आपको वास्तव में इसकी आवश्यकता है। आम तौर पर, वी और सी एक साथ आते हैं क्योंकि इन दो कुछ हद तक बिना उपयोगी ढांचे को खोजना दुर्लभ होता है। असली एमवीसी स्वतंत्रता प्राप्त करना मुश्किल है और बहुत सारे संकेत कोड की मांग करता है। असली एमवीसी के बीच वास्तव में एक मीठा स्थान है और कुछ अच्छे ढांचे का चयन करना और लंबे समय तक आईएमओ में चिपकना है। – Leo
मुझे लगता है कि जावाएफएक्स 'टेबल व्यू' का एपीआई वास्तव में कष्टप्रद है। मुझे समझ में नहीं आता कि क्यों कोई आसान तरीका नहीं है, जैसे 'table.getModel()। सेट (पंक्ति, कॉल, डेटा) '। और मैं सहमत हूं और "महसूस करता हूं" कि यह एमवीसी के खिलाफ है। मैं चाहता हूं कि डेटा को अपडेट होने पर अपडेट किया जाए, और जीयूआई को मेरे लिए यह स्वचालित रूप से न करने दें। अगर मैं इसे स्वचालित रूप से अपडेट करना चाहता था, तो मैं माइक्रोसॉफ्ट टूल्स का उपयोग करता हूं, जावा नहीं (और मैं वास्तव में ऐसा नहीं करना चाहता) ... ऐसा लगता है कि डब्ल्यूपीएफ – SomethingSomething