प्रोग्रामिंग में सबसे कठिन भागों में से किसी एक का नामकरण कक्षाएं और विधियाँ हैं? [बन्द है]


275

इसलिए मैं इस वर्ग पर काम कर रहा हूं जो एक वेब सेवा के माध्यम से विक्रेता से मदद के लिए अनुरोध करने वाला है। मैं इसे नाम करने की कोशिश DocumentRetriever, VendorDocRequester, DocGetter, लेकिन वे सिर्फ सही ध्वनि नहीं है। मैं के माध्यम से ब्राउज़ समाप्त हो गया dictionary.com एक पर्याप्त शब्द के साथ आने की कोशिश कर आधे घंटे के लिए।

बुरे नामों के साथ प्रोग्रामिंग शुरू करना, सुबह के समय में बहुत खराब बाल होने की तरह है, बाकी दिन वहां से खिसक जाते हैं। मुझे महसूस करो?


2
आप एक वर्ग क्यों चाहते हैं, जब आपको स्पष्ट रूप से केवल एक फ़ंक्शन की आवश्यकता होती है? सुनिश्चित करें कि आप क्रिया को वर्ग नाम की समस्या के रूप में steve-yegge.blogspot.com/2006/03/… देखें
user51568

या, आगे बढ़ें और रिफ्लेक्टर करें जब आप अंततः जानते हैं कि इसे क्या कहा जाना चाहिए।
एस्टेबन अरया

16
क्या आप नामकरण कर रहे हैं ?: तरीकों : उपयोग क्रियाएं , मिलता है, सेट की तरह, सेव, आदि वर्गों और चर : उपयोग संज्ञाएं , दस्तावेज़, उपयोगकर्ता, संदर्भ, आदि जैसे इंटरफेस : उपयोग विशेषण , जैसे प्रिंट करने योग्य, clonable, iterable, आदि इस धागे को पढ़ने के बाद, मुझे कक्षाओं और चर के लिए स्पोलस्की का सुझाव पसंद है (यह संज्ञाओं का उपयोग करता है) और विधियों के लिए ट्रैविसो का सुझाव (यह क्रियाओं का उपयोग करता है)। 'एर' के साथ समाप्त होने वाली वस्तुओं को भी न बनाएं
डैनियल गैसुल

5
"कंप्यूटर विज्ञान में दो कठिन समस्याएं हैं: कैश अमान्यकरण, नामकरण परंपराएं, और मूक अतिप्रवाह।"
करकुरी

6
@karakuri मैंने सुना संस्करण "कंप्यूटर विज्ञान में 2 कठिन समस्याएं हैं: नामकरण, और 1 त्रुटि से ऑफसेट ।"
होवेस्ट

जवाबों:


121

अब आप जो कर रहे हैं वह ठीक है, और मैं अत्यधिक सलाह देता हूं कि आप अपने वर्तमान सिंटैक्स के साथ रहें।

संदर्भ + क्रिया + कैसे

मैं इस विधि का उपयोग फ़ंक्शन / विधियों को नाम देने के लिए करता हूं, SQL संग्रहित procs, आदि। इस सिंटैक्स को रखकर, यह आपके Intellisense / Code Panes को अधिक साफ-सुथरा रखेगा। तो आप EmployeeGetByID () EmployeeAdd (), EmployeeDeleteByID () चाहते हैं। जब आप GetEmployee (), AddEmployee () जैसे अधिक व्याकरणिक रूप से सही सिंटैक्स का उपयोग करते हैं, तो आप देखेंगे कि यह वास्तव में गड़बड़ हो जाता है यदि आपके पास एक ही वर्ग में कई हो जाता है क्योंकि असंबंधित चीजों को एक साथ समूहीकृत किया जाएगा।

मैं तारीखों के साथ फ़ाइलों का नामकरण करने के लिए यह कहता हूं, आप 2009-01-07 कहना चाहते हैं। 1-7-2009.log नहीं क्योंकि आपके पास उनमें से एक गुच्छा होने के बाद, आदेश पूरी तरह से बेकार हो जाता है।


