डेटा प्राप्त करने के लिए विधि के नाम [बंद]


103

चेतावनी: यह एक बहुत गंभीर प्रश्न / चर्चा नहीं है जिसे मैं पोस्ट कर रहा हूं ... लेकिन मैं शर्त लगाने को तैयार हूं कि अधिकांश डेवलपर्स ने इस "मुद्दे" पर विचार किया है ...

हमेशा उन तरीकों के नामकरण के बारे में अन्य राय प्राप्त करना चाहते थे जो गए और कहीं से डेटा प्राप्त किया और इसे वापस कर दिया ...

अधिकांश विधि नाम कुछ सरल और स्पष्ट हैं ... SaveEmployee (), DeleteOrder (), UploadDocument ()। निश्चित रूप से उन कक्षाओं के साथ जिनका आप संभवतः संक्षिप्त रूप ... (सहेजें), हटाएं (), अपलोड () क्रमशः का उपयोग करेंगे।

हालांकि, मैंने हमेशा प्रारंभिक कार्रवाई से संघर्ष किया है ... डेटा कैसे प्राप्त करें। ऐसा लगता है कि प्रत्येक परियोजना के लिए मैं अलग-अलग नामकरण सम्मेलनों के बीच कूदता हूं क्योंकि मैं पिछले एक के साथ कभी भी खुश नहीं हूं। जहाँ तक मैं बता सकता हूँ ये संभावनाएँ हैं ->

  • GetBooks ()
  • FetchBooks ()
  • RetrieveBooks ()
  • FindBooks ()
  • LoadBooks ()

आपका क्या विचार है?

जवाबों:


126

यह सब लगातार शब्दार्थ के बारे में है ;

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

  1. getBooks() जब आप किसी ऑब्जेक्ट से जुड़ी सभी पुस्तकों को प्राप्त कर रहे हैं, तो इसका मतलब है कि सेट के मानदंड पहले से ही परिभाषित हैं और वे कहां से आ रहे हैं यह एक छिपा हुआ विवरण है।
  2. findBooks(criteria) जब मैथड कॉल के लिए मापदंडों के आधार पर किताबों का उप-सेट ढूंढने की कोशिश की जाती है, तो यह आमतौर पर अलग-अलग दिशा-निर्देशों के साथ ओवरलोड होता है
  3. loadBooks(source) जब आप किसी फ़ाइल या db जैसे किसी बाहरी स्रोत से लोड कर रहे हों।
  4. मैं लाने / प्राप्त करने का उपयोग नहीं करूंगा क्योंकि वे बहुत अस्पष्ट हैं और प्राप्त करने के साथ भ्रमित हो जाते हैं और शर्तों के साथ कोई अस्पष्ट अर्थ नहीं जुड़ा होता है।

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

शब्दार्थ अत्यंत महत्वपूर्ण हैं:

भाषाविज्ञान और तर्क की अर्थ से संबंधित शाखा

टिप्पणियाँ इस बात का प्रमाण हैं कि जेनेरिक शर्तों को प्राप्त करना और प्राप्त करना कोई विशिष्ट अर्थ नहीं है और विभिन्न लोगों द्वारा अलग-अलग व्याख्या की जाती है। एक शब्द के लिए एक शब्दार्थ चुनें, यदि अर्थ स्पष्ट नहीं है और इसके उपयोग के अनुरूप होना है, तो इसका मतलब क्या है, यह दस्तावेज करें।

अस्पष्ट या अस्पष्ट अर्थ वाले शब्दों को अलग-अलग लोगों द्वारा उनके व्यक्तिगत विचारों के आधार पर पूर्वाग्रहों और पूर्व धारणाओं के कारण अलग-अलग शब्दार्थ दिए जाते हैं और यह कभी भी अच्छा नहीं होगा।


4
यदि डेटा एक डेटा बेस से पुनर्प्राप्त किया जाना था, तो मैं इसे जोड़ूंगा / प्राप्त करूंगा / उपयोग करूंगी
Liz Albin

1
हममम। क्या आप वाइल्डकार्ड मानदंड और विशिष्ट मानदंडों के बीच अंतर करेंगे। उदाहरण के लिए, क्या आप किसी विशिष्ट प्रकाशक की पुस्तकों की तलाश में फाइंडबुक (प्रकाशक) का उपयोग करेंगे? या हो सकता है GetBooksFromPublisher (प्रकाशक)?
जेसन

