2010-08-18 16 views
8

ठीक है, शीर्षक थोड़ा अस्पष्ट लग सकता है लेकिन मैं वास्तव में यहां कुछ स्पष्ट नहीं सोच सकता।नामस्थान द्वारा संदर्भित संदर्भ कितना महत्वपूर्ण है?

मैं हाल ही में स्थिति में जहाँ मैं बस दो गुण, X और Y और एक ctor Point(int x, int y) के साथ एक Point वर्ग की जरूरत है, में था। कुछ भी आकर्षक नहीं। अब यह बात पहले से ही .NET में मौजूद है, लेकिन यह एक लाइब्रेरी में थी जिसने मानचित्र पर कुछ ऑब्जेक्ट्स को संभाला और System.Drawing खींचकर बस महसूस किया ... किसी भी तरह गलत। भले ही System.Drawing.Point फिट जो मुझे पूरी तरह से जरूरी था, अब मैंने उस प्रोजेक्ट में फिर से उस संरचना को बनाया है।

अब मुझे आश्चर्य है कि क्या यह करने के लिए सही या समझदार बात थी। System.Drawing.Point उस असेंबली के संदर्भ के साथ भी आएगा, अगर मुझे सही याद है। और System.Drawing में कुछ पूरी तरह गैर-ड्राइंग संबंधी संदर्भ में डालने से किसी भी तरह अजीब था।

विचार? क्या होगा अगर यह किसी अन्य असेंबली के संदर्भ में शामिल नहीं होता?

+0

मेरे लिए, इसकी समझदार चीज़ करना है। – VinayC

उत्तर

3

नामस्थान का संदर्भ कक्षा के सटीक कार्य के निकट मौलिक है; एक Connection कक्षा एक नामस्थान से अगले नाम तक एक बहुत ही अलग जानवर होने जा रही है। क्या Web.Cache कक्षा अन्य अनुप्रयोगों में कैशिंग के लिए उपयुक्त होने जा रही है, या क्या यह वेब बुनियादी ढांचे पर मौलिक निर्भरता है? इस प्रकार

MSDN System.Drawing.Point संरचना का वर्णन: "। पूर्णांक x- और y- निर्देशांक है कि एक दो आयामी विमान में एक बिंदु को परिभाषित करता है की एक आदेशित युग्म का प्रतिनिधित्व करता है"

इस तरह के एक सामान्य विवरण के साथ, यह तर्क दिया जा सकता है कि यह संरचना केवल आकस्मिक रूप से ड्राइंग से संबंधित है और वास्तव में एक और मौलिक नामस्थान में संबंधित है।

हालांकि, यह System.Drawing में रहता है, यह निहितार्थ यह है कि यह 2-आयामी ड्राइंग स्पेस के भीतर एक बिंदु का प्रतिनिधित्व करता है। इस प्रकार, ड्राइंग के अलावा अन्य प्रयोजनों के लिए इसका उपयोग कक्षा का गलत उपयोग है; यह आपकी आवश्यकताओं के लिए काम कर सकता है, लेकिन इसका उपयोग इसके मूल उद्देश्य के लिए नहीं किया जा रहा है।

1

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

+0

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

+0

@ सुमेरे, जबकि आप निश्चित रूप से अपनी राय के हकदार हैं, यह सिर्फ आपकी राय है और जब तक आपको लगता है कि उत्तर वास्तव में गलत नहीं है तो इसे 'संतुलन प्रदान करने' के लिए इसे कम वोट देना एक बहुत ही अजीब कार्य है।निश्चित रूप से आपको प्रत्येक उत्तर को कम-से-कम वोट करना होगा जो आपके 'सही' के दृश्य के अनुरूप नहीं है। – Lazarus

+0

हां। मैं उन सभी उत्तरों को कम करता हूं जो मैं अपनी राय में असहमत हूं और मैं उन सभी उत्तरों को ऊपर उठाता हूं जो मैं अपनी राय में सहमत हूं। अच्छा अवलोकन मैं केवल आपके बारे में टिप्पणी करने के लिए हुआ क्योंकि आपके पास अच्छा जवाब था, लेकिन यह इस सवाल का सही जवाब नहीं था। – Suamere

0

मैंने अभी सिस्टम का उपयोग किया होगा। ड्रॉइंग.पॉइंट। कुछ ऐसा क्यों बनाओ जो पहले से मौजूद है? यदि आपको आवश्यक कार्यक्षमता प्रदान की जाती है तो नामस्थान कहलाता है कि कौन परवाह करता है। बस मेरे 2 सेंट ...

