Singletons के साथ मुद्दों के एक जोड़े हैं। मैं उन्हें नीचे उल्लिखित कर दूंगा, और उसके बाद कुछ वैकल्पिक समाधान प्रस्तावित करूंगा। मैं नहीं हूं "कभी भी सिंगलटन का उपयोग न करें, या आप एक बकवास कोडर हैं" जैसा कि मेरा मानना है कि उनके पास उनके उपयोग हैं। लेकिन उन उपयोग दुर्लभ हैं।
थ्रेड सुरक्षा। यदि आपके पास ग्लोबल-स्टेटिक सिंगलटन है, तो इसे थ्रेड-सुरक्षित होना चाहिए क्योंकि किसी भी समय इसे किसी भी चीज़ तक पहुंचा जा सकता है। यह अतिरिक्त ओवरहेड है।
यूनिट परीक्षण सिंगलेट्स के साथ अधिक कठिन है।
यह वैश्विक चर के लिए एक सस्ता प्रतिस्थापन है (मेरा मतलब है, यह दिन के अंत में एक सिंगलटन है, हालांकि इसमें विधियां और अन्य फैंसी चीजें हो सकती हैं)।
देखें, ऐसा नहीं है कि सिंगलटन की फिल्म कर रहे हैं "भयंकर घृणित कामों" प्रति-se, लेकिन यह पहली डिजाइन पैटर्न कई नए प्रोग्रामर से निपटने के लिए मिलता है और उसके 'सुविधा obfuscates अपनी' नुकसान (बस कुछ गियर पर चिपके रहते हैं कि यह और इसे भाप-पंक कहते हैं)।
अपने मामले में, आप मॉडल का जिक्र कर रहे हैं और ये हमेशा "उदाहरण" होते हैं क्योंकि वे स्वाभाविक रूप से डेटा को प्रतिबिंबित करते हैं। शायद आप इन उदाहरणों को प्राप्त करने की लागत के बारे में चिंतित हैं। मेरा विश्वास करो, वे नगण्य होना चाहिए (स्पष्ट रूप से डेटा-एक्सेस डिज़ाइन तक)।
तो, विकल्प? मॉडल को उन स्थानों पर पास करें जिन्हें इसकी आवश्यकता होती है। यह यूनिट परीक्षण को आसान बनाता है, और आपको उस मॉडल के मूलभूत सिद्धांतों को दिल-धड़कन में बदलने की अनुमति देता है। इसका मतलब यह भी है कि आप इंटरफेस पर नजर डालना चाहते हैं - ये अनुबंध को दर्शाते हैं। फिर आप ठोस वस्तुओं को बना सकते हैं जो इन इंटरफेस और वॉयला को लागू करते हैं - आप कोड आसानी से यूनिट-टेस्टेबल और संशोधित हैं।
सिंगलटन दुनिया में, उस सिंगलटन में एक ही बदलाव मूल रूप से कोड-बेस में सब कुछ तोड़ सकता है। अच्छी बात नहीँ हे।
स्रोत
2013-06-04 19:03:57
"मॉडल" स्टेटिक बनाना ?? नहीं वास्तव में नहीं। थोड़ा सा भी नहीं। यह रेगएक्स के साथ [पार्सिंग एचटीएमएल] से भी बदतर है (http://stackoverflow.com/a/1732454/643085) –
हे। मैं देख नहीं कर सका। – sircodesalot
यदि डीआई का उपयोग करके इसे स्थैतिक बनाने की बजाय, कंटेनर नियंत्रक लाइफटाइम मैनेजर के साथ कंटेनर में पंजीकृत करें। स्थैतिक के साथ, आपको थ्रेड सुरक्षा के साथ अधिक समस्या है। –