2013-11-25 8 views
10

क्या कोड की रेखाओं के संदर्भ में 'गेट' के आकार की दिशा में कोई दिशानिर्देश या सामान्य सहमति है? मेरे पास ऐसे सदस्य पर एक गेट विधि है जो यहां कोड की 30 लाइनों तक आसानी से उगाई गई है। मुझे यकीन नहीं है कि इस बिंदु पर इसे किस बिंदु पर खींचा जाना चाहिए। लेकिन फिर मैं इसे केवल GetMyString की तरह कुछ कहूंगा और किसी अन्य सदस्य को मान असाइन कर रहा हूं और उसे कन्स्ट्रक्टर में वैसे भी कॉल कर रहा हूं।गेट विधि का आकार

क्या यह कभी भी ऐसा करने लायक है?

क्या यह एसओ के लिए भी व्यक्तिपरक है?

+0

मुझे गुणों के लिए एक विशिष्ट दिशानिर्देश के बारे में पता नहीं है, लेकिन कई सर्वोत्तम कोडिंग प्रथाएं एक विधि में लाइनों की पसंदीदा मात्रा के रूप में 7-10 लाइनों का उपयोग करती हैं। –

+3

आपका गेटर क्या कर रहा है? –

+0

अच्छा सवाल। गेटर का उपयोग उस वर्ग में किया जाता है जिसमें निम्न आलेख के समान कार्यक्षमता शामिल होती है: http://umerpasha.wordpress.com/2013/06/13/c-code-to-get-latest-tweets-using-twitter-api- 1-1/आपको वहां बहुत सारे डंक दिखाई देंगे (उदाहरण के लिए बेसस्ट्रिंग) जिसे कक्षा के अन्य सदस्यों (उदाहरण के लिए सभी ओथ टोकन) से बनाया जा सकता है। –

उत्तर

15

dcastro का जवाब अच्छा है, लेकिन कुछ विस्तार इस्तेमाल कर सकते हैं:

  • यह अधिक समय नहीं लगता

कि मात्रा निर्धारित नहीं कर रहा है वापस जाने के लिए; आइए इसे मापें। एक संपत्ति को एक क्षेत्र लाने के लिए दस गुना लंबा कहना चाहिए, उससे अधिक नहीं लेना चाहिए।

  • यह बाह्य संसाधनों से कनेक्ट नहीं करता है (डेटाबेस, सेवाओं, आदि)

उन धीमी गति से कर रहे हैं और इसलिए आम तौर पर पहला नियम के अंतर्गत आते हैं, लेकिन इसके लिए एक दूसरा पहलू है: विफलता चाहिए दुर्लभ या असंभव हो। संपत्ति प्राप्तकर्ताओं को अपवाद नहीं फेंकना चाहिए।

  • यह कोई साइड इफेक्ट

मैं नमूदार साइड इफेक्ट है कि स्पष्ट होता नहीं है। संपत्ति प्राप्तकर्ताओं के पास अक्सर दुष्प्रभाव होता है कि वे एक बार संपत्ति की गणना करते हैं और इसे बाद में कैश करते हैं, लेकिन यह एक अवलोकन दुष्प्रभाव नहीं है।

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

+0

एरिक में चिमिंग के लिए धन्यवाद! मैं मात्रा का एक बड़ा प्रशंसक नहीं हूँ; मुझे लगता है कि "इसे नियमित डेटा एक्सेस से ज्यादा समय नहीं लेना चाहिए" एक अच्छा नुस्खा है। ऐसा कोई नहीं है कि वास्तव में यह मापने में कितना समय लगेगा। बाकी सब कुछ के बारे में - पर स्पॉट! +1 – dcastro

+1

@ डैड्रो: निश्चित रूप से, यह एक कठिन और तेज़ नियम नहीं है बल्कि यह एक सामान्य दिशानिर्देश है कि आप कितनी धीमी गति से जानते हैं। एक और तरीका रखें: आपको अपने आंतरिक पाश में किसी संपत्ति तक पहुंचने के बारे में चिंता करने की ज़रूरत नहीं है। –

+0