0

यदि आप कोई "सामान" आयात नहीं कर रहे हैं (जैसे सामान का उपयोग करने के लिए जो आपको उपयोग नहीं करते हैं) तो यह वही है जो आपको चाहिए, मैं मौजूदा कोड के लिए जाऊंगा। मौजूदा कोड को पुनर्निर्मित करने में बस कोई बात नहीं। संभावना है कि आप बाद में फ़ंक्शंस खोज सकते हैं जिस पर आपको आवश्यक कार्यों का प्रदर्शन करना चाहिए और उस विशेष श्रेणी की अपेक्षा करना चाहिए।

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

+3

अतिरिक्त निर्भरता रखने के लिए (यहां 'System.Drawing.Point' युक्त असेंबली के लिए अतिरिक्त सामान भी है। –

+0

सच है। इस बात पर निर्भर करता है कि सामान को आपके अतिरिक्त कोडिंग लागतों से कैसे तुलना किया जाता है। प्वाइंट के मामले में, reimplementing वास्तव में ठीक हो सकता है। – Nicolas78

1

यदि बिंदु के लिए आपका उद्देश्य किसी भी तरह से चित्रकारी से संबंधित नहीं था, तो मुझे लगता है कि आपने सही काम किया है। एक सिस्टम का उपयोग करना। कोड में ड्रॉइंग.पॉइंट जो कुछ भी संबंधित ड्राइंग नहीं करता है, लोगों को सोचने में लाइन को कम कर सकता है कि यह कुछ ड्राइंग कार्यक्षमता के लिए उपयोग किया जाता है।

6

मैं अब तक अन्य उत्तरों से असहमत हूं और कहता हूं कि यह वास्तव में मायने रखता है। Point नमूना एक साधारण है, लेकिन सामान्य रूप से किसी संदर्भ में कक्षा का उपयोग करके इसे अवांछित प्रभावों के लिए डिज़ाइन नहीं किया गया है।

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

यह विशेष रूप से समस्याओं का कारण बन सकता है जब असेंबली का एक नया संस्करण तैनात किया जाता है, जो अब आप इसका उपयोग करने के तरीके से संगत नहीं है, या नया संस्करण अतिरिक्त सदस्यों और निर्भरताओं को लाता है जिन्हें आप नहीं चाहते हैं आपके कोड में

+0

दुख की बात है कि मैं दो उत्तरों को स्वीकार नहीं कर सकता। – Joey

+0

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

1

मैं हाल ही में इसी तरह की स्थिति में था। प्वाइंट क्लास की आवश्यकता नहीं है, लेकिन मैं इसे एक उदाहरण के रूप में उपयोग करूंगा।

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

सिद्धांत है कि आपको अपने कार्यक्रमों में ज्ञान को डुप्लिकेट नहीं करना चाहिए, लेकिन कुछ मामलों में इस तरह से इसे टाला नहीं जा सकता है।


एक और विधानसभा के संदर्भ में जिसका अर्थ है का सवाल है, तो आप ऐसा कर सकते हैं:

using Point = System.Drawing.Point; // or whatever your namespace is called 
+0

'डबल' के लिए System.Windows.Point है, हालांकि। जो अभी तक एक और असेंबली और अभी तक एक और उपप्रणाली (डब्ल्यूपीएफ) से आता है। – Joey

+0

ओह! उस बारे में नहीं पता था। – Nobody

0

मैं यह देखते हुए कि दोनों कार्यात्मक और धारणा (कैसे यह वर्णन किया गया है नाम स्थान से कुछ लाने के बारे में बहुत कम चिंता होगी दस्तावेज़ों में) यह लक्ष्य फिट बैठता है।

हालांकि मैं एक नई असेंबली लाने में संकोच कर सकता हूं। इस मामले में तथ्य यह है कि प्वाइंट अपने आप को रोल करने के लिए इतना तेज़ है कि मैं जो असेंबली लिख रहा था, उस पर निर्भरता जोड़ने की तुलना में मैं इतना कम करने की परेशानी पर विचार कर सकता हूं।

अन्यथा, जब तक मैं इसे एक कुंजी के रूप में उपयोग नहीं कर रहा था (गेटहाशकोड इम्प्लाइज़। बिंदु में यह बहुत अच्छा नहीं है जैसे कि सभी {0,1}, {1,0}, {2,3} और {3,2} यदि आपके पास बहुत कम मूल्यवान या आयताकार रूप से वितरित बिंदु हैं) तो मैं इसका उपयोग करूंगा।

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