2010-06-26 9 views

उत्तर

1

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

अन्यथा, एक सिंगलटन के रूप में डेटाबेस क्लास को डिज़ाइन करना एक ऐसा अभ्यास है जो बहुत समझ में आता है, क्योंकि आप किसी भी समय किसी स्क्रिप्ट पर कितने कनेक्शन बना रहे हैं, इस पर कड़े नियंत्रण बनाए रख सकते हैं।

+0

आप विभिन्न डेटाबेस से निपटने के लिए है, तो "रजिस्ट्री" डिजाइन पैटर्न (जो एक सिंगलटन साहचर्य सरणी तरह दिखता है) का उपयोग करें और उपयोग करें जब रजिस्ट्री कुंजी के रूप में कनेक्शन डीएसएन। – greg0ire

+0

रजिस्ट्री पैटर्न एक भयानक समाधान है। बस एक मल्टीटन का उपयोग करें और कुंजी/मूल्य जोड़े प्रदान करें (जहां कुंजी कनेक्शन का नाम है, उदाहरण के लिए "कनेक्शन_1" और मान कनेक्ट जानकारी (उपयोगकर्ता नाम/पास, होस्ट, डेटाबेस नाम, आदि) है और आपके सभी मल्टीटन के भीतर संग्रहीत कनेक्शन ऑब्जेक्ट्स। रजिस्ट्री ऑब्जेक्ट्स में वास्तव में कहीं भी जगह नहीं है क्योंकि वे गौरवशाली वैश्विक चर से थोड़ा अधिक हैं। – Adrian

+0

@ एड्रियन, मैं पूरी तरह से सहमत हूं। एक सिंगलटन/मल्टीटन पैटर्न का उपयोग करने का पूरा बिंदु, हर कीमत पर, एक ही स्क्रिप्ट के भीतर एक दूसरा डीबी कनेक्शन बनाने से बचता है। रजिस्ट्री पैटर्न बस यहां मौजूद किसी भी मुद्दे को हल करने के लिए प्रतीत नहीं होता है। –

1

यह यह मुश्किल इसके खिलाफ इकाई परीक्षण चलाने के लिए बनाता है और यह भी यह असंभव कई वाला राज्य बन गया डेटाबेस कनेक्शन जैसा कि हम सभी जानते हैं, वैश्विक चरों में बहुत सी कमीएं हैं और सिंगलेट्स में कोई अपवाद नहीं है, केवल वे एक "दोस्ताना" वैश्विक चर हैं।

मुझे इसके बारे में एक बहुत अच्छा article और पुराना SO question मिला।

+0

मुझे लगता है कि आपका मतलब प्रति पृष्ठ "एकाधिक डेटाबेस कनेक्शन" है, है ना? – greg0ire

+0

हां यह सच है। यदि सिंगलटन का उपयोग नहीं किया जाता है, तो मैं उस एप्लिकेशन के साथ समाप्त होता हूं, जिसमें मैं हर समय कम से कम 4 डेटाबेस कनेक्शन विकसित कर रहा हूं। मैं बस सोच रहा था कि कम समस्याग्रस्त क्या है ... – Ricardo

+0

@greg: कम से कम क्लासिक 'getInstance() 'सिंगलटन के साथ, Yup। हो सकता है कि पोस्टर डेटाबेस कनेक्शन पूल की तरह कुछ खोज रहा हो? –

1

आप दो डेटाबेस कनेक्शन का उपयोग नहीं कर सकते हैं। आप इसे चाहते हैं क्योंकि:

  • आपके पास दो डेटाबेस हैं।
  • आप लेनदेन के भीतर कुछ करना चाहते हैं जब एक और लेनदेन पहले से ही 'वर्तमान' डेटाबेस कनेक्शन पर चल रहा है।
  • आप अपनी इकाई में कई नकली डेटाबेस उदाहरणों का उपयोग करना चाहते परीक्षण
संबंधित मुद्दे