उपवर्गों के नामकरण के लिए सबसे अच्छा अभ्यास


10

मैं एक स्थिति है जहाँ मैं एक अवधारणा एक इंटरफेस या वर्ग का प्रतिनिधित्व करती है में अक्सर हूँ, और फिर मैं उपवर्गों/subinterfaces जो इसे विस्तार की एक श्रृंखला है।

उदाहरण के लिए: एक सामान्य "DoiGraphNode" ए 'DoiGraphNode "एक संसाधन ए' DoiGraphNode" एक संबद्ध पथ के साथ एक जावा संसाधन ए 'DoiGraphNode "का प्रतिनिधित्व करने, आदि, आदि

मैं का प्रतिनिधित्व तीन नामकरण सम्मेलनों के बारे में सोच सकते हैं, और कैसे चुनना है इस पर टिप्पणियों की सराहना करेंगे।


विकल्प 1: हमेशा अवधारणा के नाम से शुरू करें।

इस प्रकार: DoiGraphNode, DoiGraphNodeResource, DoiGraphNodeJavaResource, DoiGraphNodeWithPath, आदि

प्रो: यह बहुत स्पष्ट है कि मैं क्या के साथ काम कर रहा हूँ, यह सब विकल्प

कोन है देखना आसान है: नहीं बहुत प्राकृतिक? सबकुछ एक जैसा दिखता है?


विकल्प 2: शुरुआत में विशेष सामान रखो।

इस प्रकार: DoiGraphNode, ResourceDoiGraphNode, JavaResourceDoiGraphNode, PathBaseDoiGraphNode, आदि, आदि

प्रो: यह बहुत स्पष्ट है जब मैं कोड में देख

कोन:, ढूँढना विशेष रूप से यह मुश्किल हो सकता है अगर मैं नाम याद नहीं है, दृश्य स्थिरता की कमी


विकल्प 3: विशेष सामान रखो और अनावश्यक पाठ से कुछ हटा दें

इस प्रकार: DoiGraphNode, ResourceNode, JavaResourceNode, GraphNodeWithPath

प्रो: कि लिखने और पढ़ने के कोन के लिए बहुत कुछ नहीं: जैसे करोड़ * पी, बहुत असंगत लग रहा है, अन्य नामों

4

नाम उन्हें है।

तो उनका नाम इस कठिन या अस्पष्ट है, यह अक्सर एक संकेत है कि कक्षा में बहुत ज्यादा (एकल जिम्मेदारी सिद्धांत) कर रही है है।

संघर्ष नामकरण से बचने के लिए उचित रूप से अपने नामस्थान चुनें।

personnally, मैं 3

+1

मैंने तीसरा विकल्प भी चुना होगा। पहले दो में "ट्विस्टी लंबे नामों की भूलभुलैया, सभी थोड़ा अलग" में समाप्त होने का खतरा है, जहां आपको उन्हें पढ़ने में कठिनाई होती है और यह भी याद रखना कि कौन सा नाम अवधारणा से मेल खाता है। 22 feb. 092009-02-22 08:52:59


5

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

क्या इसके लायक है के लिए, मैं आमतौर पर विकल्प 3 का उपयोग करें, और मेरे अनुभव से अन्य लोगों के कोड विकल्प 2 को देखकर वे क्या कर रहे हैं के लिए विकल्प की तुलना में शायद अधिक प्रचलित 1.


0

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

कक्षाओं के विरासत को देखने के लिए कई सारे टूल हैं, इसलिए कक्षा का वास्तविक कार्य इंगित करने वाला एक संक्षिप्त नाम नाम में बहुत अधिक प्रकार की जानकारी पैक करने की कोशिश करने से कहीं अधिक दूर जाएगा।


2

आपको कोडिंग मानकों दस्तावेज़ में कुछ मार्गदर्शन मिल सकता है, उदाहरण के लिए सी # here के लिए IDESign दस्तावेज़ है।

व्यक्तिगत रूप से, मैं विकल्प 2 पसंद करता हूं। आमतौर पर .NET Framework इसकी वस्तुओं का नाम देता है। उदाहरण के लिए विशेषता वर्गों को देखें। वे सभी विशेषता (TestMethodAttribute) में समाप्त होते हैं। EventHandlers के लिए यह वही है: OnClickEventHandler एक ईवेंट हैंडलर के लिए एक अनुशंसित नाम है जो क्लिक ईवेंट को संभालता है।

मैं आमतौर पर अपने कोड और इंटरफेस को डिजाइन करने में इसका पालन करने का प्रयास करता हूं। इस प्रकार एक IUnitWriter एक स्ट्रिंगUnitWriter और एक DataTableUnitWriter पैदा करता है। इस तरह से मैं हमेशा जानता हूं कि उनकी बेस क्लास क्या है और यह अधिक स्वाभाविक रूप से पढ़ती है। स्व-दस्तावेज कोड सभी चुस्त डेवलपर्स के लिए अंतिम लक्ष्य है, इसलिए ऐसा लगता है कि यह मेरे लिए अच्छा काम करता है!


1

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

हालांकि मैं अपने प्रोग्रामिंग करियर में पहले विकल्प 2 का उपयोग करने का प्रयास करता हूं, लेकिन अब मैं इसे टालता हूं क्योंकि आप कहते हैं कि यह 'असंगत' है और बहुत ऑर्थोगोनल प्रतीत नहीं होता है।

मैं अक्सर विकल्प 3 का उपयोग करता हूं जब सबक्लास पर्याप्त विस्तार या विनिर्देश प्रदान करता है, या यदि नाम लंबे समय तक होंगे। उदाहरण के लिए, मेरी फाइल सिस्टम नाम कक्षाएं स्ट्रिंग से प्राप्त कर रहे हैं, लेकिन वे बहुत स्ट्रिंग वर्ग का विस्तार करने और एक काफी अलग उपयोग/अर्थ है:

Directory_entry_name स्ट्रिंग से प्राप्त व्यापक कार्यक्षमता जोड़ता। Directory_entry_name से प्राप्त फ़ाइल_नाम के बजाय विशेष कार्य हैं। Directory_entry_name से प्राप्त निर्देशिका_नाम में भी विशेष कार्य हैं।

विकल्प 1 के साथ, मैं आमतौर पर एक इंटरफ़ेस वर्ग के लिए एक अयोग्य नाम का उपयोग करता हूं। उदाहरण के लिए मैं एक वर्ग interence श्रृंखला हो सकता है:

  • पाठ (एक अंतरफलक)
  • Text_abstract (सार (आधार) सामान्यीकरण वर्ग)
  • Text_ASCII (ठोस वर्ग ASCII कोडिंग के लिए विशिष्ट)
  • Text_unicode (यूनिकोड कोडिंग के लिए विशिष्ट कंक्रीट क्लास)

मुझे यह पसंद है कि इंटरफ़ेस और सार बेस क्लास स्वचालित रूप से सॉर्ट की गई सूची में पहले दिखाई दे।