कोड स्वरूपण: एक वर्ग फ़ाइल के भीतर कॉल पदानुक्रम के आधार पर फ़ंक्शन करना?


10

बॉब मार्टिन के "क्लीन कोड" के एक सुझाव ने मेरे सिर को खरोंच दिया है .. "यदि एक बार फ़ंक्शन दूसरे को कॉल करता है, तो उन्हें लंबवत रूप से बंद होना चाहिए और कॉल करने वाले को कैली के ऊपर होना चाहिए"

अब तक, मैं .Net दिशानिर्देशों के करीब या कम चिपके हुए रहा हूं, जो समूह वर्ग के सदस्यों के प्रकार (गुण, स्रोत, कार्य) और दृश्यता (सार्वजनिक / विरोध / निजी) द्वारा। टिप पहली बार में परेशानी की तरह लगता है .. लेकिन यह "बस काम कर सकता है"। मुझे व्यक्तिगत रूप से ऐसे मामलों का सामना करना पड़ा है जहां मुझे यह लेआउट पसंद आया - जब आप सही कॉल श्रृंखला में होते हैं तो ड्रिल करना आसान होता है।

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

क्या किसी ने इसे विस्तारित अवधि के लिए आज़माया है?

अपडेट: एक कोड-स्निपेट जैसा लगता है क्रम में है

class SomeType()
{
  /// fields, ctors, et. all
  public void Method1()   { // calls HelperMethod1 and HelperMethod2 }
  private void HelperMethod1 { // calls HelperMethod3 }
  private void HelperMethod3 {}
  private void HelperMethod2 {}

  public void Method2 () { // and so on... }

}

2
भयावह रूप से "अंकल बॉब" बॉक्स में सबसे तेज पेंसिल नहीं है।
नील बटरवर्थ

1
विचार सिर्फ "मुझे बड़े चित्र बनाने से पहले किटी-बारीक विवरण दें"। आवश्यकतानुसार एडाप्ट करें।
रयान क्यूलपेपर

2
ईगल्स को फिर से एक साथ वापस आने के करीब होना चाहिए, क्योंकि मैं खुद को नील की टिप्पणी से सहमत पाता हूं। मैं PASCAL के साथ बड़ा हुआ और "पहले थोड़ा सामान रखो" क्योंकि PASCAL कंपाइलर को संदर्भित होने से पहले सभी आवश्यक चीजों को परिभाषित करने के लिए मजबूर किया गया था, और फॉरवर्ड घोषणाओं को आम तौर पर खारिज कर दिया गया था।
जॉन आर। स्ट्रोम

@ नील - मैं सलाह के गुण को आंकने की कोशिश कर रहा हूँ .. चाहे कोई भी हो। @ जॉन - और टिप आगे की घोषणाओं के विपरीत है .. आप पहले कॉलर को बुलाते हैं .. कॉल करने वालों के ठीक नीचे 'केली' घोषित किए जाते हैं।
गिशु

@ आर्यन - उस पैराग्राफ की प्रस्तावना इस बात पर ज़ोर देती है कि "निकट-संबंधी / सामंजस्यपूर्ण" अवधारणाएँ लंबवत रूप से एक साथ समीप होनी चाहिए [जब आप किसी चीज़ का पता लगाने की कोशिश कर रहे हों तो चारों ओर स्क्रॉल करना रोकता है]। कॉल के क्रम में कॉल करने वाले के नीचे कॉल किए गए फ़ंक्शन हैं। जोड़ा गया कोड-स्निपेट देखें
Gishu

जवाबों:


2

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

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

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


IDE के लिए +1; बेहतर IDE, कम किसी को ऐसी चीजों के बारे में चिंता करने की ज़रूरत है
user281377

1

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

(मैं अवधारणा को समझा रहा हूं, इसकी प्रभावशीलता का मूल्यांकन नहीं कर रहा हूं।)


हां, लेकिन इसका अर्थ यह होगा कि सभी सार्वजनिक कार्य एक समूह के रूप में फाइल के शीर्ष पर तैरने चाहिए। पारंपरिक दृष्टिकोण। प्रस्तावित दृष्टिकोण अलग है (या कम से कम मैं इसे कैसे पढ़ता हूं) .. प्रश्न में अपडेट देखें
Gishu

हां, वास्तव में, आपके सार्वजनिक कार्य शीर्ष पर तैरने चाहिए। बेशक कुछ भाषाओं में दृश्यता संशोधक बिल्कुल नहीं हैं ...
फ्रैंक शियरर

1

यदि विस्तारित अवधि से आप एक-दो दिनों से अधिक समय के लिए हैं? फिर नहीं,
कुछ साल पहले मैंने कुछ नए कोड पर ऐसा करना शुरू किया, और धीरे-धीरे खुद को पागल कर दिया, जब तक कि मैं रुक नहीं गया।

कक्षाएं लगाने के लिए मेरी व्यक्तिगत प्राथमिकता है

class MyClass
{
    // static fields
    // fields
    // constructors
    // properties
    // methods
} 

लेकिन यह धार्मिक नहीं है, गुण और तरीके एक साथ मिल सकते हैं। दृश्यता इसमें नहीं आती (मैं सार्वजनिक / संरक्षित / निजी द्वारा समूह नहीं करता)

हम यहाँ ऑफिस में एक आदमी है जो क्लास फाइल में सब कुछ पर एक सख्त संरचना रखता है, सब कुछ मुख्य समूहों और उप समूहों में एक साथ समूहीकृत है, सभी क्षेत्रों में अच्छी तरह से नेस्टेड है। । । मुझे मानना ​​होगा कि मुझे लगता है कि क्षेत्र शैतान के काम हैं, वे मुझे फेकिन ट्विस्ट के आसपास ड्राइव करते हैं।

हर बार जब मैं उसकी एक कक्षा खोलता हूँ तो मैं थोड़ा अंदर मर जाता हूँ :(


मैं गंध को मुखौटा करने के लिए जोड़े गए क्षेत्रों के साथ बड़ी कक्षाओं की वकालत नहीं कर रहा हूं। धार्मिक होने की कोशिश नहीं .. लेकिन एक परियोजना के भीतर एक निरंतर लेआउट होने से चीजों को गति मिलती है - यह जानना कि कहां देखना है। सार्वजनिक एपीआई के एक साथ होने के अतिरिक्त लाभ के रूप में बू दृश्यता का समूह बनाना ताकि आप अपने विशिष्ट प्रवेश बिंदु को पा सकें और वहां से नीचे ड्रिल कर सकें ...
गिशू

और कंस्ट्रक्टर? वे "विधियों" के तहत जाते हैं?
कोड़ी ग्रे

@Cody ग्रे: क्षमा याचना, भूल गया ctors!
बाइनरी वॉरियर

@ गिशु: मुझे लगता है कि आधुनिक विज़ुअलाइज़ेशन और नेविगेशन टूल ने सख्त फ़ाइल लेआउट की आवश्यकता को हटा दिया है। क्या इससे कोई फर्क पड़ता है कि कोई विधि कब लागू की जाती है जब मैं उपयोग और "परिभाषा पर जाएं" पर राइट क्लिक कर सकता हूं?
बाइनरी वॉरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.