सी # क्लास नामकरण सम्मेलन: यह बेसक्लास या क्लासबेस या एब्सट्रैक्टस है


117

आधार वर्गों के नामकरण के लिए अनुशंसित दृष्टिकोण क्या है? क्या यह " आधार " या " सार " के साथ प्रकार का नाम उपसर्ग कर रहा है या क्या हम इसे "आधार" के साथ प्रत्यय देंगे?

निम्नलिखित को धयान मे रखते हुए:

प्रकार: ViewModelउदाहरण के लिए MainViewModel , ReportViewModel

आधार वर्ग: BaseViewModelया ViewModelBaseयाAbstractViewModel

इस पर भी विचार करें:

प्रकार: Productजैसे VirtualProduct , ExpiringProduct

आधार वर्ग: BaseProductया ProductBaseयाAbstractProduct

जो आपको लगता है कि अधिक मानक है?

class Entity : EntityBase
{
}

या

class Entity : BaseEntity
{
}


जवाबों:


90

बेस प्रत्यय के साथ फ्रेमवर्क में उदाहरण हैं, उदाहरण System.Configuration.Provider.ProviderBaseके लिए System.Web.SessionState.SessionStateStoreProviderBase

लेकिन किसी भी तरह से फ्रेमवर्क में सभी सार आधार वर्ग इस सम्मेलन (जैसे System.Data.Common.DbParameter, System.Data.Common.DbCommand) का पालन करते हैं ।

व्यक्तिगत रूप से मैं प्रत्यय का उपयोग करने से बचूंगा जब तक कि मैं इस तथ्य पर जोर नहीं देना चाहता था कि यह एक अमूर्त वर्ग है और महसूस किया कि अन्यथा वर्ग के उपयोगकर्ता एक ठोस कार्यान्वयन को इंगित करने के लिए नाम की उम्मीद कर सकते हैं।


" Avoidआधार वर्ग का नामकरण एक Baseप्रत्यय के साथ यदि सार्वजनिक एपीआई में उपयोग के लिए वर्ग का इरादा है।" फ्रेमवर्क डिज़ाइन दिशानिर्देश, पृष्ठ
१ --४

47

इनमे से कोई भी नहीं। विचार करें कि आपका आधार वर्ग क्या उद्देश्य प्रदान करता है; यह नाम है। उदाहरण के लिए, ऑटोमोबाइल और साइकिल का आधार वर्ग वाहन हो सकता है।

यदि आप बस एक वर्ग का आधार वर्ग बनाने के लिए आधार कक्षाएं बना रहे हैं, और इसके अलावा कोई उद्देश्य या कारण नहीं है, तो आप शायद कुछ गलत कर रहे हैं।


15
यह हमेशा ऐसा नहीं होता है और आपको रूपरेखा में कई बेस * कक्षाएं मिलेंगी। CollectionBase, DictionaryBase .... आदि
चाड ग्रांट

1
अच्छी बात यह है कि वास्तविक दुनिया की वस्तुओं को कलाकृतियों में बिल्कुल फिट होना चाहिए। कॉमन्स का अमूर्त वाहन की तरह होना चाहिए, बारीकियों को पीछे जाना होगा लेकिन सटीक भी।
रासलैंडर

45
वर्थ नोटिंग। .NET फ्रेमवर्क में "बेस" प्रत्यय वाली कुछ कक्षाओं को संस्करण 1.0 से पहले नाम दिया गया था और Microsoft अब उन सम्मेलनों का अनुसरण नहीं करता है .... लेकिन वे अब नाम नहीं बदल सकते हैं। Microsoft की फ्रेमवर्क डिज़ाइन दिशानिर्देश पुस्तिकाएं, खंड 6.2 (जिसमें आधार कक्षाएं शामिल हैं), विशेष रूप से "आधार" प्रत्यय का उपयोग करने के खिलाफ अनुशंसा करती हैं।
वॉरेन रुमक

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

4
जैसा कि वॉरेन, Microsoft फ्रेमवर्क डिज़ाइन गाइडलाइन्स बुक, बेस क्लासेस पर खंड 6.2: msdn.microsoft.com/en-us/library/ms229003(v=vs.110).aspx द्वारा उल्लेख किया गया है। वे आधार प्रत्यय से बचने के लिए कहते हैं: "AVOID नामकरण आधार वर्ग एक "आधार" प्रत्यय के साथ यदि वर्ग सार्वजनिक एपीआई में उपयोग के लिए अभिप्रेत है। "
cwills

5

