2010-08-08 12 views

उत्तर

17

मेरे दिशा निर्देशों हमेशा सबसे बाहर विशिष्ट, और में सबसे अधिक सामान्य हो गया है।

अधिक सामान्य अपने डेटा प्रकार है, कम कोड यह डेटा प्रकार के बारे में जानता का उपयोग करता है। उदाहरण के लिए, यदि कोई विधि संग्रह संग्रहित करती है, तो मैं नव निर्मित संग्रह को वापस कर दूंगा। यदि यह एक आंतरिक डेटा संरचना देता है, तो मैं इसे IEnumerable<T> तक टक्कर दूंगा।

हालांकि, अगर यह एक सरणी देता है, या List<T> क्योंकि यह आंतरिक रूप से बनाया गया है, तो आपके डेटा को पकड़ने वाले कोड को अब आपके संग्रह पर अधिक कार्यक्षमता तक पहुंच है।

स्पेक्ट्रम का दूसरा छोर, सबसे सामान्य (सीमाओं के भीतर) डेटा प्रकार को वापस करने के लिए इसका मतलब यह होगा कि आप हमेशा IEnumerable<T> या सभी संग्रहों के लिए समान वापस आते हैं, भले ही विधि ने आंतरिक रूप से एक नई सरणी बनाई और उसे वापस कर दिया हो। कॉलिंग कोड को अब संग्रह की सामग्री को मैन्युअल रूप से एक नई सरणी या सूची में कॉपी करना होगा, अगर कॉलिंग कोड का उपयोग करने की आवश्यकता है।

इसका मतलब अधिक है, और ज्यादातर मामलों में, अनावश्यक काम।

इनपुट के लिए, मैं सबसे सामान्य प्रकार के लिए उपयोग कर सकता हूं, इसलिए संग्रह के लिए, जब तक कि मुझे विशेष रूप से किसी सरणी या सूची या समान की आवश्यकता न हो, मैं IEnumerable<T> स्वीकार करूंगा। ऐसा करके, मैं सुनिश्चित करता हूं कि कॉलिंग कोड के पास कम काम है। इसका मतलब यह हो सकता है कि मुझे आंतरिक रूप से कुछ काम करना है, इसलिए यह एक व्यापार-बंद है।

महत्वपूर्ण हिस्सा संतुलन तक पहुंचना है। हर समय, हर समय बहुत सामान्य या बहुत विशिष्ट मत बनो। सही प्रकार को चित्रित करें जो समझ में आता है और विचार करें कि कोड को पास करने या आपके कोड से आउटगोइंग डेटा स्वीकार करने के लिए कॉलिंग कोड को क्या करना है। कम काम, बेहतर।

2

आम तौर पर मैं अधिक सामान्य प्रकार के लिए जाऊंगा। इस तरह मैं किसी भी ग्राहक को तोड़ नहीं दूंगा जो रिटर्न प्रकार के बारे में जानकारी का उपयोग कर सकता है।

यदि मैं एक और सामान्य प्रकार देता हूं, तो कार्रवाई विधि के कार्यान्वयन में मैं हमेशा प्रकार को कुछ अलग कर सकता हूं। निम्नलिखित परिदृश्य पर विचार करें: आप एक कस्टम एक्शन परिणाम वापस करते हैं जो ActionResult से प्राप्त होता है। कहीं आपके कोड बेस में कुछ ऐसा लगता है कि वापसी मूल्य MyCustomActionResult है। उस स्थिति में यदि आपने वापसी मूल्य बदल दिया है तो आप क्लाइंट कोड तोड़ देंगे।

बीटीडब्लू: मैं वही करता हूं - सबसे उचित सामान्य प्रकार लौटा रहा हूं - सभी विधियों के लिए न केवल कार्य विधियों के लिए।

संपादित करें: कृपया ध्यान दें कि इसका मतलब यह नहीं है कि मैं object वापस कर दूंगा। चुनौती उस प्रकार को ढूंढना है जो "सबसे उपयुक्त" अमूर्तता का प्रतिनिधित्व करती है।

+1

तो आप सबकुछ से 'ऑब्जेक्ट' वापस कर देते हैं? – Timwi

+1

निश्चित रूप से नहीं। जाहिर है, मैंने अपने जवाब में यह स्पष्ट करने का प्रबंधन नहीं किया था। मैं इसे स्पष्ट करूंगा। – Manfred

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