तरीकों की तरह कारखाने का नाम कैसे करें?


146

मुझे लगता है कि ज्यादातर कारखाने जैसी विधियां शुरू होती हैं create। लेकिन उन्हें " सृजन " क्यों कहा जाता है ? क्यों नहीं " बनाने ", " उत्पादन ", " निर्माण ", " उत्पन्न " या कुछ और? क्या यह केवल स्वाद की बात है? एक सम्मेलन? या "बनाने" में एक विशेष अर्थ है?

createURI(...) 
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)

आप सामान्य रूप से किसे चुनेंगे और क्यों?


4
मैंने एक बार परियोजना पर काम किया था जो कारखाने के तरीकों को "मिलता है (") नाम देता है। पहली बार में बहुत भ्रमित।
Muxecoid

4
और अंतिम विकल्प, कोई उपसर्ग के बारे में कैसे? चूंकि हम लगभग हमेशा स्थैतिक संदर्भ से कारखानों का उपयोग कर रहे हैं, क्या यह स्पष्ट नहीं होना चाहिए? बस कुछ चर्चा को प्रोत्साहित करने के लिए कह रहा हूं - मेरी व्यक्तिगत प्राथमिकता है createXyz()
वाइकिंगस्टीवेट

@vikingsteve मैंने जो सिस्टम बनाया था, उसमें मैंने createउपसर्ग का इस्तेमाल एपीआई कंसिस्टेंसी की खातिर कन्वेंशन के मामले के रूप में किया था और इसलिए भी कि सिर्फ चिट्ठी टाइप cकरने से उन सभी को आईडीई के ऑटो-कम्प्लीट में दिखाया जाएगा, जो आसान हो जाएगा। जो उपलब्ध है उसे सीखने की कोशिश करने वाले किसी व्यक्ति के लिए। मैं हो सकता था Matrix4f.identity(), Matrix4f.transpose()आदि आदि, लेकिन वे के रूप में खोजने के लिए तेज हो जाएगा Matrix4f.createIdentity()और Matrix4f.createTranspose(...)आदि
code_dredd

जवाबों:


117

कुछ यादृच्छिक विचार:

  • 'क्रिएट' फीचर को अन्य शब्दों से बेहतर बनाता है। अगला सबसे अच्छा शब्द जो मैं सोच सकता हूं कि मेरे सिर के ऊपर 'कंस्ट्रक्ट' है। अतीत में, 'एलोक' (आवंटित) का उपयोग समान स्थितियों में किया गया हो सकता है, सी जैसी भाषाओं में वस्तुओं की तुलना में डेटा के ब्लॉक पर अधिक जोर।

  • 'क्रिएट' एक छोटा, सरल शब्द है जिसका स्पष्ट सहज अर्थ है। ज्यादातर मामलों में लोग शायद इसे पहले, सबसे स्पष्ट शब्द के रूप में लेते हैं जो किसी चीज को बनाने की इच्छा होने पर मन में आता है। यह एक सामान्य नामकरण सम्मेलन है, और "ऑब्जेक्ट क्रिएशन" वस्तुओं के निर्माण की प्रक्रिया का वर्णन करने का एक सामान्य तरीका है।

  • 'निर्माण' करीब है, लेकिन आमतौर पर इसका उपयोग किसी वस्तु के निर्माण की प्रक्रिया में एक विशिष्ट चरण का वर्णन करने के लिए किया जाता है (आवंटित / नया, निर्माण, आरंभ ...)

  • 'बिल्ड' और 'मेक' कोड संकलन से संबंधित प्रक्रियाओं के लिए सामान्य शब्द हैं, इसलिए प्रोग्रामर के लिए अलग-अलग अर्थ होते हैं, एक प्रक्रिया को लागू करना जिसमें कई चरण होते हैं और संभवतः बहुत सारी डिस्क गतिविधि होती है। हालांकि, एक फैक्ट्री "बिल्डिंग" का विचार एक समझदार विचार है - विशेष रूप से ऐसे मामलों में जहां एक जटिल डेटा-संरचना का निर्माण होता है, या कई अलग-अलग जानकारी के टुकड़े किसी तरह संयुक्त होते हैं।

  • मेरे लिए 'जनरेट' से तात्पर्य एक गणना से है, जिसका उपयोग इनपुट से मान उत्पन्न करने के लिए किया जाता है, जैसे कि हैश कोड या रैंडम नंबर उत्पन्न करना।

  • Gener प्रोड्यूस ’, ate जनरेट’, are कंस्ट्रक्ट ’को 'क्रिएट’ की तुलना में टाइप / पढ़ना अधिक लंबा लगता है। टाइपिंग / रीडिंग को कम करने के लिए ऐतिहासिक रूप से प्रोग्रामर्स ने छोटे नामों का समर्थन किया है।


