आप अपनी कक्षाओं और मूल निवासियों के बीच नाम समानता से कैसे बचें? [बन्द है]


9

मैं सिर्फ एक "दिलचस्प समस्या" में भाग गया, जिसके बारे में मैं आपकी राय चाहूंगा:

मैं एक प्रणाली विकसित कर रहा हूं और कई कारणों से (अर्थ: अमूर्तता, प्रौद्योगिकी स्वतंत्रता, आदि) हम सूचनाओं के आदान-प्रदान के लिए अपने स्वयं के प्रकार बनाते हैं।

उदाहरण के लिए: यदि कोई विधि है, जिसे SendEmail कहा जाता है और उसे व्यावसायिक तर्क द्वारा लागू किया जाता है, तो उसके पास हमारे प्रकार का एक पैरामीटर होता है OurCompany.EMailMessage, जो एक ऐसी वस्तु है जो पूरी तरह से तकनीकी रूप से स्वतंत्र है और इसमें केवल "व्यावसायिक प्रासंगिक डेटा" शामिल है (के लिए) उदाहरण, कोई जानकारी abut सिर एन्कोडिंग)।

SendEmail फ़ंक्शन के अंदर, हमें यह जानकारी हमारे EMailMEssage ऑब्जेक्ट से मिलती है और एक MailMessage (यह एक तकनीकी विशिष्ट है) ऑब्जेक्ट बनाता है ताकि इसे नेटवर्क पर भेजा जा सके।

जैसा कि आप पहले से ही देख सकते हैं, हमारी कक्षा का "मूल" भाषा वर्ग के समान नाम है। समस्या यह है: यह वही है जो वे हैं, ईमेल संदेश, इसलिए उनके लिए एक और सार्थक नाम खोजना मुश्किल है।

क्या आपको अक्सर यह समस्या होती है? आप इसका प्रबंधन कैसे करते है?

संपादित करें: @mgkrebbs ने पूरी तरह से योग्य नामों का उपयोग करने के बारे में टिप्पणी की। यह हमारा वर्तमान दृष्टिकोण है, लेकिन थोड़ी बहुत क्रिया, IMHO। यदि संभव हो, तो मुझे कुछ क्लीनर चाहिए।


2
हमेशा योग्यता का उपयोग करना एक व्यावहारिक समाधान लगता है, अगर थोड़ी सी क्रिया। एक प्रकार के लिए OurCompany.EMailMessage और दूसरे के लिए SendEmailClass.EMailMessage (या जो भी) का उपयोग करें। क्या इस दृष्टिकोण को लेकर कुछ समस्या है?
mgkrebbs

हां, मैंने इसके बारे में सोचा था, लेकिन यह क्रिया हो जाता है। मुझे कुछ "क्लीनर" चाहिए, लेकिन आपने जो समाधान प्रस्तावित किया है वह मेरा वर्तमान है। मैं इसे स्पष्टीकरण में
जोड़ूंगा

3
एक संदर्भ में नाम आते हैं। आमतौर पर एक नामस्थान या ऐसा कुछ। तो यह एक समस्या नहीं होनी चाहिए।
डेडलिंक

+1, मुझे यह सवाल पसंद है। मैंने एक बार एक प्रशिक्षक से लगभग 7 साल पहले यह सवाल पूछा था, और उसने सोचा कि मैं एक पूर्ण हूँ "...." :):
NoChance

आप किस भाषा का उपयोग कर रहे हैं? उत्तर भाषा-विशिष्ट है। सामान्य तौर पर उत्तर 'नाम का उपयोग करें' है। एक एकल जावा एप्लिकेशन में एक ही वर्ग के नाम का उपयोग करना सामान्य है, जो आधा दर्जन पुस्तकालयों द्वारा उपयोग किया जाता है।
केविन क्लाइन

जवाबों:


3

यह आपके प्रोजेक्ट के लिए उपयोग किए जा रहे नामस्थान के बारे में एक समस्या है।

मूल रूप से एक नामस्थान आपके सभी वर्गों और / या आपके प्रोजेक्ट में उपयोग किए जाने वाले सभी वर्गों (आमतौर पर भाषा / संकलक / आईडीई के साथ प्रदान की जाने वाली मानक सहित) द्वारा प्रदान किए गए कीवर्ड का संग्रह है।

चूँकि एक नेमस्पेस एक संग्रह है, कुछ मूल नियमों को बिना किसी संबंधित व्यवहार के शब्दों की गड़बड़ी को रोकने के लिए लागू किया जाता है, और कुछ भाषाएँ जैसे सी # आपको अपने स्वयं के नामस्थान को आमतौर पर परिभाषित करने और अन्य कक्षाओं में भी इसका उपयोग करने की अनुमति देती हैं।

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

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