5
publisher.getBooks () इसे करने का पसंदीदा तरीका होगा, जहां प्रकाशक एक प्रकाशक का एक विशिष्ट उदाहरण था। Library.getBooks (प्रकाशक) जहां प्रकाशक ने BookSearchCriteria इंटरफ़ेस लागू किया। Library.getBooks (लेखक) के साथ समान है जहाँ लेखक ने एक BookSearchCriteria इंटरफ़ेस लागू किया है। आपके पास तार्किक रूप से एक

3
इस उत्तर के लिए धन्यवाद। निश्चित रूप से कुछ स्पष्टता जोड़ता है। संक्षेप में, आप कह रहे हैं कि किसी विशेष फ़िल्टर द्वारा पुनर्प्राप्ति के लिए तरीकों को ऑब्जेक्ट के साथ रहना चाहिए। किस तरह से इंटरफ़ेस का उपयोग किया जाएगा? उदाहरण के लिए, BookSearchCriteria इंटरफ़ेस। क्या आप कुछ नमूना कोड प्रदान कर सकते हैं?
जेसन

2
आमतौर पर नामकरण की तरह है fetchजब डेटा उपयोग समय है कम , एक ही डिवाइस पर, यानी स्मृति से स्थानीय डेटाबेस से। load, या downloadयदि एक्सेस का समय अधिक है , इंटरनेट से, बाहरी DB, फ़ाइल से
JANos

13

ईमानदारी से आपको बस अपनी टीम के साथ निर्णय लेना चाहिए जो नामकरण सम्मेलन का उपयोग करने के लिए। लेकिन मज़े के लिए, आइए देखें कि इनमें से किसी पर भी निर्णय लेने के लिए आपकी ट्रेन क्या होगी:

  • GetBooks ()

यह विधि एक डेटा स्रोत से संबंधित है, और हमें परवाह नहीं है कि यह उन्हें कैसे प्राप्त कर रहा है, हम सिर्फ उन्हें डेटा स्रोत से प्राप्त करना चाहते हैं।

  • FetchBooks ()

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

  • FindBooks ()

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

  • LoadBooks ()

ये पुस्तकें किसी प्रकार के "इलेक्ट्रॉनिक बुक बैग" से संबंधित हैं और इसे इसमें लोड किया जाना चाहिए। उन्हें खोने से रोकने के लिए लोड करने के बाद ZipClosed () को कॉल करना सुनिश्चित करें।

  • RetrieveBooks ()

मेरे पास कुछ नही है।


1
स्वीकृत उत्तर "पाने" और "लाने" के साथ-साथ इस उत्तर के बीच अच्छी तरह से अंतर नहीं करता था। फ़ेच का अर्थ है कि इसे किसी और के द्वारा किया जाना है क्योंकि इसे पूरा करने में कुछ समय लगेगा या कुछ विशेषज्ञता की आवश्यकता होगी, जबकि इसका अर्थ है कि यह तात्कालिक और उपलब्ध शब्दशः या "शेल्फ से दूर" है।
श्रीधर सरनोबत

मुझे भी आज स्वीकृत उत्तर से परेशानी हो रही है। मेरी परियोजना (प्रतिक्रिया / Redux- आधारित) के लिए, मेरा मानना ​​है कि Redux स्टोर बनाम ऐप के डेटाबेस बनाम किसी तृतीय पक्ष API से खींचे जा रहे डेटा के बीच अंतर करना महत्वपूर्ण है। यह अधिकार प्राप्त करना निश्चित रूप से भविष्य में पठनीयता के साथ मदद करेगा। addदोनों के लिए उपयोग किए जाने वाले मूल डेवलपर डेटाबेस में लिखते हैं और स्टोर को लिखते हैं। अब मैं उन लोगों को अलग करने की कोशिश कर रहा हूं, और यह एक दर्द है।
टिमरोहेर

9

इसका उत्तर सिर्फ इतना है कि आप जिस चीज के साथ सहज हैं और जिसमें निरंतरता हो।

यदि आपके पास एक बार्न्स और रईस वेबसाइट है और आप GetBooks () का उपयोग करते हैं, तो यदि आपके पास मूवी एंटिटी GetMovies () जैसी कोई अन्य वस्तु है। तो जो कुछ भी आप और आपकी टीम को पसंद है और एकरूप हो।


