2009-02-03 12 views
10

में सर्वोत्तम अभ्यास VB.NET WinForms ऐप में वैश्विक चर संग्रह करने के लिए सबसे अच्छा अभ्यास क्या है। उदाहरण के लिए जब कोई उपयोगकर्ता किसी ऐप में लॉग इन करता है तो आप एक CurrentUser ऑब्जेक्ट को स्टोर करना चाहते हैं जिसे पूरे ऐप में एक्सेस किया जा सकता है। आप इसे किसी मॉड्यूल में किसी ऑब्जेक्ट के रूप में संग्रहीत कर सकते हैं या एक कक्षा बना सकते हैं जिसमें सभी आवश्यक ग्लोबल्स के लिए सदस्य शामिल हों, फिर भी आपको इसे कहीं भी इस उदाहरण को स्टोर करने की आवश्यकता होगी।वैश्विक चर (या वैकल्पिक) .NET

क्या ढांचा इस के लिए एक आसान समाधान प्रदान करता है?

उत्तर

14

मुझे लगता है कि है एक छोटे से कठोर, यहाँ स्टीव McConnell से एक उद्धरण है 'नहीं':

अनुशासन के साथ प्रयोग किया जाता है, वैश्विक चर उपयोगी होते हैं कई परिस्थितियों में

मुझे लगता है कि एक अच्छी बढ़ई की तरह ही नौकरी के लिए सही उपकरण है और आवश्यकता होने पर सही टूल का उपयोग करेगा, प्रोग्रामर को भी इसका उपयोग करना चाहिए उपकरण के अपने निपटान में होगा।

सीधे 'टूर डी फोर्स' कोड से पूरा कई कारणों से वैश्विक डेटा का उपयोग कर रहे हैं:

  • वैश्विक मूल्यों
  • बहुत आम डेटा के उपयोग के सुव्यवस्थित करने वाले संरक्षण
  • को खत्म करना आवारा डेटा

मैककनेल यह भी कहते हैं:

अंतिम रिज़ॉर्ट के रूप में केवल वैश्विक डेटा का उपयोग करें। वैश्विक डेटा का उपयोग करने से पहले, कुछ विकल्पों पर विचार करें।

यहाँ विकल्प वह सूचीबद्ध करता हैं:

  • प्रत्येक चर स्थानीय बनाकर शुरू और चर वैश्विक आप
  • की जरूरत के रूप में ही वैश्विक और वर्ग चर का उपयोग कर सकते
  • उपयोग में अंतर करना दिनचर्या

जिन चीजों का मैंने उल्लेख किया है वे महान हैं शानदार किताब में कवरेज Code Complete

+0

** कोड पूर्ण * * पढ़ने की आवश्यकता होनी चाहिए। – AMissico

+0

"एक्सेस दिनचर्या का उपयोग करें" << --- सबसे महत्वपूर्ण – Burnsys

4

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

7

वैश्विक चर के उपयोग के संबंध में लगभग एक सर्वोत्तम अभ्यास है।

"मत करो।"

(इस कठोर लगता है, विचार है कि CurrentUser तरह बातें सामान्य रूप से कुछ है कि पर्यावरण पहले से ही इस तरह के सत्र के रूप में आप के लिए का एक अनूठा उदाहरण का कहना है, में हैं। वर्तमान सत्र प्राप्त करने के लिए एपीआई को फिर से देखें, स्टोर अपने CurrentUser और वहां से इसे पुनर्प्राप्त करें। अपने स्वयं के ग्लोबल्स न बनाएं, जो आपके ऐप को दौड़ की स्थिति के लिए बनाए रखने और कमजोर करने के लिए कठिन प्रदान करेंगे।)

+4

मुझे WinForms एप्लिकेशन में सत्र कहां मिलेगा? –

0

singleton pattern बगीचे की विविधता वैश्विक से सुरक्षित है।

+1

सिंगलेट्स "गौरवशाली ग्लोबल्स" हो सकते हैं। लेकिन यह उन्हें वैश्विक चर के लिए एक अच्छा दृष्टिकोण नहीं बनाता है। [थ्रेडिंग के संबंध में सिंगलटन इंस्टीटेशन के साथ सभी अच्छी समस्याएं देखें।] – Leonidas

3

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

यदि आपके पास ऐसी कक्षा है जिसके लिए CurrentUser क्लास के उदाहरण की आवश्यकता है, तो इसे इसके निर्माता में पूछें।

अधिक जानकारी के लिए यहाँ देखें: http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

+0

एक और लिंक जो इस विषय पर चर्चा करता है: "ग्लोबल स्टेट एंड सिंगलेट्स" http://www.youtube.com/watch?v=-FRm3VPhseI –

1

मेरे अभ्यास (उप मुख्य साथ स्टार्टअप वर्ग) program.vb में CurrentUser, ConfigFilePath और इसी तरह की तरह वैश्विक चर डाल करने के लिए है। इस तरह कोई भी वैश्विक चर का उपयोग दिमागी रूप से नहीं करता है क्योंकि उन्हें प्रोग्राम नामस्थान के माध्यम से एक्सेस किया जाना चाहिए।

व्यवसाय तर्क में, मैं कभी भी वैश्विक चर का उपयोग नहीं करता हूं। यदि किसी फ़ंक्शन को वैश्विक चर का उपयोग करने की आवश्यकता है, तो इसे फ़ंक्शन पैरामीटर के रूप में भेजा जाना चाहिए।

वैश्विक चर का उपयोग करने से बचने का कोई तरीका नहीं है। आईएमएचओ, उन्हें अपने वास्तविक नाम से कॉल करना और उन्हें सावधानीपूर्वक उपयोग करना, फिर उन्हें सिंगलेट, सत्र या फ़ाइलों में मुखौटा करना बेहतर होता है।

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