नई System.Tuple वर्ग खराब डिजाइन का उपयोग कर रहा है?


19

मुझे System.Tuple का कॉन्सेप्ट बहुत पसंद है, यह मुझे एक नए क्लास को इंस्टेंट किए बिना एक ही फ़ंक्शन कॉल में कई मापदंडों को वापस करने की अनुमति देता है, हालांकि यह किसी भी अच्छे प्रोग्रामिंग प्रथाओं जैसे कि Microsoft पैटर्न्स और प्रैक्टिस, SOLID प्रिंसिपल्स, आदि की अवहेलना करता है।

मैं केवल यह पता लगाने की कोशिश कर रहा हूं कि मुझे इस सुविधा का उपयोग उदारता से करना चाहिए या यदि आवश्यक हो तो केवल किनारे के परिदृश्य में इसका उपयोग करना चाहिए।


+1: उत्कृष्ट प्रश्न। इसके अलावा - मुझे आश्चर्य है कि अगर एंडर्स हेजलबर्ग ने इस पर वजन किया है।
जिम जी। 20

जवाबों:


11

उपयोग करने के साथ मुद्दा यह Tupleहै कि सामान्य प्रकार के पैरामीटर का अर्थ नहीं है।

पठनीयता के लिए आप कस्टम वर्ग या नामांकित सदस्यों के साथ एक अनाम प्रकार का उपयोग करने पर विचार कर सकते हैं।


XML पैरामीटर विवरण के बारे में क्या? देखने के लिए सबसे स्पष्ट जगह नहीं है, लेकिन कुछ भी नहीं से बेहतर है।
जॉन बुब्रिस्की

@SkippyFire - आपका क्या मतलब है? आपको मिलने वाला सभी प्रकार का है T1, T2आदि आपको नहीं बताते कि उनका क्या मतलब है।
ओड

2
मुझे कहना है: हर बार जब मैंने (या हमारी टीम पर किसी ने) एक प्रकार के रूप में एक टपल का उपयोग किया है, तो मुझे याद रखने के लिए कोड में अन्य भागों का लगातार उल्लेख कर रहे हैं। item1, .Item2, आदि हैं। किसी भी चीज के लिए जो पूरी तरह से तुच्छ नहीं है, असतत कक्षाएं बनाएं। भविष्य में खुद को यह जानने का मौका दें कि आप क्या कर रहे थे।
जो

@ मैं T XML को स्वीकार करने की विधि में XML दस्तावेज़ जोड़ने की बात कर रहा हूँ । फिर से, सही नहीं है, लेकिन अगर आप चाहते हैं / Tuples का उपयोग करने की जरूरत है कुछ भी नहीं से बेहतर है।
जॉन बुब्रिस्की

1
@ इसके अलावा, पैरामीटर या रिटर्न वैल्यू का अर्थ अर्थ नहीं हो सकता है, लेकिन विधि का नाम हो सकता है। मान लीजिए कि आपके पास एक विधि है जिसे GetTopTwoPercentages()रिटर्न ए कहा जाता है Tuple<decimal, decimal>। यह काफी स्पष्ट हो सकता है।
जॉन बुब्रिस्की

8

सबसे महत्वपूर्ण कोड गुणों में से एक पठनीयता है। इसलिए अपने आप से पूछें:
जब मैं (किसी और में, लेकिन आप) विधि हस्ताक्षर पर नजर डालते हैं, तो क्या मुझे पता है कि संबंधित घटक के क्या मायने Tupleहैं?
उदाहरण के लिए यदि आप जो झांकियां लौटा रहे हैं, वह ध्रुवीय निर्देशांक का एक सेट है, क्या यह स्पष्ट है?

यह स्पष्ट है:

Tuple<Float, Float> getPolarCoords();

यह भ्रामक है (क्योंकि एक कार्टेशियन निर्देशांक मान जाएगा):

Tuple<Float, Float> getCoords();

और यह अर्थहीन है:

Tuple<Float, Float> getTuple();

इसलिए आम तौर पर, यदि आवश्यक हो तो आप प्रति मामले के आधार पर स्पष्टता और रिफ्लेक्टर का मूल्यांकन करेंगे। यदि आप एक ही तरह के डेटा का प्रतिनिधित्व करते हैं जैसा Tupleकि कई अलग-अलग जगहों पर होता है, तो निश्चित रूप से एक वर्ग बनाना एक अच्छा विचार है।

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