2013-04-23 8 views
8

मेरे पास वेब-आधारित प्रोग्रामिंग (PHP, जेएसएफ, ...) और स्विंग और स्विट के साथ न्यूनतम पृष्ठभूमि में पृष्ठभूमि है।जावा एफएक्स: घोषणात्मक बनाम प्रक्रियात्मक

वर्तमान में मैं एक नए डेस्कटॉप एप्लिकेशन के लिए जावा एफएक्स 2.x देख रहा हूं और मैं वास्तविक जीयूआई बनाने से संबंधित सर्वोत्तम प्रथाओं के बारे में सोच रहा हूं। मैं fxml के साथ घोषणात्मक मार्ग जा सकता हूं या मैं प्रक्रियात्मक मार्ग जा सकता हूं। वर्तमान में कुछ त्वरित प्रोटोटाइप के लिए मैं बाद में कर रहा हूं लेकिन मैं सोच रहा था कि fxml का उपयोग करने के लिए आकर्षक कारण थे या नहीं।

अद्यतन

अंत मैं एक औसत आकार परियोजना के लिए और यहां तक ​​कि दृश्य बिल्डर बीटा अभी भी मेरे Linux सिस्टम पर कुछ हद तक अस्थिर है, हालांकि FXML मार्ग चला गया में, यह बेहद के लिए बेहतर साबित हो गया है मूल प्रक्रियात्मक प्रोटोटाइप। अब तक का सबसे बड़ा फायदा यह है कि बहुत से तत्व (विशेष रूप से हॉक्स, vbox, लेबल, टैब, ...) अब मेरे कोड को अव्यवस्थित नहीं करते हैं क्योंकि वे केवल fxml में मौजूद हैं।

उत्तर

12

ओरेकल अनुशंसाएँ

ओरेकल सलाह देखें।

वैकल्पिक घोषणात्मक टेक्नोलॉजीज JavaFX

के लिए JavaFX में अन्य कथात्मक टुकड़े CSS और 3D models

एक अर्ध-कथात्मक विधि JavaFX Builder API है कर रहे हैं, लेकिन आप उस से बचने के लिए the builder api will be deprecated in future JavaFX versions के रूप में चाहते हो सकता है।

इसके अतिरिक्त, यदि आप अन्य भाषाओं में प्रोग्राम करते हैं, तो इनमें से कुछ जावाएफएक्स विकास के लिए एक घोषणात्मक डोमेन विशिष्ट भाषा (डीएसएल) एम्बेड करते हैं, (उदाहरण के लिए ScalaFX या GroovyFX)।

आम तौर पर घोषणात्मक वाक्यविन्यास का उपयोग मुख्य रूप से यूआई मार्कअप कार्यों के लिए प्रक्रियात्मक प्रोग्रामिंग पर जीता है। यह, इस तरह के HTML, सीएसएस, FXML, XAML, MXML, XUL के रूप में प्रौद्योगिकियों की प्रमुखता के द्वारा देखा जा आदि

निम्न स्तर प्रोग्रामिंग

इस तरह के एक कस्टम JavaFX नियंत्रण के विकास के रूप में निम्न स्तर के कार्यों के लिए, जावाएफएक्स कैनवास या प्रसंस्करण छवि डेटा में हेरफेर करना, प्रक्रियात्मक जावा एपीआई घोषणात्मक FXML का उपयोग करने के बजाय सबसे उपयुक्त है - JavaFX codebase in openjfx में से कोई भी FXML का उपयोग नहीं करता है।

व्यक्तिगत पसंद और सलाह

अंत में, वहाँ कोई सही जवाब यहाँ है। पसंद को चुनने के लिए डेवलपर को पसंद किया जाता है।

कोई कारण नहीं है कि आप फिट होने पर दो शैलियों को मिश्रित नहीं कर सकते हैं। एक सीधी घोषणात्मक दृष्टिकोण का उपयोग करके आपको एक बहुत ही कठोर यूआई (जैसे स्थिर एचटीएमएल पेज) के साथ छोड़ दिया जाता है, जो प्रक्रियात्मक और घोषणात्मक दृष्टिकोण (जैसे एचटीएमएल + जावास्क्रिप्ट + AJAX) दोनों को मिलाता है - और यह जावाएफएक्स के लिए भी सच है इस मामले में एचटीएमएल विकास के लिए।