5
"क्रिएट" के लिए अंगूठे
पिम्ब्राउवर्स

103

"प्रभावी जावा" में जोशुआ बलोच निम्नलिखित नामकरण सम्मेलनों का सुझाव देता है

valueOf - एक ऐसा उदाहरण देता है, जो कि शिथिल रूप से बोलता है, इसके मापदंडों के समान मूल्य। ऐसे स्थैतिक कारखाने प्रभावी रूप से रूपांतरण के तरीके हैं।

का - (32 आइटम) valueOfद्वारा लोकप्रिय, एक संक्षिप्त विकल्प EnumSet

getInstance - एक ऐसा उदाहरण देता है जिसे मापदंडों द्वारा वर्णित किया जाता है लेकिन इसे समान मान नहीं कहा जा सकता है। एक सिंगलटन के मामले में, getInstanceकोई पैरामीटर नहीं लेता है और एकमात्र उदाहरण देता है।

newInstance - जैसे getInstanceकि, यह newInstanceगारंटी देता है कि लौटाया गया प्रत्येक उदाहरण अन्य सभी से अलग है।

get type - लाइक करें getInstance, लेकिन जब फैक्ट्री मेथड अलग क्लास में हो तो इस्तेमाल किया जाता है। प्रकार फ़ैक्टरी विधि द्वारा लौटाए गए ऑब्जेक्ट के प्रकार को इंगित करता है।

नए प्रकार - जैसे newInstance, लेकिन इसका उपयोग तब किया जाता है जब कारखाना विधि एक अलग वर्ग में होती है। प्रकार फ़ैक्टरी विधि द्वारा लौटाए गए ऑब्जेक्ट के प्रकार को इंगित करता है।


आप कैसे रेट करेंगे from? जैसे एक काल्पनिक Id.of("abc")बनाम Id.from("xyz")… या fromअधिक तर्क होने का सुझाव देंगे (यानी इनपुट के पार्सिंग, लुकअप / सहसंबंध / अन्य डेटा के साथ…)? "बनाम से": डी
नाइटल

22

मैं उन दो बिंदुओं को जोड़ना चाहता था जिन्हें मैं अन्य उत्तरों में नहीं देखता।

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

  2. अमरूद कारखाने के नामकरण विचारों का एक अच्छा भंडार है। यह एक अच्छी डीएसएल शैली को लोकप्रिय बना रहा है। उदाहरण:

    Lists.newArrayListWithCapacity(100);
    ImmutableList.of("Hello", "World");
    

1
आप सही कह रहे हैं, अमरूद बहुत पठनीय कोड वाली एक बेहतरीन लाइब्रेरी है।
बहमन

11

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

"बिल्ड" से बचें क्योंकि यह बिल्डर पैटर्न के साथ बेहतर रूप से फिट बैठता है और "प्रोडक्शन" से बचता है क्योंकि यह निर्माता / उपभोक्ता को उत्तेजित करता है।

वास्तव में पैटर्न के लिए "फैक्टरी" नाम के रूपक को जारी रखने के लिए, मुझे "निर्माण" द्वारा लुभाया जाएगा, लेकिन यह बहुत लंबा शब्द है।


3

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


3

मुझे नया पसंद है। मुझे सम

var foo = newFoo();

से बेहतर पढ़ता है

var foo = createFoo();

हमारे पास अंग्रेजी में अनुवादित फू एक नया फू है या फू का सृजन फू है। जबकि मैं ग्रामर विशेषज्ञ नहीं हूं, मुझे पूरा यकीन है कि बाद वाला व्याकरणिक रूप से गलत है।