यदि आप वर्चुअल बेस कक्षाओं के बारे में बात कर रहे हैं, तो Microsoft का मानक ClassnameBase (CollectionBase की तरह) है।


3

मुझे लगता है कि यह अपनी पसंद का मामला है। मैं कहूंगा कि यदि आप बहुत सारी आधार कक्षाएं बना रहे हैं, तो शायद हमेशा BaseClassname के साथ जाना बेहतर होता है, क्योंकि इस तरह से आप हमेशा यह पता लगा सकते हैं कि बस बेस टाइप करके आप किस आधार वर्ग का उपयोग शुरू कर सकते हैं और बाकी की मदद प्राप्त कर सकते हैं IntelliSense। क्या होगा यदि आपके पास 20 बेस क्लास थे और आपने बेस को प्रत्यय के रूप में जोड़ा और आप भूल गए कि बेस क्लास का नाम क्या था? क्या आप VS से पहली बार एक वर्ग आरेख बनाना चाहते हैं और यह पता लगा सकते हैं कि कौन से आधार वर्ग उपलब्ध हैं? जब वे सिर्फ एक या दो कक्षाएँ हों तो उन्हें क्लासबेस नाम देना ठीक है।

वही GetItems और ItemGet फ़ंक्शन के बीच निर्णय के लिए जाता है। मैं पठनीयता के लिए कहना चाहता हूँ - GetItems के लिए जाओ। सम्मेलनों का पालन करें :)


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

1
@ अभिषेक: GetItemsकाम नहीं करने की उपमा- "प्राप्त करें" केवल एक क्रिया है और इस प्रकार केवल उपसर्ग के रूप में अंग्रेजी व्याकरणिक समझ में आता है, जबकि "आधार" एक विशेषण (उपसर्ग) या संज्ञा (प्रत्यय) दोनों के रूप में काम करता है।
स्लिप डी। थॉम्पसन

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

@ SlippD.Thompson, हाँ, 'सभी वर्ग खोजें' अभिषेक की प्रतिक्रिया थी। मैंने पॉल के जवाब पर जवाब दिया।
Iain

2

हम BaseEntity का उपयोग करते हैं, लेकिन मुझे लगता है कि यह आपकी अपनी प्राथमिकता है। मैं अक्सर दूसरे को देखता हूं।

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


2

व्यक्तिगत रूप से, मैं शब्द के आधार को जोड़ने के खिलाफ सलाह दूंगा। आपको कभी नहीं पता होगा कि आपको कब कोड बदलना होगा और यह आधार ऑब्जेक्ट नहीं होगा। यह कहा जा रहा है, हमने अतीत में ऐसा किया है, हमने सामने शब्द बेस को उपसर्ग किया। यह बेहतर प्रवाह लगता है।


-1

BaseEntity ऊंट मामले की तरह दिखता है - strName, bseEntity। मैं EntityBase के लिए जाऊँगा क्योंकि यह पहले विषय को परिभाषित करता है, जिससे आपको यह पहचानने में मदद मिलेगी कि यह जल्दी काम करता है।


10
आप हंगेरियन नोटेशन की बात कर रहे हैं, ऊंट आवरण की नहीं। हंगेरियन नोटेशन सिर्फ ऊंट-आवरण के रूप में हुआ, लेकिन वे पूरी तरह से अलग चीजें हैं।
स्लाइडरहॉसरल्स

-5

सामान का नाम देते समय हमेशा वर्णमाला के बारे में सोचें। मुझे वास्तव में एक SQL सर्वर को देखना पसंद नहीं है और हर संग्रहीत प्रक्रिया को usp [कुछ] नाम दिया गया है। समान पंक्तियों के साथ, फ़ंक्शन के लिए अग्रणी नामों के रूप में गेट एंड सेट को अधिक उपयोग न करें। GetItems या PlaceOrder के बजाय, उन्हें ItemGet या OrderPlace के रूप में नाम देने के बारे में सोचें।

तो, सामान्य तौर पर, क्लासनेमबेस / एंटिटीबेस एक बेहतर विकल्प होगा।


9
असहमत; पठनीयता। GetGems, ItemGet की तुलना में बहुत अधिक समझ में आता है।
नाथन रिडले

2
असहमत ... ऊपर जैसा ही कारण .. लेकिन नीचे मतदान करने में असमर्थ ...:
मुगंथ

अन्य टिप्पणियों के विपरीत marcc ने आइटमगेट () की तरह कुछ सुझाया नहीं है। उन्होंने आइटम () लिखे।
होनव्री लेवेंटे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.