22
कम से कम आप गलत वर्तनी में संगत हैं। ;-)
विले होलेब्रांड्स


बिल्कुल भी नाराज नहीं ... शुक्रिया अदा करने के लिए।
जेसन

2

OO (C ++ / Java) में मैं getSomething और setSomething का उपयोग करता हूं क्योंकि बहुत बार अगर हमेशा नहीं होता है तो मुझे उस डेटा ऑब्जेक्ट का प्रतिनिधित्व करने वाले वर्ग से एक निजी विशेषता मिल रही है या इसे सेट करना है - गेट्टर / सेटर जोड़ी। एक प्लस के रूप में, ग्रहण उन्हें आपके लिए उत्पन्न करता है।

मैं लोड का उपयोग केवल तभी करता हूं जब मेरा मतलब फाइलों से होता है - जैसा कि "मेमोरी में लोड" होता है और इसका मतलब है कि आमतौर पर आदिम, संरचना (C) या ऑब्जेक्ट में लोड करना। मैं वेब के लिए भेजें / प्राप्त करता हूं।

जैसा कि ऊपर कहा गया है, स्थिरता सब कुछ है और इसमें क्रॉस-डेवलपर्स शामिल हैं।


1

यह स्पष्ट नहीं है कि "डेटा प्राप्त करने" के लिए आपका क्या मतलब है। डेटाबेस से? एक पंक्ति? स्मृति?

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

इस प्रकार, जब मैं "fetchBooks" देखता हूं, जब तक कि संदर्भ बहुत स्पष्ट न हो (उदाहरण के लिए, BookFetcherFromDatabase नाम का एक वर्ग), यह अस्पष्ट है। कहाँ से लाएँ? लाने और खोजने के बीच क्या अंतर है? आप इस समस्या का भी समाधान कर रहे हैं कि कुछ डेवलपर्स शब्दार्थ को कुछ कीवर्ड के साथ जोड़ देंगे। उदाहरण के लिए, डेटाबेस (या मेमोरी) बनाम लोड (फाइल से) या डाउनलोड (वेब ​​से) के लिए प्राप्त करें।

मैं इसके बजाय "fetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection", इत्यादि कुछ देखूंगा। यह कम दृष्टिगोचर होता है, लेकिन एक बार जब आप लंबाई से अधिक हो जाते हैं, तो यह स्पष्ट है। इसे पढ़ने वाले सभी को तुरंत वही मिलेगा जो आप करना चाह रहे हैं।


4
FetchBooksFromDatabase के साथ समस्या यह है कि जब आप फ़ैक्टर / सामान्यीकरण और fetchBooks करना चाहते हैं, तो XML से डेटा के कुछ पुलिंग हो सकते हैं। मुझे भी बहुत पसंद है, लेकिन आप तब अपने आप को अलग-अलग फ़ंक्शन नामों में समान कार्यक्षमता से अलग पाते हैं । और वह साहब शांत नहीं हैं!
19

मुझे लगता है कि गेट बनाम फाइंड के बीच का अंतर स्पष्ट है, लेकिन मुझे गेट बनाम फेच के बारे में आश्चर्य है। नरक..इसमें कोई अंतर है?
जेसन

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

7
@ जैसन: क्योंकि "गेटर्स" इतने सर्वव्यापी हैं (और जावाबीन जैसे फ्रेमवर्क का हिस्सा हैं), कई प्रोग्रामर उन्हें डेटा क्षेत्र तक पहुंचने के लगभग-पारदर्शी साधन के रूप में सोचते हैं। दूसरी ओर, "Fetch", कुछ प्रोग्रामर्स को अधिक लंबी पहुंच का संकेत देता है, जिसमें एक स्थान से दूसरे स्थान पर डेटा का स्थानांतरण (ए-ला सीपीयू लाने) या डेटाबेस लाना शामिल है। उदाहरण के लिए, हाइबरनेट की क्वेरी भाषा में एक फ़ेच निर्माण है। डेवलपर्स अक्सर प्रलेखन पढ़ने के बजाय नाम की अपनी अपेक्षाओं के आधार पर विधियों का उपयोग करते हैं ताकि गलत संकेत भेजने से बचना महत्वपूर्ण हो।
उड़ी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.