वे दोनों काम करते हैं। createFooएक समारोह है। fooजैसा createFooकि आप कहते हैं, नहीं है । fooका परिणाम है createFoo()
क्रिज़ीस्तोफ़ Czelusniak

2

आंशिक रूप से सम्मेलन, आंशिक रूप से शब्दार्थ।

कारखाने के तरीकों (पारंपरिक द्वारा संकेतित create) को उपयुक्त निर्माणकर्ताओं को आमंत्रित करना चाहिए। अगर मैंने देखा buildURI, तो मुझे लगता है कि इसमें कुछ संगणना, या भागों से विधानसभा शामिल है (और मुझे नहीं लगेगा कि इसमें कोई कारखाना शामिल था)। पहली चीज जो मैंने सोची थी, जब मैंने देखा generateURIकि वह कुछ यादृच्छिक बना रही है, जैसे एक नया वैयक्तिकृत डाउनलोड लिंक। वे सभी समान नहीं हैं, अलग-अलग शब्द अलग-अलग अर्थ निकालते हैं; लेकिन उनमें से ज्यादातर पारंपरिक नहीं हैं।


1

मैं इसे फोन करता हूँ UriFactory.Create()

कहाँ पे,

UriFactoryवर्ग प्रकार का नाम है जो प्रदान करता है विधि (s) जो Uriउदाहरणों का निर्माण करती है ।

और Create()विधि आपके स्पेक्स में जितनी विविधताएँ हैं, उतने ही ओवरलोडेड हैं।

public static class UriFactory
{
    //Default Creator
    public static UriType Create() 
    {
    }

    //An overload for Create()
    public static UriType Create(someArgs) 
    {
    }
}

1
जबकि मैं आपके नामकरण से सहमत हूं, मैं पास्कल-केसिड विधि नामों का उपयोग करने पर आपके सम्मेलन से दृढ़ता से असहमत हूं।
चातुर्माता

2
@ लेविथलॉन यह हमेशा प्रोग्रामिंग भाषा और आंतरिक सम्मेलनों पर निर्भर करता है। पास्कल केस लैंगगेज जैसे C # के लिए पूरी तरह से ठीक है।
मोमो

@ मैं वास्तव में, मुझे लगता है कि मुझे जिस भाषा के बारे में बात की जा रही है, वह जावा है।
चतुर्मास

0

मुझे लगता है कि मैंने सभी क्रियाओं को देखा है, लेकिन कुछ पुस्तकालय या अन्य में उपयोग में लाता हूं, इसलिए मैं एक सार्वभौमिक सम्मेलन नहीं बनाऊंगा।

अब, मेरे लिए बेहतर ध्वनि बनाएं, कार्रवाई के सटीक अर्थ को स्पष्ट करता है।

तो हाँ, यह (साहित्यिक) स्वाद की बात है।


0

व्यक्तिगत रूप से मुझे पसंद है instantiateऔर instantiateWith, लेकिन यह सिर्फ मेरी एकता और उद्देश्य सी अनुभवों के कारण है। यूनिटी इंजन के अंदर नामकरण परंपराएं instantiateफैक्ट्री पद्धति के माध्यम से एक उदाहरण बनाने के लिए शब्द के चारों ओर घूमती हैं , और उद्देश्य सी यह withइंगित करना पसंद करते हैं कि पैरामीटर / एस क्या हैं। यह तभी सही मायने में काम करता है, जब यह विधि उस वर्ग में हो, जो तुरंत होने वाला है (और ऐसी भाषाओं में जो कंस्ट्रक्टर को ओवरलोडिंग की अनुमति देता है, यह इतना 'काम' नहीं है)।

बस सादे पुराने उद्देश्य सी initWithभी एक अच्छा है!


-3

फैक्टरी विधि विधि के नाम पर निर्देशित नहीं करती है। आपके पास अपने कारखाने में जितनी विधियाँ हैं, उतने तरीके हो सकते हैं, बशर्ते सभी एक ही परिवार से वस्तु वापस लौटाएँ।

अधिक जानकारी के लिए, url http://xeon2k.wordpress.com पर जाएं


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