2011-08-23 16 views
5

मेरे पास एक ऐसा एप्लिकेशन है जिसमें कुछ विशिष्ट कार्य हैं जो कुछ विशिष्ट कार्यों को संभालते हैं, जीवन भर जीवन भर के बराबर होते हैं, और कार्यक्रम के कई हिस्सों में इसका उपयोग किया जाता है। इस आखिरी कारण से मैं उन्हें सेवाएं कहता हूं। उदाहरण के लिए, ऑडियो सेवा ऑडियो फाइलें चलाती है और ऑडियो से संबंधित कई अन्य चीजें करता है।सेवाओं के लिए सिंगलटन/स्थैतिक कक्षाएं

थीस कक्षाएं एप्लिकेशन स्टार्टअप पर केवल एक बार तत्काल होती हैं और यह प्रति एक से अधिक प्रकार के लिए कोई समझ नहीं लेती है।

चूंकि मैंने एसओ पर अकेले सिंगलेट्स के बारे में कई जवाब पढ़े हैं, जहां उनका उपयोग निराश हो गया है, मैं आवश्यकता होने पर थूज़ सेवाओं का संदर्भ पारित कर रहा था। जैसे-जैसे प्रोजेक्ट बढ़ रहा है, मैं खुद को कई कक्षाओं के साथ ढूंढता हूं, जिन्हें उनके कन्स्ट्रक्टर पर सेवा संदर्भ की आवश्यकता होती है और कुछ मामलों में भी उन सेवाओं के लिए एक मुखौटा है जो सभी सेवाओं के संदर्भों को जोड़ने से बचने के लिए हैं।

मुझे लगता है कि मैं इसे गलत कर रहा हूं। मुझे लगता है कि यह स्थैतिक/सिंगलटन कक्षाओं के लिए एक अच्छा उपयोग होना चाहिए।

क्या यह एक सही दृष्टिकोण है?

उत्तर

1

मुझे लगता है कि एक जवाब वसंत को पेश करने का सुझाव देता है। कवर के तहत, वसंत अभी भी उस संदर्भ को पार कर रहा है जहां इसकी आवश्यकता है।

ऐप में एक नया ढांचा पेश करने की बजाय, केवल सिंगलटन का उपयोग क्यों न करें? यदि यह नौकरी करता है और आसपास के सेवा संदर्भ को पारित करने से सुरक्षित रखना आसान है, तो मैं इसका उपयोग करता हूं।

यदि सिंगलेट्स के बारे में आपकी चिंता टेस्टेबिलिटी पर उनके प्रभाव के कारण है, तो कार्यान्वयन के लिए युग्मन को कम करने के लिए Dependency Injection (पैटर्न, ढांचा नहीं) का उपयोग करें।

2

ऐसा लगता है कि आपको कुछ ऑटोवॉयरिंग क्षमताओं के साथ एक निर्भरता इंजेक्शन कंटेनर की आवश्यकता है। यदि आप जावा का उपयोग कर रहे हैं, उदाहरण के लिए वसंत पर विचार करें।

0

सिंगलटन वास्तव में वस्तुओं के लिए खड़ा है जो केवल आवेदन जीवन चक्र के दौरान केवल एक बार बनाया जाना चाहिए। इन वस्तुओं में वास्तव में कुछ निश्चित सेटिंग्स शामिल हैं। आइए मान लें कि आपको एक पार्सर क्लास मिला है जो केवल एचटीएमएल को पार्स करने के लिए है। एचटीएमएल की जड़ टैग होनी चाहिए। इसके अतिरिक्त, आप इस पार्सर क्लास से उदाहरणों का भार नहीं बनाना चाहते हैं क्योंकि कक्षा का हर उदाहरण एक ही काम करेगा। इंस्टेंस को एचटीएमएल की एक स्ट्रिंग मिलेगी और आपको एक्स वापस देगी। यदि आपको लगता है कि आपकी कक्षाएं एक समय में केवल एक ही चीज़ करेगी, तो आप सिंगलटन के लिए जा सकते हैं। हालांकि, अगर आप कहते हैं कि, उदाहरण के लिए, आपकी ऑडियो सेवा को एक समय में अलग-अलग ऑडियो खेलना चाहिए, तो मुझे लगता है कि कक्षा का उदाहरण बनाना सिंगलटन बनाने से बेहतर है।

0

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

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