28
मैं नामकरण के तरीकों से नाम के संदर्भ में अनुमान लगाना पसंद करता हूं ... वर्ग कर्मचारी (शून्य कर्मचारी) शून्य जोड़ें (कर्मचारी कर्मचारी); शून्य प्राप्त करें (इंट आईडी); शून्य GetAll (); शून्य GetAll (क्रिया <FilterCriteria> फ़िल्टर); } तुम क्या सोचते हो?
व्यास भार्गव

5
यदि आपके पास "घर" क्रियाओं की एक मानक सूची है, तो भी मदद करता है। तो यह हमेशा मिलता है और लोड नहीं होता है / पढ़ें / पुनः प्राप्त / चुनें / ढूंढें .... आदि
मृत खाता

2
रिचर्ड आप OOP परिदृश्यों में सही हैं, मेरा उत्तर थोड़ा पीछे खींच लिया गया था और एक सामान्य कोडिंग सुझाव के अधिक था। मुझे लगता है कि तकनीकी रूप से यह गैर ओओपी भाषाओं की ओर अधिक लागू होता है। OOP में Employee.Add () और Employee.GetByID () सबसे अच्छा उपयोग होगा।
ट्रैविसो

6
मुझे आपके सुझाव का प्रभाव पसंद है, लेकिन मैं एक दृष्टिकोण पसंद करता हूं जो थोड़ा अधिक साक्षर है। इसलिए मैं Employee.SetSupervisor () को Employee.SupervisorSet () से अधिक पसंद करता हूं क्योंकि यह पढ़ता है (प्राकृतिक अंग्रेजी की तरह)
मैथ्यू Marillillas

12
लेकिन @ ट्राविसो, यह अंग्रेजी में अच्छा नहीं लगता है। आपको कर्मचारी नहीं मिलता है, आपको एक कर्मचारी मिलता है। यदि आपके पास विशेषण जैसे विशेषण जैसे अधिक जटिल कार्य हैं, तो क्या होगा InvalidateObsoleteQueries? QueriesInvalidateObsoleteपढ़ना मुश्किल है और समझ में नहीं आता है। इसके अलावा, C # में, विशेष रूप से Resharper के साथ, अल्फाबेटिक ऑर्डर अप्रासंगिक है। आप टाइप "रोजगार" शुरू करते हैं, Resharper आप दे देंगे GetEmployee, SetEmployeeऔर यहां तक कि PopulateInactiveEmployeesList
इल्या कोगन

54

एक सबक जो मैंने सीखा है, वह यह है कि यदि आप किसी वर्ग के लिए नाम नहीं खोज सकते हैं, तो उस वर्ग के साथ लगभग हमेशा कुछ गलत होता है:

  • आपको इसकी आवश्यकता नहीं है
  • यह बहुत ज्यादा है

13
या यह बहुत कम करता है।
14:

4
धन्यवाद, यह वास्तव में मेरे लिए प्रासंगिक था।
होएस्ट

52

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

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

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

जब मुझे यह पैटर्न मिलता है, तो मैं हमेशा फ़ंक्शन x Fromy का नाम देता हूं ।

चूँकि आपका कार्य एक यूआरएल को एक दस्तावेज़ में बदल देता है, इसलिए मैं इसे नाम दूंगा

DocumentFromUrl

यह पैटर्न उल्लेखनीय रूप से सामान्य है। उदाहरण के लिए:

atoi -> IntFromString
GetWindowWidth -> WidthInPixelsFromHwnd // or DxFromWnd if you like Hungarian
CreateProcess -> ProcessFromCommandLine

UrlToDocumentयदि आप उस आदेश के साथ अधिक सहज हैं तो आप इसका उपयोग भी कर सकते हैं चाहे आप कहें कि x Fromy या y Tox शायद स्वाद का मामला है, लेकिन मैं Fromऑर्डर पसंद करता हूं क्योंकि इस तरह से फ़ंक्शन नाम की शुरुआत पहले से ही बता देती है कि यह किस प्रकार का रिटर्न देता है।

एक सम्मेलन चुनें और इसे छड़ी। यदि आप अपने x Fromy फ़ंक्शंस में अपने वर्ग के नामों के समान नामों का उपयोग करने के लिए सावधान हैं , तो यह याद रखना बहुत आसान होगा कि आपने किन नामों का उपयोग किया है। बेशक, यह पैटर्न सब कुछ के लिए काम नहीं करता है, लेकिन यह काम करता है जहां आप कोड लिख रहे हैं जिसे "कार्यात्मक" माना जा सकता है।


