2010-07-30 12 views
93

मुझे लगता है कि अधिकांश फैक्ट्री जैसी विधियां create से शुरू होती हैं। लेकिन उन्हें "create" क्यों कहा जाता है? क्यों नहीं "make", "produce", "build", "generate" या कुछ और? क्या यह केवल स्वाद का मामला है? एक सम्मेलन? या "निर्माण" में कोई विशेष अर्थ है?फैक्ट्री को विधियों जैसे नाम कैसे दें?

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

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

+3

मैंने एक बार परियोजना पर काम किया जो फैक्ट्री विधियों का नाम "प्राप्त()" करता है। पहले बहुत भ्रमित। – Muxecoid

+3

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

+0

@vikingsteve मैंने बनाया एक सिस्टम में, मैंने एपीआई * स्थिरता * के लिए सम्मेलन के मामले के रूप में 'निर्माण' उपसर्ग का उपयोग किया और यह भी कि 'अक्षर' अक्षर टाइप करने से आईडीई के सभी में दिखाई देगी स्वतः पूर्ण, जो किसी के लिए उपलब्ध होने के बारे में जानने के लिए आसान बनाता है। मैं 'Matrix4f.identity()', 'Matrix4f था।ट्रांसपोज़() ', इत्यादि। लेकिन वे 'Matrix4f.createIdentity()' और' Matrix4f.createTranspose (...) ', आदि – ray

उत्तर

75

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

  • 'निर्मित करें' सुविधा अधिकांश अन्य शब्दों से बेहतर फिट बैठता है। अगले सिर का सबसे अच्छा शब्द मैं अपने सिर के ऊपर से सोच सकता हूं 'कन्स्ट्रक्ट' है। अतीत, 'alloc' में (आवंटित) इसी तरह की परिस्थितियों में इस्तेमाल किया गया हो सकता है, अधिक से अधिक सी

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

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

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

  • 'जेनरेट' मुझे एक गणना का तात्पर्य है जिसका उपयोग किसी इनपुट से मूल्य उत्पन्न करने के लिए किया जाता है, जैसे हैश कोड या यादृच्छिक संख्या उत्पन्न करना।

  • 'उत्पाद', 'जेनरेट', 'कन्स्ट्रक्ट' 'बनाएं' से टाइप/पढ़ने के लिए लंबा है। ऐतिहासिक रूप से प्रोग्रामर ने टाइपिंग/रीडिंग को कम करने के लिए छोटे नामों का पक्ष लिया है।

+1

" बनाएं " – pimbrouwers

2

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

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

2

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

कहाँ,

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

और Create() विधि आपके चश्मे में जितनी भिन्नताएं हैं, उनके लिए विधि अधिभारित है।

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

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

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

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

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

7

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

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

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

-2

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

अधिक जानकारी के लिए यूआरएल http://xeon2k.wordpress.com

+3

लिंक के लिए अंगूठे को समझने में तेज़ नहीं होंगे, अधिक विशिष्ट होना चाहिए। – brunsgaard

15

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

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

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

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

आप सही हैं, गुवा बहुत पठनीय कोड वाला एक महान पुस्तकालय है। – deamon

3

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

60

Joshua Bloch "प्रभावी जावा" suggests the following naming conventions

valueOf में - एक उदाहरण है, शिथिल तौर पर, अपने पैरामीटर के रूप में एक ही मूल्य देता है। इस तरह के स्थैतिक कारखाने प्रभावी ढंग से प्रकार-रूपांतरण विधियां हैं।

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

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

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

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

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

0

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

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

1

मुझे नया पसंद है। मेरे लिए

var foo = newFoo(); 

पढ़ता है की तुलना में बेहतर

var foo = createFoo(); 

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

संबंधित मुद्दे