2010-02-19 9 views
5

मेरे पास एक स्थिर वर्ग है जिसमें मेरा डेटाबेस तर्क शामिल है।मैं अपनी स्थैतिक कक्षा को इतना स्थिर कैसे बना सकता हूं?

इस कक्षा का उपयोग वेबसाइट, वेब सेवाओं और मिडलवेयर घटक के हिस्से के रूप में किया जाता है।

इस कक्षा में प्रत्येक विधि के लिए मुझे कॉलर से संदर्भ जानकारी का एक टुकड़ा चाहिए। वेब साइट के मामले में यह वेब सेवा और मिडलवेयर घटक के लिए उपयोगकर्ता की जानकारी होगी, यह कॉलिंग सेवा की पहचान करेगा।

मैं इस मान को कॉन्फ़िगर में संग्रहीत नहीं कर सकता क्योंकि यह प्रति उपयोगकर्ता भिन्न हो सकता है और मेरे पास यह प्राप्त करने के लिए हमेशा httpcontext नहीं है।

मैं आसानी से इस वर्ग में हर विधि पर एक नया पैरामीटर जोड़ सकता हूं या मैं इसे एक स्थिर वर्ग से बदल सकता हूं ताकि इसमें एक गैर-स्थिर संपत्ति हो लेकिन उनमें से कोई भी समाधान बहुत ही सुरुचिपूर्ण प्रतीत नहीं होता है।

तो क्या ऐसे कोई अन्य विकल्प हैं जिन पर मैंने विचार नहीं किया है?

+3

महान शीर्षक ^^ "मैं अपने सिंगलटन को इतना सिंगलटन कैसे बना सकता हूं" – tanascius

+0

@tanascius - अनमोल +1 कारण जो मैं दे सकता हूं। @ क्रिस, आप अपनी रणनीति पर पुनर्विचार करना चाहेंगे। एक सामान्य व्यापक कंबल कथन में मैं कहूंगा कि 'स्टेटिक डीएएल परेशानी के लिए पूछ रहा है'। .2 पेसो। –

+0

@ स्की सैंडर्स - यहां विभाजित बाल लेकिन डीएएल वर्ग वर्गों के लिए linq है, यह मेरा डेटाबेस तर्क है जो इसके शीर्ष पर बैठता है। इस तथ्य को अनदेखा करते हुए कि मैंने पहले से ही जवाब स्वीकार कर लिया है और गैर स्थैतिक मार्ग नीचे चला गया है, क्या आप अपने "परेशानी के लिए पूछना" कथन अर्हता प्राप्त कर सकते हैं? स्थिर वर्ग अन्यथा एक बुरा विचार क्यों है? –

उत्तर

6

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

स्थिर तरीकों के समूह से एक उदाहरण में डिजाइन को बदलने से कक्षा का परीक्षण करना आसान हो जाएगा।

+0

जितना अधिक मैं इसके बारे में सोचता हूं, उतना ही मैं इस विचार के आसपास आ रहा हूं। विधि कॉल की आवश्यकता होने पर प्रत्येक बार आवश्यक कोड की अतिरिक्त रेखा होती है। –

+0

+1 - यह निर्भरता इंजेक्शन/आईओसी (मैनुअल या कंटेनर फ्रेमवर्क के माध्यम से) के लिए क्लासिक केस है। यह भी देखें http://www.amazon.com/Working- प्रभावी रूप से- लीगेसी- माइकल- फेदरस/डीपी/0131177052 – TrueWill

+0

क्या आप प्रत्येक कॉल के लिए उदाहरण बनाते हैं? अन्यथा मैं नहीं देखता कि आपको एक उदाहरण का उपयोग करके अतिरिक्त कोड की आवश्यकता होगी। –

1

मैं पैरामीटर जोड़ दूंगा। यह मेरे लिए सुरुचिपूर्ण प्रतीत नहीं होता है - आपको संदर्भ जानकारी की आवश्यकता है, और इसे स्थिर वर्ग में प्राप्त करने का एकमात्र तरीका इसे पास करके है।

+1

इस के साथ समस्या यह है कि मेरे लिए बहुत शुष्क नहीं लगता है। –

+0

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

+0

प्रत्येक विधि कनेक्शन सेट अप करने के लिए एक निजी विधि का उपयोग करती है। यह यहां है कि मैं संदर्भ जानकारी का उपयोग कर रहा हूं, इसलिए यदि आप सूक्ष्म अंतर की सराहना करते हैं तो प्रत्येक विधि "सीधे" संदर्भ का उपयोग नहीं करती है? प्रत्येक विधि पर इस पैरामीटर को रखने और फिर इसे निजी विधि के माध्यम से पास करने से मुझे दोहराया जाता है। –

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