एक अच्छा अनुस्मारक है कि ओओपी भाषाओं में, वर्ग नामों को हमेशा संज्ञा की आवश्यकता नहीं होती है, लेकिन अवसर पर उनके लिए "क्रिया" होना ठीक है। इसलिए, OOP के प्रैक्टिशनर अक्सर फंस जाते हैं (जैसे कि सवाल पूछने वाला व्यक्ति) क्योंकि बहुत जोर देते हैं कि वास्तविक दुनिया में कक्षाएं "चीज" होनी चाहिए।
रे

7
XFromY-Convetion मूल रूप से दोहराता है कि रिटर्न प्रकार और पैरामीटर सूची में क्या है: फू फूफ्रोमबार (बार बार)। यह आप पर निर्भर करता है कि आप इस संगति को कहते हैं या रिडेंडेंसी।
लीना शिममेल

"आपके मामले में ऐसा लगता है कि आपकी कक्षा एक दस्तावेज में एक यूआरएल को बदल देती है"। चूँकि कक्षाएँ अवधारणाओं को दर्शाने के बजाय "करने" वाली चीज़ों को माना जाता है?
14:

6
@ ब्रायन: यह घोषणा में केवल एक ही जगह पर बेमानी है। हर जगह आप इसका उपयोग करते हैं, डेटा प्रकारों का थोड़ा अनुस्मारक होना अच्छा है। घोषणा को वापस जाने के बिना अधिक पठनीय कोड बनाता है।
योएल Spolsky

3
@ stefan- कुछ भाषाओं में ऐसे C # और Java में सभी कोड को C ++ के विपरीत एक कक्षा में रखा जाना चाहिए। यदि आप कोड संशोधित करना चाहते हैं, तो फ़ंक्शंस उन भाषाओं में प्रथम श्रेणी के नागरिक नहीं हैं। इसलिए, आप कभी-कभी कक्षा के साथ समाप्त होते हैं जो एक फ़ंक्शन की तरह "काम" कर सकते हैं।
रे

31

कभी-कभी किसी वर्ग या विधि का अच्छा नाम नहीं होता है, यह हम सभी के लिए होता है। अक्सर बार, हालांकि, नाम के साथ आने में असमर्थता आपके डिजाइन के साथ कुछ गलत होने का संकेत हो सकता है। क्या आपकी विधि में बहुत अधिक जिम्मेदारियां हैं? क्या आपकी कक्षा एक सुसंगत विचार का विस्तार करती है?


3
बहुत अच्छा बिंदु, वास्तव में।
कैमिलो मार्टिन

27

धागा 1:

function programming_job(){
    while (i make classes){
         Give each class a name quickly; always fairly long and descriptive.
         Implement and test each class to see what they really are. 
         while (not satisfied){
            Re-visit each class and make small adjustments 
         }
    }
}

धागा 2:

while(true){
      if (any code smells bad){
           rework, rename until at least somewhat better
      }
}

यहाँ कोई भी थ्रेड। स्लीप (...) नहीं है।


24

मैं बहुत समय बिताता हूं और साथ ही किसी भी चीज के नाम के बारे में चिंता करता हूं जिसे प्रोग्रामिंग करते समय नाम दिया जा सकता है। मैं कहूंगा कि यह बहुत अच्छी तरह से भुगतान करता है। कभी-कभी जब मैं फंस जाता हूं तो मैं इसे थोड़ी देर के लिए छोड़ देता हूं और कॉफी ब्रेक के दौरान मैं थोड़ा पूछता हूं कि क्या किसी के पास अच्छा सुझाव है।

आपकी कक्षा के लिए मैं सुझाव दूंगा VendorHelpDocRequester


1
> वेंडरहेल्पडोकरीसेस्टर अच्छा है। मैंने वास्तव में अनुरोधकर्ता के बजाय अनुरोधकर्ता को गुगली दी है, दोनों ही वैध अंग्रेजी शब्द हैं।
हाओएस्ट

