2008-10-20 14 views
6

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

उत्तर

1

क्या आपके सभी डिफ़ॉल्ट एक वर्ग में चिपकना मुश्किल होगा ताकि वे आपके कोड को कूड़े न रहे?

मैंने हालिया परियोजनाओं में commons configuration का उपयोग किया है। मैंने जावा प्राथमिकता एपीआई में देखा है लेकिन मुझे कॉमन्स प्रोजेक्ट की लचीलापन पसंद है। और आपको डिफ़ॉल्ट मान निर्दिष्ट करने की आवश्यकता नहीं है!

2

आप यहां कुछ अवधारणाओं को मिश्रित कर रहे हैं। कोड में दिया गया डिफ़ॉल्ट स्थानीय स्थिति के लिए 'उचित डिफ़ॉल्ट' के रूप में विशिष्ट होना चाहिए। यदि आप एप्लिकेशन-व्यापी डिफ़ॉल्ट चाहते हैं, तो आपको एक वरीयता-प्रदाता की आवश्यकता है जो आपको डिफ़ॉल्ट प्राथमिकताओं और ओवरलैड उपयोगकर्ता-वरीयताओं दोनों में हुक करने की अनुमति देता है। कुछ ऐसा जो एक सार्थक परियोजना हो सकता है।

ओह, और "उचित डिफ़ॉल्ट" कॉन्फ़िगरेशन से बचने का एक शानदार तरीका है जब आवश्यक नहीं है लेकिन आवश्यकता होने पर उपयोगकर्ता या पैकेजर को बेहतर मूल्य प्रदान करने की अनुमति दें।

@ टिप्पणी, मुझे लगता है कि मैं समझता हूं।

'स्थानीय स्थिति' से मेरा मतलब कोड के संदर्भ में है। आपके जीयूआई के लिए, आपको डिस्प्ले के लिए एक मान की आवश्यकता है जो थ्रेड का उपयोग कर रहा है जो दर्शाता है। इसलिए मैं वर्कर.DEFAULT_TIMEOUT जैसे कुछ उपयोग करता हूं। आपका कर्मचारी डिफ़ॉल्ट रूप से समान मान का उपयोग करेगा। इस तरह आप कॉन्फ़िगर किए गए मान या कार्यकर्ता के डिफ़ॉल्ट को पुनर्प्राप्त कर रहे हैं जब आप कार्यकर्ता के व्यवहार को सेट कर रहे हों।

1

आप डिफ़ॉल्ट मान डाल सकते हैं .preferences फ़ाइल जो आप अपनी .jar फ़ाइल में बंडल करते हैं (या विशिष्ट वर्ग या स्थिरांक में इंटरफ़ेस में)।

मैं इसे विंडो की स्थिति/आकार जैसी चीजों के लिए उपयोग करता हूं, फाइलों को चुनने के लिए डिफ़ॉल्ट फ़ोल्डर को याद करता हूं, आखिरी खुली फाइलें और ऐसी छोटी सी चीजें। मैं वरीयताओं के साथ "मुफ्त में" कुछ दिलचस्प चीजों के बारे में सोच सकता हूं:

  • ओएस-अनुशंसित तरीके से चीजें कर रहा है; ओएस आपको अपने ऐप फ़ोल्डर में "सेटिंग फाइल" लिखने की अनुमति नहीं दे सकता है, और उपयोगकर्ता यह पूछना पसंद नहीं करते कि वे डिस्क पर कहां से सेटिंग्स को सहेजना चाहते हैं, और आप प्रत्येक प्लेटफ़ॉर्म
  • के लिए अपना कस्टम तर्क लागू नहीं करना चाहते हैं
  • अपने डेटा प्रत्येक ओएस उपयोगकर्ता अलग
  • के लिए उपयोगकर्ता डेटा रखने के लिए एक तरह से सहेजा जाता है, भले ही आपके एप्लिकेशन अनइंस्टॉल हो (या एक उन्नत दौरान)
  • फाइल सिस्टम

करने के लिए डेटाबेस या उपयोग की जरूरत नहीं है इसके अलावा, मुझे क्रमबद्धता पसंद नहीं है और इसके लिए इसकी अनुशंसा नहीं करते हैं। सीरियलाइजेशन का मतलब है कि आपको अपने आवेदन के नए संस्करणों में अपनी कक्षाओं को बदलते समय सावधानी बरतनी होगी।

2

तो आप AbstractPreferences लागू करके वरीयताओं को अपने वांछित संग्रहण का पालन करने के तरीके पर पूर्ण नियंत्रण लेना चाहेंगे।आप एक linux आधारित कार्यान्वयन यहाँ देख सकते हैं:

http://www.docjar.com/html/api/java/util/prefs/FilePreferencesImpl.java.html

गुड लक!

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