यह निश्चित रूप से इसे रखने का एक अच्छा तरीका है! – dcastro

2

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

12

यह वास्तव में आकार का नहीं है (कोई इरादा नहीं है)। यह रूप में लंबे समय

  • के रूप में यह अधिक समय नहीं लगता (, आदि डेटाबेस, सेवाओं)
  • यह बाह्य संसाधनों से कनेक्ट नहीं करता है वापस जाने के लिए
  • ऐसा नहीं एक गेटर में अपने तर्क के लिए ठीक है कोई दुष्प्रभाव नहीं है

ये उचित संपत्ति उपयोग के लिए केवल कुछ दिशानिर्देश हैं।

संपादित

उपर्युक्त दिशा-निर्देश का हिस्सा एक आदर्श: संपत्ति accessors, डेटा का उपयोग की तरह व्यवहार करना चाहिए, क्योंकि उन क्या उम्मीद है कि।

से पुस्तक प्रभावी सी # विधेयक वैगनर द्वारा:

गुण तरीकों कि डेटा की तरह बुला कोड से देखी जा सकती है कर रहे हैं। इससे आपके उपयोगकर्ताओं के सिर में कुछ उम्मीदें आती हैं। वे एक संपत्ति पहुंच देखेंगे, भले ही यह डेटा एक्सेस था। आखिरकार, ऐसा लगता है। आपकी संपत्ति एक्सेसर्स को उन उम्मीदों को तक जीना चाहिए। प्राप्तकर्ताओं को देखने योग्य पक्ष प्रभाव नहीं होना चाहिए। सेट एक्सेसर्स राज्य को संशोधित करते हैं, और उपयोगकर्ताओं को उन परिवर्तनों को देखने के लिए सक्षम होना चाहिए।

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

संपत्ति पहुंचकर्ता लंबा संगणना प्रदर्शन करना चाहिए नहीं है, या बनाने के पार आवेदन कॉल (जैसे डेटाबेस प्रश्न करने होंगे), या अन्य लंबा कार्य है कि एक संपत्ति एक्सेसर के लिए अपने प्रयोक्ता की उम्मीदों के साथ असंगत होगा है।

बोनस अल्बर्टो द्वारा: http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx

+0

वही था जो मैं लिखने वाला था। यदि आप मुझसे पूछें तो "दुष्प्रभाव" भाग सबसे महत्वपूर्ण है। –

+1

+1। अनियंत्रित रेखा सीमाएं बिल्कुल ठीक हैं - मनमानी। हमें जितना संभव हो सके छोटे से प्रयास करना चाहिए - लेकिन मनमाने ढंग से सीमा के कारण विभाजित विधियां पठनीयता में बाधा डाल सकती हैं। –

+0

मैं गुणों और विधियों के बीच चयन करने के बारे में एक अच्छा पठन जोड़ना चाहता हूं: http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx – Alberto

1

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

+1

से कुछ और करता है, मुझे विश्वास है कि विधियों को जितना संभव हो उतना छोटा होना चाहिए और कोई छोटा नहीं होना चाहिए। किसी विधि को कुछ मनमानी सीमा (एक स्क्रीन - क्या संकल्प?) के कारण किसी अन्य विधि में विभाजित करना - पठनीयता में बाधा डाल सकता है। सामान्य ज्ञान मनमानी सीमाओं से ऊपर रहता है। –

+1

किसकी स्क्रीन? :) कभी-कभी यह एक लंबी विधि है ठीक है। केवल तर्क को विधि के आकार को निर्देशित करना चाहिए। –

3

यह आवश्यक नहीं है, लेकिन अगर यह मुझे था तो यह मुझे परेशान कर देगा और मैं इसे किसी भी तरह से कोशिश करने और तोड़ने की कोशिश कर रहा हूं। एक गेटर एक विधि है जिससे पूरी चीज को 30+ लाइन विधि में खींचकर मेरी राय में समय बर्बाद हो जाएगा। मैं इसे काटने की कोशिश कर रहा था। जैसे अगर यह कुछ चेक के साथ एक लूप था, चेक को विधियों या कुछ ऐसे के रूप में निकालने के लिए।

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