ओवरलोडेड विधियों पर विभिन्न रिटर्न प्रकारों को वापस करने पर कोई सर्वोत्तम प्रथा है? उदाहरण के लिए यदि मेरे पास मेरे डीएएल में लोड विधि है, तो मैं या तो एक आइटम या वस्तुओं का एक गुच्छा लोड करना चाहता हूं। मुझे पता है कि मैं दृष्टिकोण के एक नंबर इस्तेमाल कर सकते हैं:क्या मुझे ओवरलोडेड विधियों पर विभिन्न रिटर्न प्रकारों का उपयोग करना चाहिए?
लोड एक वस्तु
MyBusinessObject LoadOne(int id)
{
}
लोड से अधिक ऑब्जेक्ट
MyBusinessObject[] LoadMany(params int[] ids)
{
}
अब कुछ मैं जानता हूँ कि मैं कर सकते हैं कर एक विधि ओवरलोड है और विभिन्न वापसी प्रकार हैं। इसलिए जैसा:
MyBusinessObject Load(int id)
{
}
और
MyBusinessObject[] Load(params int[] ids)
{
}
जबकि ऐसा लगता है मुझे ऐसा करने को रोकने के लिए कुछ नहीं है, और यह एक API नजरिए से चीजों को स्वच्छ रखता है, यह एक अच्छा विचार की तरह लग रहा है? मैं कल रात भर आया और मेरा हिस्सा सोचता है कि मुझे ओवरलोडेड विधि के लिए मिलान प्रकारों को मिलान करने के कारण के लिए ऐसा नहीं करना चाहिए।
मेरे पास लोड (int आईडी) विधि भी एक संग्रह लौटा सकती है जिसमें केवल एक आइटम होता है। ऐसा लगता है कि यह कम से कम आश्चर्य के सिद्धांत का उल्लंघन करता है, हालांकि यदि आप एक आइटम लौटने की उम्मीद कर रहे हैं, तो आपको उस आइटम को वापस करना चाहिए, आपको एक आइटम वाली सूची वापस नहीं करनी चाहिए।
तो यहाँ अपने विरोधी इन विचारों को आसपास के विचार कर रहे हैं:
- अतिभारित तरीकों सब लौट जाना एक ही प्रकार के।
- यदि विधियां एक ही काम करती हैं, तो उन्हें अलग-अलग नामों का समूह न दें, उसी विधि नाम को अधिभारित करें। यह एपीआई उपयोगकर्ता के परिप्रेक्ष्य से चीजों को आसान बनाता है, उन्हें अलग-अलग तरीकों के समूह के माध्यम से ट्रैवल नहीं करना पड़ता है जो सभी अनिवार्य रूप से एक ही चीज करते हैं लेकिन विभिन्न मानकों के साथ।
- विधि के लिए सबसे स्पष्ट प्रकार लौटाएं, यानी यदि उपयोगकर्ता आइटमों के संग्रह की अपेक्षा कर रहा है, तो आइटमों का संग्रह वापस कर दें, अगर उन्हें एक आइटम की उम्मीद होने की संभावना है, तो एक आइटम लौटाएं।
तो बाद के दो विचार पहले से अधिक हैं, लेकिन साथ ही, पहला विचार एक तरह का प्रोग्रामेटिक सर्वोत्तम अभ्यास जैसा लगता है।
क्या इस अभ्यास के आसपास कोई सर्वोत्तम अभ्यास है? मुझे इस विषय पर दूसरों के विचारों को सुनने में दिलचस्पी होगी।
किसी भी मामले में कृपया किसी सरणी के बजाय 'IENumerable 'लौटने पर विचार करें। एरिक लिपर्ट के बारे में एक महान ब्लॉग पोस्ट है। परिदृश्य को हाइलाइट करने के लिए –
एक सरणी पर्याप्तताएं लौट रहा है। मैं अपने वास्तविक कोड में एक आईनेमरेबल वापस कर दूंगा। – BenAlabaster
ठीक है, ठंडा। बस जब तक आप जानते हैं। –