यदि आप चाहते हैं कि आप अपने वैश्विक चर का उपयोग करें तो अपने बॉस से क्या कहें


13

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

आप इससे कैसे निपटेंगे, क्योंकि मैं केवल 4 महीने से पेशेवर रूप से प्रोग्रामिंग कर रहा हूं!


4
क्या आपका बॉस एक तकनीकी व्यक्ति या गैर-तकनीकी व्यक्ति है? यदि वह तकनीकी है, तो क्या उसने रॉबर्ट सी। मार्टिन द्वारा "क्लीन कोड" पढ़ा है?
जॉर्ज स्टॉकर

5
तो, आपके बॉस ने आपको कोड करने के लिए काम पर रखा है, और अब आपको बता रहा है कि कोड कैसे बनाया जाए?
जेरेमी हेइलर

8
आपने नीचे एक टिप्पणी में कहा था कि "वस्तु में बहुत सारे स्थिरांक के अलावा कोई राज्य नहीं है"। उस मामले में, एक स्थिर वर्ग मेरे लिए एक अच्छा समाधान की तरह लगता है।
जस्टिन

5
"यस बॉस" मन को

2
"मुझे एक एकल ऑब्जेक्ट बनाने के लिए कहा गया था, जिसे कहीं से भी एक्सेस किया जा सकता है। मुझे इसलिए इसे एक स्थिर ऑब्जेक्ट के रूप में बनाना पड़ा है" यह मान्य तर्क नहीं है। आप ऐसा बोलते हैं जैसे कि एक पूरे आवेदन से एक ही वस्तु सुलभ है, जिसके बारे में आपको पता है कि आपके पास एक सिंगलटन था - आप इसे केवल एग्रीगेशन रूट में क्यों नहीं बनाते हैं और फिर इसका संदर्भ आश्रित कक्षाओं में पास करते हैं।
ईलिसियम भस्म हो गया

जवाबों:


33

यदि एक वस्तु पर्याप्त है, तो हर बार एक वस्तु बनाना एक बेकार है, और यहां आपका बॉस सही हो सकता है।

समस्या उस वस्तु तक उचित पहुंच है। उचित दृश्यता के साथ एक फैक्ट्री जैसी विधि जो हमेशा उस स्थैतिक वस्तु को लौटाती है जो पहला समाधान होता है जो मन में आता है। अन्य निश्चित रूप से मौजूद हैं।


3
+1: जितना मैं नापसंद करता हूं उतना किसी भी "GoF ने कहा" तो जवाब, सही है सही है।
जेवियर

1
मैंने सिंग्लेटन्स के बारे में सोचा था, हालाँकि मैंने इसे एक वैश्विक वैरिएबल के चारों ओर एक आवरण के रूप में देखा था, इसलिए मैंने इसका पालन नहीं किया। मैं इसे अभी आज़माऊंगा, क्योंकि ऑब्जेक्ट में कोई स्थिति नहीं है, इसके अलावा बहुत सारे स्थिरांक ठीक होने चाहिए। धन्यवाद।
डैरेन यंग

9
मुझे संदेह था कि यह मामला हो सकता है ("ऑब्जेक्ट में कोई राज्य नहीं है ... बहुत सारे स्थिरांक हैं")। आपका बॉस सही है। कभी नहीं बदलने वाले मूल्यों के लिए कचरा कलेक्टर पर कृत्रिम दबाव डालने में कोई समझदारी नहीं है।
बेरिन लोरिट्श

3
@ डैरेन-यंग: एक साइड नोट पर, कोई राज्य दिलचस्प नहीं है और कुछ शक्तिशाली दृष्टिकोणों के लिए अनुमति देता है; तथाकथित 'कार्यात्मक प्रोग्रामिंग' पर एक नज़र डालें, अगर आपने अभी तक ऐसा नहीं किया है।
9000

8

मैं आपके विशिष्ट मामले पर टिप्पणी नहीं कर सकता, लेकिन वैश्विक चर का उपयोग करना कभी-कभी एक अच्छा समाधान होता है। जावा का सिस्टम वर्ग स्थिर, वैश्विक चर से भरा है।

लेकिन सामान्य तौर पर, यदि आपको लगता है कि आप सही हैं और आपका बॉस गलत है, तो आप अपने बॉस को यह बताने के लिए क्यों नहीं कहते कि वह क्यों सोचता है कि एक वैश्विक चर एक बेहतर उपाय है? एक सादे "मुझे यह पसंद नहीं है" उतना ही अस्पष्ट है जितना कि "वैश्विक चर बुराई हैं"। आपको अपने बॉस से अधिक मांग करनी चाहिए!

यदि वह अपने रुख के लिए कारण नहीं दे सकता है, और आप अपने रुख को कारण दे सकते हैं, या इसके विपरीत, तो यह एक अच्छा सीखने का अवसर है। यदि आप दोनों अपने रुख को सही ठहरा सकते हैं, तो यह शायद स्वाद की बात है - या अनुभव की बात: आपके बॉस को पेशेवर रूप से 4 महीने से अधिक समय से प्रोग्रामिंग हो रही होगी, मुझे लगता है?