3

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

मुझे लगता है कि यह नामस्थान पर निर्भर होने की तुलना में अधिक सरल है, लेकिन नामस्थान के उपयोग का एक पूरक समाधान भी हो सकता है।

अंतिम लेकिन कम से कम, चूंकि आप एक नई वस्तु बना रहे हैं, तो इसका मतलब है कि मूल वस्तु आपकी आवश्यकताओं का जवाब नहीं देती है, इसलिए आपकी ईमेल फाइल का आपका नाम CustomEmail , AdvancedEmail ... आदि हो सकता है।


1
अपने अंतिम बिंदु से सहमत हैं, लेकिन इससे OAEmailबेहतर क्यों होगा OurApplication.Email? सॉफ़्टवेयर के प्रत्येक भाग OAEMailपर प्रभाव पड़ता है , जबकि नाम स्थान नोटेशन का केवल वहां प्रभाव पड़ता है जहां रूपांतरण होता है और दोनों वर्गों का उपयोग एक ही स्रोत फ़ाइल में किया जाता है।
स्टीवन ज्यूरिस

1
मुझे लगता है कि उपसर्ग एक अच्छा विचार है जब आपकी भाषा नेमस्पेस का समर्थन नहीं करती है। लेकिन अगर भाषा नेमस्पेसिंग पर कुछ फॉर्म का समर्थन करती है, तो इसका उपयोग करें (यह समस्या नामस्थानों को हल करने के लिए डिज़ाइन की गई है!)। `
मार्टिन न्यूयॉर्क

@Steven Jeuris: क्लास का नाम एक बार बनने के बाद चुना जाना चाहिए। बाद में, मुझे इसे बदलने के लिए एक बुरा अभ्यास के रूप में मिला ... सभी अनावश्यक प्रभावों के कारण।
अमीन

@ लोकी एस्टरी: मुझे नहीं पता कि आप किस आईडीई का उपयोग कर रहे हैं, लेकिन मुझे लगता है कि किसी दिए गए वर्ग को खोजते या खोलते समय एक अलग वर्ग का नाम संभालना आसान होता है। मैंने "ईमेल" का एक अनुकूलित संस्करण वाली परियोजनाएं देखीं और हर बार जब मुझे उस फ़ाइल को खोलना पड़ा जिसे मुझे कई नामस्थानों में ब्राउज़ करना पड़ा। आपकी बात अभी भी मान्य है मुझे लगता है कि यह पैकेज संगठन के लिए व्यक्तिपरक है कि कितने अनुकूलित कक्षाएं बनाई जा रही हैं।
अमीन

1
@Amine: मुझे नहीं पता था कि आप वास्तव में नामस्थान के खिलाफ बहस कर रहे हैं । मेरा सुझाव है कि आप उन्हें उपयोग करने के सभी लाभों को देखने के लिए नामस्थान के बारे में कुछ और पढ़ें: इनकैप्सुलेशन, अस्पष्टता को कम करना, अतिरेक, कम करना ... Ps: अधिकांश आधुनिक आईडीई में खोज विशेषताएं हैं जो आपको जल्दी से एक स्रोत फ़ाइल ढूंढने के लिए बिना ब्राउज़ करने की अनुमति देती हैं। पदानुक्रम। जैसा कि आपकी टिप्पणी मेरे लिए है: निरंतर रिफैक्टिंग सॉफ्टवेयर विकास का हिस्सा है। जब आप अधिक उपयुक्त नाम, बड़ा प्रभाव या नहीं आ सकते हैं, तो आपको इसका नाम बदलने पर विचार करना चाहिए। हालांकि सबसे पहले सहकर्मियों के साथ इस पर चर्चा करना सबसे अच्छा है।
स्टीवन ज्यूरिस

3

आप किस भाषा का उपयोग कर रहे हैं? उत्तर भाषा-विशिष्ट है। सामान्य तौर पर उत्तर 'नामस्थानों का उपयोग' होता है। मैं लगभग बाहरी नामस्थान के साथ संघर्ष से बचने के लिए लगभग प्रकार का नाम नहीं लिखूंगा।

एक एकल जावा अनुप्रयोग में एक ही वर्ग नाम (जैसे "दिनांक") का आधा दर्जन नामस्थानों में परिभाषित होना काफी सामान्य है। यदि एक वर्ग को दो अलग-अलग दिनांक वर्गों का उपयोग करने की आवश्यकता होती है, तो तिथि वर्गों में से एक को हर जगह पूरी तरह से योग्य होना पड़ता है, जैसा कि जावा प्रकार के उपनामों का समर्थन नहीं करता है। सी ++ में जीवन आसान है; आप बस उनमें से किसी एक का नाम बदलकर टाइफेड रख सकते हैं।


मैं एक समान उत्तर पोस्ट करने वाला था, लेकिन C ++ के अन्य उदाहरण के बजाय उपनाम # निर्देश का उपयोग करके C # का उल्लेख करना चाहता था ।
स्टीवन ज्यूरिस

@ उत्तर: मैं C ++ के बजाय C # का उल्लेख करने जा रहा था, लेकिन जब से मैंने C # में प्रोग्राम किया है, तब से कुछ साल हो गए हैं और मुझे यकीन नहीं था।
केविन क्लाइन

2

क्या आपको अक्सर यह समस्या होती है? आप इसका प्रबंधन कैसे करते है?

यह वास्तव में आपके द्वारा उपयोग की जाने वाली भाषा पर निर्भर करता है। सी ++ और जावा में, नामस्थान का उपयोग करके इस समस्या को हल किया जाता है। मैं सी ++ का उपयोग कर रहा हूं, और ऐसा होता है कि मुझे एक ही नाम के साथ अलग-अलग कक्षाएं मिलीं। यह कोई समस्या नहीं है, क्योंकि वे विभिन्न नामस्थानों में हैं।

अन्य भाषाओं में, अलग-अलग नाम प्रदान करने के अलावा कोई तरीका नहीं है।


कंप्यूटर के लिए यह कोई समस्या नहीं है, लेकिन डेवलपर के लिए यह हो सकता है, क्योंकि आपको ईमेलमासेज और मेलमेजेज मिला है, उदाहरण के लिए।
जेएसबाच

@ ऑस्कर जाहिर है। कंप्यूटर के लिए यह हो सकता है xyz123और यह अभी भी वही काम करता है। मुझे कोई दूसरा रास्ता नहीं दिख रहा है, फिर क्रिया को जाना (आपने टिप्पणियों में कहा कि आप इससे बचने की कोशिश कर रहे हैं)।
19

2

आपका प्रश्न बहुत अच्छा है। कैसे के बारे में यदि आप उपसर्ग के साथ अपना तरीका उपसर्ग करते हैं जैसे कि U (या u) या cls (वर्ग के लिए छोटा)? उदाहरण के लिए:

clsEMailMEssage या uEMailMEssage

इसके लिए बहुत अधिक टाइपिंग की आवश्यकता नहीं है और आप तुरंत बता सकते हैं कि प्रकार 'आपका' है।

संपादित करें - पहले 2 टिप्पणियों के जवाब में:

मैं इस तथ्य पर पाठक का ध्यान आकर्षित करना चाहूंगा कि: सभी हंगेरियन नोटेशन समान नहीं बनाए गए हैं। हमें सिस्टम हंगेरियन और एप्स हंगेरियन में अंतर करना चाहिए , मेरा मानना ​​है कि ऊपर दिया गया सुझाव एप्स हंगरी प्रकार का है, जो हानिकारक नहीं है।

सिस्टम हंगेरियन नोटेशन से जुड़ा नुकसान जैसे कि एक आईडी का नामकरण करने के लिए उपरोक्त सुझाव मौजूद नहीं है।

इस पर अधिक जानकारी के लिए: गलत कोड बनाना गलत देखें - जोएल ऑन सॉफ्टवेयर


3
हर बार जब किसी ने अय नोट की सिफारिश की, तो भगवान ने एक बिल्ली का बच्चा मार दिया।
कोनामिमन

2
BIgHUmpCAmelCAsing या तो मदद नहीं करता है।
स्टीवन ज्यूरिस

ऊपर टिप्पणियाँ की सराहना की है। Pls मेरे संपादन देखें, हालांकि मुझे पता है कि हम में से कुछ अपने दिमाग को नहीं बदलेंगे, आखिरकार कौन बिल्ली का बच्चा चाहता है? :)
NoChance 5

मैंने अब डाउन वोट हटा दिया है कि आपने कुछ वैध तर्क जोड़े हैं। हालाँकि, मैं इस बात से सहमत नहीं हूँ कि इस परिदृश्य में नाम स्थान की तुलना में Apps हंगेरियन अधिक उपयुक्त है। जब भाषा उपनामों का समर्थन करती है, तो यह कहीं अधिक उपयुक्त समाधान है। केविन क्लाइन का जवाब देखें ।
स्टीवन ज्यूरिस

@Sewven Jeuris, आपकी टिप्पणी के लिए धन्यवाद। नाम स्थान सही हैं सिवाय इसके कि वे टाइप करने के लिए लंबे समय तक हैं, मैं आपके द्वारा दिए गए लिंक की जांच करूंगा।
NoChance
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.