1
मैंने ऐसा एक या दो बार किया है :)
willcodejavaforfood

1
वर्ग नाम में एक क्रिया होने से मुझे हमेशा गलत लगता है। इसके अलावा यह हमेशा उपयोग (यानी:) में कुछ दोहराव की ओर जाता है VendorHelpDocRequester.request()। मैं सिर्फ `वेंडरहेल्पडॉक्स.क्रेस्ट () 'जैसे बहुवचन रूप को पसंद करूंगा
मदीना

19

स्टीव मैकोनेल द्वारा बुक कोड कम्प्लीट का नामकरण वेरिएबल्स / क्लासेस / फ़ंक्शंस / पर एक अच्छा अध्याय है ...


यह मेरी पसंदीदा पुस्तकों में से एक है, अत्यधिक अनुशंसा करते हैं
willcodejavaforfood

2
+1 किसी के लिए जो कभी कोड पूरा का उल्लेख करता है!
रिचर्ड ईव

15

मुझे लगता है कि यह एक साइड इफेक्ट है।

यह वास्तविक नामकरण नहीं है जो कठिन है। क्या मुश्किल है कि नामकरण की प्रक्रिया आपको भयानक तथ्य का सामना करती है कि आपको पता नहीं है कि आप क्या कर रहे हैं।


12

मैंने वास्तव में यह उद्धरण कल ही देखा था, सिग्नल बनाम शोर ब्लॉग के माध्यम से 37Signals पर, और मैं निश्चित रूप से इससे सहमत हूं:

"कंप्यूटर विज्ञान में केवल दो कठिन चीजें हैं: कैश अमान्यकरण और नामकरण की चीजें।" - फिल कार्लटन


simonwillison.net/2007/Jul/5/hard ने मुझे tbray.org/ongoing/When/200x/2005/12/23/UPI तक पहुंचाया , जिसने मुझे karlton.hamilton.com और kllton.hamilton.com/quotes पर ले लिया। /showallquotes.cgi , जिसमें उद्धरण शामिल नहीं है! (लेकिन मैं स्क्रम से # 5 को पहचानता हूं।)
डेरिल स्पिट्जर

1
"कंप्यूटर साइंस में दो कठिन चीजें: कैश अमान्य होना, नामकरण की चीजें और ऑफ-बाय-वन एरर।"
डैन लुग

7

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


6

माना। मैं अपने प्रकार के नाम और चर को वर्णनात्मक के रूप में संभव के रूप में बहुत लंबे समय तक रखने के बिना रखना पसंद करता हूं, लेकिन कभी-कभी बस एक निश्चित अवधारणा होती है जिसके लिए आपको एक अच्छा शब्द नहीं मिल सकता है।

उस स्थिति में, यह मुझे हमेशा इनपुट के लिए सहकर्मी से पूछने में मदद करता है - भले ही वे अंततः मदद न करें, यह आमतौर पर मुझे कम से कम इसे ज़ोर से समझाने और मेरे पहियों को मोड़ने में मदद करता है।


6

मैं पिछले महीने सम्मेलनों के नामकरण पर लिख रहा था: http://caseysoftware.com/blog/useful-naming-conventions

इसका सार:

verbAdjectiveNounStructure - वैकल्पिक भागों के रूप में संरचना और विशेषण के साथ

के लिए क्रियाएं , मैं एक्शन क्रियाओं से चिपक:, बचाने हटाते हैं, तो सूचित करें, अपडेट करने या उत्पन्न करते हैं। एक बार एक समय में, मैं "प्रक्रिया" का उपयोग करता हूं, लेकिन केवल विशेष रूप से कतारों या काम के बैकलॉग को संदर्भित करता हूं।

के लिए संज्ञाएं , मैं कक्षा का उपयोग करें या से बातचीत की जा रही वस्तु। Web2project में, यह अक्सर कार्य या परियोजनाएं होती हैं। यदि यह जावास्क्रिप्ट को पेज के साथ इंटरैक्ट कर रहा है, तो यह बॉडी या टेबल हो सकता है। मुद्दा यह है कि कोड स्पष्ट रूप से उस वस्तु का वर्णन करता है जिसके साथ वह बातचीत कर रहा है।

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

विशेषण फिर कोई अन्य विषय हैं। उन्हें संज्ञा में संशोधक के रूप में उपयोग किया जाता है। GetOpenProjects के रूप में कुछ सरल रूप से एक getProjects और एक स्विच पैरामीटर के साथ आसानी से लागू किया जा सकता है, लेकिन यह उन तरीकों को उत्पन्न करता है जिनके लिए अंतर्निहित डेटा और / या संरचना की समझ की काफी आवश्यकता होती है ... जरूरी नहीं कि आप कुछ करना चाहते हों प्रोत्साहित करते हैं। अधिक स्पष्ट और विशिष्ट कार्य होने से, आप इसका उपयोग करके कोड से कार्यान्वयन को पूरी तरह से लपेट और छिपा सकते हैं। क्या यह ओओ के बिंदुओं में से एक नहीं है?


4

सिर्फ एक वर्ग का नामकरण करने से ज्यादा, एक उचित पैकेज संरचना तैयार करना एक कठिन लेकिन पुरस्कृत चुनौती हो सकती है। आपको अपने मॉड्यूल की चिंताओं को अलग करने पर विचार करने की आवश्यकता है और वे आवेदन की दृष्टि से कैसे संबंधित हैं।

अब अपने ऐप के लेआउट पर विचार करें:

  • ऐप
    • VendorDocRequester (वेब ​​सेवा से पढ़ें और डेटा प्रदान करें)
    • VendorDocViewer (विक्रेता डॉक्स प्रदान करने के लिए उपयोगकर्ता)

मैं यह अनुमान लगाने के लिए उद्यम करूंगा कि कुछ कक्षाओं के अंदर बहुत कुछ हो रहा है। यदि आप इसे अधिक MVC-ified दृष्टिकोण में प्रतिबिंबित करने के लिए थे, और छोटे वर्गों को व्यक्तिगत कर्तव्यों को संभालने की अनुमति देते हैं, तो आप कुछ इस तरह से समाप्त कर सकते हैं:

  • ऐप
    • VendorDocs
      • नमूना
        • दस्तावेज़ (सादा वस्तु जो डेटा रखती है)
        • WebServiceConsumer (वेब ​​सेवा में किटी ग्रिट्टी के साथ सौदा)
      • नियंत्रक
        • डेटाबेस एडेप्टर (ओआरएम या अन्य विधि का उपयोग करके दृढ़ता को संभालें)
        • WebServiceAdapter (एक दस्तावेज़ को हथियाने और डेटाबेस में इसे चिपकाने के लिए उपभोक्ता का उपयोग करें)
      • राय
        • हेल्प व्यूवर (डॉक्यूडेशन का उपयोग करने के लिए DBAdcape का उपयोग करें)

फिर आपके वर्ग के नाम पूर्ण संदर्भ प्रदान करने के लिए नाम स्थान पर निर्भर करते हैं। स्पष्ट रूप से ऐसा कहने की आवश्यकता के बिना कक्षाएं स्वयं अंतर्निहित रूप से आवेदन से संबंधित हो सकती हैं। परिणाम के रूप में परिभाषित करने के लिए कक्षा के नाम सरल और आसान हैं!

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


4

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

थिसॉरस का उपयोग करने की कोशिश http://thodge.reference.com/ पर करें

इसके अलावा, हंगेरियन नोटेशन ईवर का उपयोग न करें, संक्षिप्त रूप से बचें और सुसंगत रहें।

शुभकामनाएँ।


1
+1 नोट के साथ कि आपको सिस्टम का उपयोग नहीं करना चाहिए, जो कि कैलर्ड सिस्टम है; ऐप कई बार मददगार हो सकता है, खासकर एक प्रोग्रामिंग भाषा में बिना किसी टाइपिंग सिस्टम के।
14:

मैंने सिस्टम बनाम एप्लिकेशन हंगेरियन नोटेशन के बारे में कभी नहीं सुना है, लेकिन न तो कभी किसी भी वातावरण में एक अच्छा विचार है - आपको हमेशा WHAT के आधार पर नाम देना चाहिए, न कि कैसे, और हंगरी पूरी तरह से कैसे है।
रॉब विलियम्स

@ रॉविलियम्स मुझे लगता है कि वे जोएल
स्पोल्स्की

1
@ रोबॉलियम्स इसके अलावा, क्या आप इस बारे में निश्चित हैं कि "मैंने कभी एक्स बनाम वाई के बारे में नहीं सुना है लेकिन न ही कभी एक अच्छा विचार है ..." ...? :)
एलोइस महदाल

4

संक्षेप में:
मैं मानता हूं कि अच्छे नाम महत्वपूर्ण हैं, लेकिन मुझे नहीं लगता कि आपको हर कीमत पर लागू करने से पहले उन्हें ढूंढना होगा।

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

लंबा:
आम तौर पर इसे लागू करने से पहले एक नाम के बारे में बहुत लंबा सोचने के लायक नहीं है। यदि आप अपनी कक्षा को लागू करते हैं, तो इसका नामकरण "फू" या "Dsnfdkgx" करते हैं, जबकि आप इसे लागू करते हैं कि आपको इसका नाम क्या होना चाहिए।

विशेष रूप से जावा + एक्लिप्स के साथ, चीजों का नाम बदलना कोई दर्द नहीं है, क्योंकि यह सभी वर्गों में सभी संदर्भों को सावधानीपूर्वक संभालता है, आपको नाम टकराव आदि की चेतावनी देता है और जब तक वर्ग अभी तक संस्करण नियंत्रण भंडार में नहीं है, मैं डॉन ' टी यह 5 बार नाम बदलने के साथ कुछ भी गलत है।

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


3

HelpDocumentServiceClient किसी माउथफुल या HelpDocumentClient की तरह क्यों नहीं ... यह कोई बात नहीं है यह एक विक्रेता है बिंदु यह है कि यह एक webservice का ग्राहक है जो मदद दस्तावेजों के साथ काम करता है।

और हाँ नामकरण कठिन है।


3

उस वर्ग के लिए केवल एक समझदार नाम है:

HelpRequest

कार्यान्वयन विवरण को अर्थ से विचलित न होने दें।


डेढ़ साल बाद, मैं HelpLibraryकक्षा के लिए सुझाव देने वाला था, लेकिन यह कम से कम अच्छा है। यह पहले उत्तर के माध्यम से पढ़ने के लिए भुगतान करता है!
जेफ सनातन

2

एक अच्छे रीफैक्टरिंग टूल में निवेश करें!


जबरदस्त हंसी। कभी-कभी रिफैक्टरिंग सबसे अच्छा विकल्प नहीं होता है (बड़ी सी ++ परियोजनाएं), लेकिन मैंने निश्चित रूप से पहले इसका सहारा लिया है। कभी-कभी मुझे बस काम करना पड़ता है, और नाम बाद में मेरे पास आते हैं।
स्टीव एस

2

मैं मूल बातें करने के लिए छड़ी: VerbNoun (तर्क)। उदाहरण: GetDoc (docID)।

फैंसी पाने की कोई जरूरत नहीं है। अब से एक साल समझना आसान होगा, चाहे वह आप हो या कोई और।


जबकि यह अच्छी तरह से पढ़ता है, यह खराब आयोजन करता है क्योंकि यह पीछे की ओर है। DocGet () कहना बेहतर है क्योंकि जब आप DocAdd () DocRemove () आदि बनाते हैं तो वे सभी एक सूची में एक साथ दिखाई देंगे। आपकी विधि वास्तव में दिखाती है कि जब आपके पास दर्जनों गट्स या व्हाट्सएप हैं तो यह कितना बदसूरत हो जाता है।
ट्रैविसो

उत्कृष्ट सुझाव, ट्रैविसो।
जॉन स्मोक

मैं सामान्य रूप से एक वर्ग के लिए एक क्रिया का उपयोग नहीं करूंगा।
२२:४af पर --कोडाजावफोरूड ’

2

मेरे लिए मुझे परवाह नहीं है कि कोई विधि या वर्ग का नाम उसके वर्णनात्मक और सही पुस्तकालय में कितना लंबा है। लंबे समय से वे दिन हैं जहां आपको याद रखना चाहिए कि एपीआई का प्रत्येक भाग कहाँ रहता है।

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

इसे ध्यान में रखते हुए मैं एक विधि का नाम बनाने के लिए ठीक हूं

StevesPostOnMethodNamesBeingLongOrShort

लंबा - लेकिन इतना क्या। कौन इन दिनों 24 इंच स्क्रीन का उपयोग नहीं करता है!


1

मुझे सहमत होना होगा कि नामकरण एक कला है। यह थोड़ा आसान हो जाता है अगर आपकी कक्षा एक निश्चित "डीज़ पैटर्न" (फैक्टरी आदि) का अनुसरण कर रही है।


1

यह एक मानक कोडिंग के कारणों में से एक है। आवश्यकता होने पर नामों के साथ आने के लिए एक मानक होता है। यह आपके दिमाग को अन्य रोचक चीजों के लिए उपयोग करने में मदद करता है! (-:

मैं स्टीव मैककोनेल कोड कम्प्लीट ( अमेज़ॅन लिंक ) के प्रासंगिक अध्याय को पढ़ने की सलाह दूंगा जो पठनीयता और यहां तक ​​कि रख-रखाव की सहायता के लिए कई नियमों में जाता है।

HTH

चियर्स,

लूटना


1

नहीं, डिबगिंग मेरे लिए सबसे मुश्किल काम है! :-)


डिबगिंग आमतौर पर सही सवाल पूछने के लिए नीचे आती है। यह नंबर गेम है जहां आपको 1 से 1000 तक की संख्या का अनुमान लगाना है। यदि आपका अनुमान बहुत कम या अधिक है, तो कंसोल आपको बताता है, और आपके पास केवल 10 प्रयास हैं। आप क्या करते हैं?
हाओएस्ट

1

DocumentFetcher? बिना संदर्भ के कहना कठिन है।

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


1

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

यदि यह केवल नामों के एक सेट के बीच चयन कर रहा है, तो इसे सिस्टम को बनाने के लिए आपके द्वारा उपयोग किए जा रहे सम्मेलनों द्वारा संचालित किया जाना चाहिए। यदि आप एक नए स्थान पर आए हैं, तो पिछले सम्मेलनों द्वारा उजागर किया गया है, तो इस नए मामले को कवर करने के लिए उन्हें (ठीक से, लगातार) विस्तारित करने की कोशिश में हमेशा कुछ खर्च करने लायक है।

यदि संदेह है, तो उस पर सो जाओ, और अगली सुबह पहला सबसे स्पष्ट नाम उठाओ, :-)

यदि आप एक दिन जागते हैं और महसूस करते हैं कि आप गलत थे, तो इसे तुरंत बदल दें।

पॉल।

BTW: Document.fetch () बहुत स्पष्ट है।


1

मुझे लगता है कि मुझे स्थानीय चरों में सबसे अधिक परेशानी है। उदाहरण के लिए, मैं प्रकार DocGetter का एक ऑब्जेक्ट बनाना चाहता हूं। इसलिए मुझे पता है कि यह एक डॉकटर है। मुझे इसे दूसरा नाम देने की आवश्यकता क्यों है? मैं आमतौर पर इसे dg (DocGetter के लिए) या temp या समान रूप से nondescriptive नाम देता हूं।


1

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


1

विक्रेता प्रलेखन वस्तु नहीं होना चाहिए? मेरा मतलब है, कि एक मूर्त है, न कि आपके कार्यक्रम के एक हिस्से के कुछ नृविज्ञान के रूप में। तो, आपके पास VendorDocumentationएक कंस्ट्रक्टर के साथ एक वर्ग हो सकता है जो जानकारी प्राप्त करता है। मुझे लगता है कि अगर एक वर्ग के नाम में एक क्रिया है, तो अक्सर कुछ गलत हो गया है।


1

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

मेरे पास एक सुझाव एक थिसॉरस से परामर्श करने का है। मैक ओएस एक्स के रूप में वर्ड में एक अच्छा है, जो वास्तव में मुझे बादलों से अपना सिर बाहर निकालने में मदद कर सकता है और मुझे एक अच्छी शुरुआत के साथ-साथ कुछ प्रेरणा भी देता है।


0

यदि नाम खुद को एक प्रोग्रामर को समझाएगा तो शायद इसे बदलने की कोई आवश्यकता नहीं है।

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