क्या प्रॉपर्टी सेटर में तर्क जोड़ना एक बुरा व्यवहार माना जाता है?


28

मैं एक परियोजना में कूद गया और मैं देखता हूं कि अन्य डेवलपर्स संश्लेषित गुणों के निपटान में बहुत सारे तर्क जोड़ रहे हैं। मैं समझता हूं कि यह कैसे काम करता है, लेकिन मुझे लगता है कि इससे कार्यक्रम के प्रवाह को समझना मुश्किल हो जाता है; कोड को पढ़ते समय, जब भी मैं देखता self.something = whateverहूं, मैं हमेशा जांचता हूं कि क्या somethingसेटर ओवरराइड है।

इस विषय पर आपकी क्या राय है? क्या आपको लगता है कि यह खराब वास्तुकला या विस्तृत समाधान का संकेत है?

मुझे इस पर और अधिक पढ़ने में खुशी होगी यदि आपके पास प्रासंगिक लिंक / स्रोत हैं, तो अच्छा Google परिणाम प्राप्त करना बहुत कठिन है इसलिए मैंने यहां भी पूछने का फैसला किया।

किसी भी उत्तर के लिए धन्यवाद और कृपया ध्यान दें कि मैं उद्देश्य सी के बारे में बात कर रहा हूं यदि आपने टैग नहीं देखा है (भले ही यह एक भाषा विशिष्ट मुद्दा नहीं होना चाहिए)।


5
किस तरह का तर्क? उदाहरण के लिए, सत्यापन तर्क देने में कुछ भी गलत नहीं है। दूसरी ओर, एक सेटर जो कुछ घटनाओं को भेजता है, एक वेब सेवा को कॉल करता है और अपडेट करता है कि UI पूरी तरह से गलत है।
आर्सेनी मूरज़ेंको

@ मेनमा मैं सहमत हूं कि मान्यताएँ ठीक हैं - शायद कुछ पर्यवेक्षकों को भी जोड़ रहे हैं, है ना? क्या आप शायद कुछ उदाहरण दे सकते हैं कि आप एक सेटर में क्या अधिक उपयुक्त मानते हैं?
फि

वास्तव में, पर्यवेक्षक सही हैं। चीजों के लिए जो एक सेटर के लिए उपयुक्त हैं, मैं अधिक अनुभवी डेवलपर्स को इस प्रश्न का उत्तर देने देता हूं।
आर्सेनी मूरज़ेंको 22

जवाबों:


44

क्या प्रॉपर्टी सेटर में तर्क जोड़ना एक बुरा व्यवहार माना जाता है?

नहीं

क्लास डिज़ाइनरों को फील्ड एक्सेस और असाइनमेंट के सुविधाजनक इंटरफ़ेस से जुड़े तर्क रखने की अनुमति देने के लिए गुणों का आविष्कार किया गया था।

कितना होने पर बहुत ज्यादा होगा? यह वर्ग की जिम्मेदारियों पर निर्भर करता है। यहाँ कुछ चीजें हैं जो एक संपत्ति सेटर में रखना उचित है:

  • कुछ व्युत्पन्न मूल्यों को अद्यतन करें
  • पर्यवेक्षकों को सूचित करें कि कक्षा की स्थिति बदल गई है
  • कुछ निहित वस्तु में परिवर्तन का प्रचार करें
  • एक बैकिंग स्टोर में परिवर्तन का प्रचार करें
  • सत्यापन करें

प्रोग्रामिंग आसान है जब कक्षाओं में इंटरफेस होता है जो यह स्पष्ट करता है कि वर्ग क्या कर सकता है, बिना कॉल करने वाले यह सोचते हैं कि यह कैसे किया जा रहा है। संपत्ति बसने वालों के पीछे तर्क रखने से कक्षाएं सरल कार्यान्वयन के पीछे अपने कार्यान्वयन को छिपाने की अनुमति देती हैं। कुछ वर्गों के लिए, किसी भी तरीके की आवश्यकता नहीं है। बस गुण सेट करके knobs को चालू करें और गुण प्राप्त करके आउटपुट पढ़ें।


13
सत्यापन करें ...
रॉबर्ट हार्वे

सेटर ओवरराइड विधि में संग्रह या टेबलव्यू को पुनः लोड करना कितना अच्छा है?
कृष्णन

15

सेटर्स का उपयोग आम तौर पर किसी महत्वपूर्ण साइड इफेक्ट या भारी गणना के साथ किसी वस्तु की स्थिति को बदलने के लिए किया जाता है; उसके लिए तरीकों और कार्यों का उपयोग करें। सेटर कार्यान्वयन का प्राथमिक कारण एक वैध स्थिति को बदलना और बनाए रखना है । तो, सीमा को सीमित करना, पुनर्गणना का अनुरोध करने के लिए झंडे स्थापित करना, या संबंधित गुणों को समायोजित करना बिल्कुल ठीक है।


7

मैं उद्देश्य C के बारे में नहीं जानता, लेकिन जैसा कि आप कहते हैं, यह किसी भी OO भाषा के लिए एक सामान्य प्रश्न है। सबसे पहले और वास्तव में इससे संबंधित है, चाहे पहली जगह में बसने और पाने के लिए चर्चा का विषय है (कुछ मामलों में उनके अस्तित्व को एक ढांचे या पुस्तकालय के उपयोग द्वारा उचित ठहराया जाता है)।

मेरा मानना ​​है कि विधि के नाम को यह स्पष्ट करना चाहिए कि विधि क्या करती है और सभी विधि क्या करती है। इसके अतिरिक्त उस विधि से जुड़े प्रलेखन को और अधिक स्पष्ट तरीके से वर्णन करना चाहिए। इस अर्थ में, "सेट" + {संज्ञा} के रूप में एक विधि का नाम किसी चर के मूल्य को सेट करने के अलावा कोई दुष्प्रभाव नहीं होना चाहिए और यह केवल इससे जुड़ी कार्रवाई होनी चाहिए। यह जाँचना कि तर्क मान्य है, स्वीकार्य है लेकिन इसका प्रलेखन में वर्णन किया जाना चाहिए।


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