clojure - क्लोज़र: वास्तुकार डेस्कटॉप UI को कैसे करें



model javafx (1)

मैं schematics, लेआउट, ड्राइंग सामान के लिए एक डेस्कटॉप यूआई डिजाइन करने की कोशिश कर रहा हूँ। बस वास्तविक सॉफ्टवेयर डिजाइनरों से उच्च स्तर की सलाह की तलाश में

एक इन-मेमोरी "डेटाबेस", (सभी उपयोगकर्ता डेटा के लिए मनमाना की गहराई का क्लोजर नक्शा, और संभावित रूप से एक अन्य एप्लिकेशन प्राथमिकताएं आदि) मानते हुए, मैं इन पर मॉडल-व्यू-कंट्रोलर चीज कैसे करना चाहूंगा, जहां पर किसी भी एक या अधिक के द्वारा डेटा प्रदान और संशोधित किया जा सकता है:

  1. एक स्टैंडअलोन पाठ फ़ील्ड जो एक एकल पैरामीटर दिखाती है, जैसे बॉक्स चौड़ाई
  2. एक "इंस्पेक्टर" प्रकार का दृश्य जो चयनित ऑब्जेक्ट के कई पैरामीटर दिखाता है, जैसे बॉक्स चौड़ाई, ऊंचाई, रंग, चेकबॉक्स आदि।
  3. तालिका / स्प्रैडशीट प्रकार का दृश्य जो एकाधिक ऑब्जेक्ट्स के कई मापदंडों को दिखाता है, संभावित रूप से पूरे डेटाबेस
  4. पूरी चीज का एक चित्रमय रेंडरिंग, जैसे कि योजनाबद्ध और लेआउट दृश्य दोनों।

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

सवाल में मंच जावाएक्सएक्स है, लेकिन मुझे यूआई और बाकी सब कुछ के बीच एक साफ जुदाई करना है, इसलिए मैं जेएफएक्स की समझ में bind चाहता हूं, क्योंकि मेरे डिजाइन डेटा को जेएफएक्स गुणों के लिए बहुत जबरदस्ती से जोड़ता है, इससे अनाज बढ़ जाता है मॉडल, और मुझे डेटा से निपटने के लिए मानक क्लोज़र फ़ंक्शंस के बाहर काम करने के लिए मजबूर करता है, और / या पूरी setValue / setValue दुनिया के साथ भारी सौदे setValue है।

मैं अब भी कम से कम कुछ शब्दावली / परिवर्तनशीलता को मानता हूं, और अंतर्निर्मित क्लोज़र कार्यक्षमता का उपयोग जैसे कि परमाणु / var / रेफरी पर add-watch की क्षमता और रनटाइम सिग्नल पर निर्भर कार्य करते हैं

प्लेटफ़ॉर्म-विशिष्ट इंटरैक्शन वास्तविक यूआई के साथ कसकर आराम करेगा, जैसे कि ActionListener reifying, और ObservableValue आदि के साथ काम करना, और वास्तविक अनुप्रयोग डेटा के लिए JavaFX Property जैसी चीजों पर निर्भरता को कम करने का प्रयास करेगा। मैं इसके लिए एफआरपी का मनोरंजन नहीं कर रहा हूं।

मैं defrecord इंटरफेस का विस्तार करने या एप्लिकेशन-विशिष्ट defrecord का उपयोग करने के लिए अपना खुद का प्रोटोकॉल बनाने में कोई defrecord करता, लेकिन मैं प्लेटफॉर्म से अनगिनत क्लोज़र डेटा के सीधे आवेदन के रूप में रहना चाहता हूं।

प्रश्न यह है कि कैसे अपरिहार्य मॉडल के सबसे निकटतम अनुपालन के साथ, यह सब कैसे सेट करें। मुझे कुछ विकल्प दिखाई देते हैं:

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

मुझे एक डेटा टेम्पलेट को कई बार इन्स्तांत करने की क्षमता की आवश्यकता है इसलिए उदाहरण के लिए यदि उपयोगकर्ता कई जगहों में उपयोग किए जाने वाले प्रतीक या आकार को बदलता है, तो एक एकल संपादन हर जगह लागू होगा मेरा मानना ​​है कि इसके लिए कुछ प्रकार के "संकेतक" -वैसे व्यवहार की आवश्यकता होती है मुझे लगता है कि मैं मॉडल पर एक परमाणु को स्टोर कर सकता हूं, फिर जरूरत के मुताबिक इन्स्तांत, और यह उपरोक्त अनाज के किसी भी मॉडल में काम कर सकता है।

कोई अन्य दृष्टिकोण? क्या सिर्फ एक बेवकूफ एक कार्यात्मक भाषा में एक GUI संपादक की तरह उपकरण करने की कोशिश कर रहा है? धन्यवाद


मुझे नहीं लगता कि कोई जीयूआई संपादक-जैसे उपकरण करने के लिए एक कार्यात्मक भाषा का उपयोग करने के लिए बेवकूफ है I लेकिन मैं आपके प्रश्न का उत्तर देने का दावा नहीं कर सकता। यहां कुछ लिंक हैं जो आपकी यात्रा में आपकी सहायता कर सकते हैं:

  1. स्टुअर्ट सिएरा - अवयव बस पर्याप्त संरचना
  2. क्रिस ग्रेंजर - लाइट टेबल : बताता है कि कैसे लाइट टेबल ( स्रोत ) संरचित है।
  3. क्रिस ग्रेंजर - IDE एक मान के रूप में : ऊपर दिए गए वीडियो से संबंधित ब्लॉग पोस्ट
  4. कोनाल इलियट - मूर्त कार्यात्मक प्रोग्रामिंग : एक कम्पोज़ योग्य UI बनाने के लिए कार्यात्मक रिएक्टिव प्रोग्रामिंग का उपयोग करना, लेकिन उनका कोड हास्केल में है।
  5. नेथन हेरज़िंग और क्रिस शेआ - मतदाताओं को पेडेस्टल, डाटॉमिक, ओम और कोर के साथ मदद करना।
  6. डेविड नोलोन - तुलनात्मक साक्षर प्रोग्रामिंग : सभी को कोर। एसिंक का उपयोग करने के लिए दिखाता है ताकि क्लोज़रसर्च में यूआई प्रोग्रामिंग को सरल बनाया जा सके। यहां दिए गए विचारों को डेस्कटॉप UI में उपयोग किया जा सकता है।
  7. रिच हिकी - सिस्टम की भाषा : क्लोज़र के निर्माता द्वारा सिस्टम प्रोग्रामिंग के बारे में अद्भुत बात।

एरिक मीजेर के कार्यात्मक बनाम अनिवार्य कोड के बारे में एक अच्छी बोली है:

... कोई फर्क नहीं पड़ता कि क्या यह हास्केल, सी # जावा, एफ #, स्काला, पायथन, पीएचपी को अनिवार्य संहिता का समुद्र होने के विचार के बारे में सोचता है जो बाहरी दुनिया से संपर्क करता है और इसमें शुद्ध कोड के द्वीप हैं जहां आप अपना कार्य लिखते हैं एक शुद्ध रास्ता लेकिन आपको तय करना होगा कि द्वीप कितना बड़ा है और समुद्र कितना बड़ा है लेकिन इसका जवाब यह नहीं है कि केवल द्वीप हैं या केवल समुद्र हैं एक अच्छा प्रोग्रामर वास्तव में सही संतुलन जानता है





cad