2012-09-06 16 views
6

प्रश्न पुरानी टोपी है - हमारे सिस्टम में कॉन्फ़िगरेशन फ़ाइल या सिस्टम कॉन्फ़िगरेशन का समर्थन करने के लिए उचित डिज़ाइन क्या है? मैं निम्न आवश्यकताओं की पहचान की है:जावा सिस्टम में कॉन्फ़िगरेशन डिज़ाइन पैटर्न

  • लाइव को फिर से लोड करने में सक्षम होना चाहिए और परिवर्तन नहीं redeploying
  • सॉफ्टवेयर अनुप्रयोगों है कि एक ही है, जैसे, एसक्यूएल या memcached साख पर भरोसा करते हैं के लिए के साथ तुरंत उठाया है, होना चाहिए एक अलग जगह में परिवर्तन लागू करने और एक बार में तैनात है, भले ही आवेदन पत्र
  • कई प्रक्रियाओं/एक ही आवेदन समर्थित

चल मशीनों और यह डिजाइन मैं के कुछ हिस्सों अलग स्थानों में अलग मशीनों पर कर रहे हैं करने के लिए संभव मैं हूँ ट्रगलिंग के साथ:

  • क्या प्रत्येक प्रमुख वर्ग कन्स्ट्रक्टर को इनपुट पैरामीटर के रूप में अपनी "कॉन्फ़िगर" कक्षा लेनी चाहिए? क्या सही कॉन्फ़िगरेशन के संबंध में तत्काल के लिए जिम्मेदार एक कारखाना होना चाहिए? या प्रत्येक कक्षा को सिर्फ अपनी कॉन्फ़िगरेशन से पढ़ा जाना चाहिए और कुछ हद तक पुनः लोड करना चाहिए?
  • यदि कक्षा बी कक्षा ए से निकला है, या इसके चारों ओर बना है, तो क्या यह कॉन्फ़िगर फ़ाइल को विरासत में प्राप्त करने के लिए समझ में आता है?
  • कहें कक्षा ए एम 1 और एम 2 ("मुख्य" के लिए एम) द्वारा निर्मित है और एम 1 संसाधन को तत्काल करने के लिए ज़िम्मेदार है। मान लें कि संसाधन MySQL प्रमाण-पत्रों पर निर्भर करता है जो मुझे एम 1 और एम 2 के बीच आम होने की उम्मीद है, क्या ब्रेक स्वामित्व के व्यापार से बचने और ए की कॉन्फ़िगरेशन वी में डालने का कोई तरीका है। एम 1 और एम 2 की कॉन्फ़िगरेशन में संसाधन को डुप्लिकेट करें?

ये डिजाइन समस्याएं हैं जिनके साथ मैं अभी व्यवहार कर रहा हूं और वास्तव में यहां डिजाइन पैटर्न या ढांचे को नहीं जानता हूं। मैं जावा में हूं इसलिए किसी भी पुस्तकालय को हल करने का बहुत स्वागत है।

उत्तर

7

आप Apache Commons Config, जो सुविधाओं की एक विस्तृत श्रृंखला उपलब्ध कराता बाहर की जाँच कर सकते हैं। आप एकाधिक विन्यास स्रोत निर्दिष्ट कर सकते हैं, और इन्हें पदानुक्रम में व्यवस्थित कर सकते हैं। विशेष रुचि की एक विशेषता Configuration Events के प्रावधान है, जिससे आपके घटक कॉन्फ़िगरेशन परिवर्तनों में अपनी रुचि पंजीकृत कर सकते हैं।

मक्खी पर config बदलने का लक्ष्य सम्मोहक है, पर डिजाइन के आसपास कुछ सोचा की आवश्यकता है। आप उन परिवर्तनों को ध्यान से प्रबंधित करने की आवश्यकता है (जैसे कि यदि आप कतार आकार हटना होता है - आप कतार पर मौजूदा तत्वों फेंक करते हैं?)

0

प्रत्येक प्रमुख वर्ग के लिए एक इनपुट पैरामीटर के रूप में अपने स्वयं के "कॉन्फ़िग" वर्ग लेने चाहिए निर्माता?

नहीं, यह एक भयानक डिजाइन जो अनावश्यक रूप से कोड का एक बहुत overcomplicate हैं जैसा लगता है। मैं आपको एक वैश्विक कॉन्फ़िगरेशन क्लास को सिंगलटन के रूप में लागू करने की सलाह दूंगा। सिंगलटन का अर्थ है कि केवल एक कॉन्फ़िगरेशन ऑब्जेक्ट है, जो आपके कॉन्फ़िगरेशन क्लास का एक निजी स्थैतिक चर है और इसे जब भी आवश्यक हो, सार्वजनिक स्थिर getInstance() विधि के साथ अधिग्रहित किया जा सकता है।

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

+4

मैं इसे एक सिंगलटन के रूप में निर्दिष्ट करने के बजाए कक्षा को इंजेक्ट करना चाहता हूं। यह अभी तक 4 अनुप्रयोगों में और 20 इन-हाउस पुस्तकालयों में एक * बहुत * आसान –

+1

वैश्विक परीक्षण करेगा? – djechlin

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