छोटे कार्यक्रमों के लिए मुझे आईडीई में कुछ कोड लिखना, संकलन करना और एक्सएमएल आधारित एफएक्सएमएल और जावा कोड के बीच संदर्भ स्विच से निपटने के बिना इसे चलाना पसंद है। लेकिन मुझे पता चला है कि यह प्रक्रियात्मक दृष्टिकोण केवल बड़ी परियोजनाओं के लिए अच्छी तरह से स्केल नहीं करता है। एफएक्सएमएल में अलग दृश्य होने से चिंताओं और मॉड्यूलरलाइजेशन को अलग करने में मदद मिलती है। FXML मांगों के कृत्रिम अलगाव के बिना इन दृश्यों और तर्क चिंताओं को मिश्रित करना बहुत आसान है।

मुझे वास्तव में यूआई लेआउट भाषा के रूप में एक्सएमएल पसंद नहीं है। मुझे लगता है कि अप्रचलित जावाएफएक्स 1.x शाखा से अब निष्क्रिय एफएक्सडी प्रारूप बहुत बेहतर था। हालांकि, एफएक्सएमएल जावाएफएक्स 2 के लिए सबसे सुलभ और व्यापक रूप से उपयोग किया जाने वाला घोषणात्मक यूआई वाक्यविन्यास है।

मैं जावाएफएक्स प्रोग्राम के साथ सीएसएस का उपयोग करता हूं और इसे FXML घोषणात्मक कोड और जावा एपीआई प्रक्रियात्मक कोड दोनों के साथ उपयोग करने की तरह करता हूं। मेरी राय में, कम से कम कोड से शैली को अलग करना महत्वपूर्ण है क्योंकि यह कोड से लेआउट को अलग करना है।

सीएसएस का उपयोग करते समय, कोड में शैलियों को इनलाइन करने के बजाय अपनी शैली को एक अलग स्टाइल शीट में रखना हमेशा सर्वोत्तम होता है।

जैसा कि किसी अन्य उत्तर में बताया गया है, जावाएफएक्स सीन बिल्डर विज़ुअल डिज़ाइन टूल वर्तमान में केवल FXML के साथ काम करता है और अन्य सभी चीज़ों को अलग करता है, यही कारण है कि कई लोग अपने जावाएफएक्स यूआई को परिभाषित करने के लिए FXML का उपयोग करने के लिए पर्याप्त कारण हैं।

2

fxml का उपयोग करने का मेरा कारण यह है कि इसे दृश्य बिल्डर द्वारा उत्पन्न किया जा सकता है। मैं हाथ से लेआउट को बेकार नहीं करना चाहता ...

2

यदि आप एप्लिकेशन कोड से लेआउट (एफएक्सएमएल) को अलग कर रहे हैं, तो मौका अधिक है कि आप कुछ यूएक्स लोगों को लेआउट पर काम करने के लिए पूछ सकते हैं सीनियरबिल्डर केवल उन्हें एक संपूर्ण आईडीई की आवश्यकता के बजाय।

  1. Why use FXML
  2. Implementing JavaFX Best Practices

ओरेकल जावा एपीआई से अधिक लेआउट परिभाषा के लिए FXML की सिफारिश करते हैं:

1

फिर भी दृश्यबिल्डर अभी तक इसके साथ काम करने के लिए पर्याप्त नहीं है। विवरण के लिए हमें हाथ में FXML पर वापस जाना होगा और यह अच्छा नहीं है।

और सीन और बिल्डिंग FXML फ़ाइल के साथ सीनबिल्डर में कुछ छोटी बग।

ओरेकल को जावाएफएक्स स्वास्थ्य के लिए सीन बिल्डर अपडेट करना होगा! क्योंकि बहुत अच्छा उपकरण दिख रहा है!

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