2013-04-24 26 views
6

मैं ऐसे फ़ंक्शन पर काम कर रहा हूं जो किसी ऑब्जेक्ट को एक कंटेनर (जैसे एक ऐरे) से मूल्य (जैसे नाम से) देता है। यदि ऑब्जेक्ट पहले से मौजूद नहीं है, तो ऑब्जेक्ट (डिफ़ॉल्ट कन्स्ट्रक्टर) की एक डिफ़ॉल्ट प्रति बनाई और लौटा दी जाती है।प्रस्तावित करें कि "प्राप्त करें/बनाएं और प्राप्त करें" फ़ंक्शन

इस तरह, यह फ़ंक्शन हमेशा एक ऑब्जेक्ट देता है, भले ही ऑब्जेक्ट फ़ंक्शन को कॉल करने से पहले मौजूद हो।

अब मेरा प्रश्न यह है: इस फ़ंक्शन को कैसे नाम दें? GetOrCreateThenGet बेवकूफ लगता है। कोई विचार?

संपादित करें: मुझे लगता है कुछ इस तरह समारोह के सार के करीब होगा: GetForSure ...

+2

मैं बस "ThenGet" – Jay

+0

छोड़ दूंगा ... जिसका अर्थ है "GetOrCreate (ButDon'tGet)" ... –

+0

नहीं, यह इस परिदृश्य के लिए एक सामान्य नामकरण सम्मेलन है, हालांकि अपूर्ण है। विधि एक वस्तु देता है; एक उदाहरण बनाने के लिए यह बहुत अजीब होगा लेकिन 'शून्य' वापस करें। – Jay

उत्तर

5

आपको getXXX() के अलावा कुछ और क्यों चाहिए? and/or का कोई भी तरीका यह है कि यह बहुत अधिक कर रहा है और चिंताओं को मिलाकर Single Responsibility Principle को गंभीरता से तोड़ रहा है।

क्या कॉलर वास्तव में परवाह करेगा यदि ऑब्जेक्ट मांग पर बनाया जा रहा है यदि अनुबंध से उन्हें जो कुछ चाहिए, वह वस्तु प्राप्त करने के लिए है?

getOrCreate का तात्पर्य है कि आप get ऑब्जेक्ट or यह created होगा लेकिन वापस नहीं आएगा।

फिर मुझे create भाग की परवाह क्यों होगी?

मैं वास्तव में देखभाल करने के लिए यह होगा getOrCreateAndGet शब्दार्थ सही है, लेकिन अत्यधिक अपरंपरागत और बहुत सी बातें और मिश्रण चिंताओं को कर रहे हैं और Single Responsiblity Principle तोड़ने की विधि के बारे में साथियों के साथ विचार-विमर्श करने के लिए प्रवण माना जाता रहा है? सिर्फ इसलिए कि अन्य लोग चीजें का नाम देते हैं और गैर-संवेदी यह गलत करने का अच्छा बहाना नहीं है।

+7

GetOrCreate के साथ प्राप्त नहीं है, क्योंकि राज्य में वांछित आइटम मौजूद नहीं हो सकता है। मैं अप्सर्ट के साथ समानता से गेट्सर्ट का प्रस्ताव करता हूं। – garkin

-1

GetGuaranteed सभी फोन करने वाले के लिए ज़रूरी है कवर करने के लिए लगता है ...

2

फ़ंक्शन के लिए सबसे उपयुक्त उपयुक्त नाम "प्रदान करें" जैसे कि आप सामान प्रदान करते हैं, आप इसे गोदाम से भेज सकते हैं या एक नया बना सकते हैं और फिर वितरित कर सकते हैं।

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