के उपयोग से बचने में मदद की ज़रूरत है, मैं सिंगलेट्स का नफरत नहीं करता हूं, लेकिन मुझे पता है कि वे दुर्व्यवहार करते हैं और इसी कारण से मैं आवश्यकता होने पर उनका उपयोग करने से बचना चाहता हूं।सिंगलटन
मैं क्रॉस प्लेटफार्म (विंडोज एक्सपी/विस्टा/7, विंडोज मोबाइल 6.x, विंडोज सीई 5, विंडोज सीई 6) होने के लिए एक एप्लीकेशन विकसित कर रहा हूं। प्रक्रिया के हिस्से के रूप में मैं अलग-अलग परियोजनाओं में कोड को फिर से फैक्टर कर रहा हूं, कोड डुप्लिकेशन को कम करने के लिए, और इसलिए इनटाइटल सिस्टम की गलतियों को ठीक करने का मौका।
आवेदन के इस तरह का एक हिस्सा अलग किया जा रहा है, यह एक प्रोफाइल प्रबंधक है। यह प्रोजेक्ट प्रोफाइल संग्रहीत करने के लिए ज़िम्मेदार है। इसमें Profile
कक्षा है जिसमें कुछ कॉन्फ़िगरेशन डेटा शामिल हैं जो एप्लिकेशन के सभी हिस्सों द्वारा उपयोग किया जाता है। इसमें ProfileManager
कक्षा है जिसमें Profiles
शामिल है। ProfileManager
हार्ड ड्राइव पर अलग-अलग XML फ़ाइलों के रूप में Profiles
को पढ़/सहेज लेगा, और एप्लिकेशन को "सक्रिय" Profile
को पुनर्प्राप्त करने और सेट करने की अनुमति देगा। सरल।
पहले आंतरिक निर्माण पर, जीयूआई विरोधी पैटर्न स्मार्टगुई था। यह एमवीसी/एमवीपी के बिना एक WinForms कार्यान्वयन था क्योंकि हम चाहते थे कि यह अच्छी तरह से इंजीनियर होने के बजाय जल्द ही काम कर रहा हो। यह ProfileManager
को सिंगलटन होने का कारण बनता है। यह एप्लिकेशन में कहीं से भी था, जीयूआई सक्रिय Profile
तक पहुंच सकता है।
इसका मतलब है कि मैं आवश्यकतानुसार सिस्टम के विभिन्न हिस्सों के लिए कॉन्फ़िगरेशन पुनर्प्राप्त करने के लिए ProfileManager.Instance.ActiveProfile
पर जा सकता था। प्रत्येक जीयूआई प्रोफ़ाइल में बदलाव भी कर सकता है, इसलिए प्रत्येक जीयूआई में एक सेव बटन था, इसलिए उन सभी को ProfileManager.Instance.SaveActiveProfile()
विधि तक पहुंच थी।
मुझे सिंगलटन का उपयोग करने में कुछ भी गलत नहीं लगता है, और क्योंकि मुझे इसमें कुछ भी गलत नहीं लगता है, फिर भी पता है कि सिंगलेट आदर्श नहीं हैं। क्या इसे बेहतर तरीके से संभाला जाना चाहिए? क्या प्रोफाइल प्रबंधक का एक उदाहरण प्रत्येक नियंत्रक/प्रस्तुतकर्ता में पास किया जाना चाहिए? जब प्रोफाइल मैनेजर बनाया जाता है, तो अन्य कोर घटकों को बनाया जाना चाहिए और प्रोफ़ाइल बदलते समय ईवेंट में पंजीकरण करना चाहिए। उदाहरण काफी सरल है, और शायद कई प्रणालियों में एक आम विशेषता है, इसलिए सोचें कि यह सिंगलटन से बचने के तरीके के बारे में जानने के लिए एक शानदार जगह है।
पी। मुझे कॉम्पैक्ट फ्रेमवर्क 3.5 के खिलाफ एप्लिकेशन बनाना है, जो सामान्य नेट फ्रेमवर्क कक्षाओं के बहुत से सीमित करता है जिसका उपयोग किया जा सकता है।
मैं बस अपनी पुरानी आदतों में फंस सकता हूं, लेकिन मैं इसे एक अच्छा उदाहरण के रूप में देखता हूं जहां सिंगलटन का उपयोग किया जाना चाहिए। –
यह वास्तव में एक सिंगलटन उदाहरण के लिए आदर्श मामले की तरह लगता है। – msarchet
सभी उत्तरों के लिए धन्यवाद, ऐसा लगता है कि यह सिंगलटन का उपयोग करने के लिए एक उचित जगह है। फैक्ट्री/निर्भरता इंजेक्शन पर प्रतिक्रिया को ध्यान में रखा जाएगा, हालांकि यह एप्लिकेशन पृष्ठभूमि में चलाएगा, इसलिए मैं इसे सादगी और प्रदर्शन दोनों के लिए सिंगलटन के रूप में छोड़ दूंगा। – JonWillis