1
देखें, java.lang.Systemइसमें ठीक तीन वैश्विक चर शामिल हैं, और उनमें से प्रत्येक के लिए इसे ठीक से सेट करने की एक विधि है। लेकिन Systemस्थैतिक तरीकों से भरा हुआ है जो वैश्विक वस्तुओं को वापस करते हैं, और इसके साथ कुछ भी गलत नहीं है, बहस नहीं कर सकते।
9000

2
हाँ; मैं वैश्विक वैरिएबल को स्थिर तरीकों से बहुत समान मानता हूं जो वैश्विक वस्तुओं को वापस करते हैं।
जूनस पुलका

तो जावा ऐसा करता है। यह पूरी तरह से एक अलग सवाल है कि क्या यह एक अच्छा विचार है। सी के मानक यादृच्छिक संख्या जनरेटर वैश्विक स्थिति रखता है। लेकिन आम तौर पर यह स्वीकार किया जाता है कि यह भयानक है , और इसलिए कि यादृच्छिक संख्या जनरेटर इसलिए कुछ अनुप्रयोगों में अनुपयोगी है (उदाहरण के लिए एटली एट अल।, इंजीनियरिंग एक सॉर्ट फ़ंक्शन देखें )। जावा में विशेष रूप से डिज़ाइन समस्याओं की मेजबानी है (जो कि C # में आंशिक रूप से सुधार किया गया है) इसलिए मुझे इस तरह के तर्क के रूप में उपयोग करने से बहुत सावधान नहीं होना चाहिए ।
कोनराड रुडोल्फ

@Konrald रूडोल्फ: अंत में यह एक डिजाइन निर्णय है। हर फैसले के पक्ष और विपक्ष होते हैं। उदाहरण के लिए, वैश्विक स्थिति को Systemसरल बनाते हुए, कहते हैं, शेष 0.1% में समस्याओं के कारण 99.9% उपयोग के मामले हैं। इस बात का कोई "सही" जवाब नहीं है कि 0.1% अतिरिक्त जटिलता के लायक है या नहीं।
जूनस पुलकका

5

आपकी स्थिति में कोई व्यक्ति, सबसे अधिक आप जो कर सकते हैं, वह है। यदि ऑब्जेक्ट अनिवार्य रूप से एक स्थिरांक है (अर्थात यह बदल नहीं सकता है और यह राज्य को बनाए नहीं रखता है), तो आपका बॉस सही हो सकता है। स्थैतिक स्थिर वस्तु होने में कोई बुराई नहीं है। आखिर पीआई की कितनी परिभाषाएं हैं?

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

अगर मैं आपके जूते में होता, तो मैं आगे बढ़ता और बॉस से कहता - यह उसके बट पर लाइन है। फिर मैं समय के साथ उस पसंद के प्रभावों को देखता और देखता हूँ। यह एक प्रभावी शिक्षण उपकरण है।


यह एक इंटर्नशिप है। तुम सीखने वाले हो। ब्लाइंडली वही करना जो आपके बॉस का कहना है कि सीखना नहीं है।
डेविड थॉर्नले

5
और न ही आँख बंद करके अपने बॉस के खिलाफ जा रहा है। मेरी सलाह, जैसा कि लिखा गया था, बॉस की पसंद के प्रभावों का निरीक्षण करना था। हम (स्टैकएक्सचेंज पर) स्थिति पर एक मूल्य निर्णय नहीं कर सकते क्योंकि हम महत्वपूर्ण जानकारी याद कर रहे हैं। यह थोड़ा वैज्ञानिक तरीका करने का मामला है। ओपी की एक परिकल्पना है, बॉस ने इसे चुनौती दी है। अब यह प्रयोग करने का समय है।
बेरिन लोरिट्श

2

विशिष्ट स्थिति के आधार पर, एक वैश्विक चर सबसे अच्छा समाधान हो सकता है। एम्बेडेड प्रोग्रामिंग में, ग्लोबल्स स्टैक स्पेस पर कब्जा नहीं कर रहे हैं और इस कारण से एक अच्छा विकल्प है।

ग्लोबल्स या नहीं, मैंने इसे ग्लोबल्स पर एक उपसर्ग लगाने के लिए एक अच्छा प्रैक्सिस पाया है। यह अन्य प्रोग्रामर को आपके कोड को इसके प्रभाव से अवगत कराएगा यदि इसके साथ गड़बड़ होती है।


1

हो सकता है कि आपका बॉस चाहता था कि आप सिंगलटन पैटर्न का उपयोग करें। यह एक बहुत अच्छा अभ्यास है जब आपको कई उदाहरणों से एक निश्चित वस्तु तक पहुंचने की आवश्यकता होती है।

यहां विकिपीडिया की व्याख्या का लिंक दिया गया है


मुझे लगता है कि en.wikipedia.org/wiki/D dependency_injectiongood practice
ऑलिवर वीलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.