2010-02-08 14 views
21

When is a function too long? इस प्रश्न का एक उप-समूह है, मुझे लगता है।कक्षा कब लंबी है?

यह निर्धारित करने के लिए कि कुछ कक्षा बहुत लंबी है, कुछ अच्छे मीट्रिक क्या हैं?

मैं बाहरी ठेकेदारों के साथ एक परियोजना के लिए कोड स्वीकृति दिशानिर्देशों का एक सेट पुनः प्राप्त कर रहा हूं, और महसूस किया कि मैंने इसे अतीत में शामिल नहीं किया है, लेकिन भविष्य में इसे कवर करना चाहिए।

+0

कौन सी भाषा?मुझे लगता है कि जावा बनाम स्कैला के लिए उत्तर उदाहरण के लिए अलग है। बाद के मामले में कक्षाएं आम तौर पर (और होनी चाहिए!) कम होती हैं। –

+0

इस प्रश्न पर एक नज़र डालें - http://stackoverflow.com/questions/849557/in-c-how-many-lines-before-a-class-should-be-consider-to-be-refactored/ –

+0

निकटता से संबंधित प्रश्न: http://stackoverflow.com/questions/1086851/good-practice-class-line-count/1086865#1086865 – sleske

उत्तर

61

जब इसकी एक से अधिक ज़िम्मेदारी होती है।

मुझे बोली रॉबर्ट सी मार्टिन Clean Code यहाँ हैं:

वर्गों का पहला नियम है कि वे छोटा होना चाहिए है। कक्षाओं का दूसरा नियम यह है कि उन्हें उससे छोटा होना चाहिए। ... फ़ंक्शंस के साथ हमने भौतिक रेखाओं की गणना करके आकार को माप लिया। कक्षाओं के साथ हम एक अलग उपाय का उपयोग करते हैं। हम जिम्मेदारियों की गिनती करते हैं। [अध्याय 10, पृष्ठ 136]

+3

+1 शीर्ष उत्तर महोदय। – Matt

+0

यह स्पष्ट रूप से सच नहीं है। क्या आपने कभी सीआरसी (कक्षा, जिम्मेदारी, सहयोगी) कार्ड का उपयोग किया है - ओओ डिजाइन में उपयोग किए जाने वाले क्लासिक टूल्स में से एक? प्रत्येक कार्ड में एक एकल वर्ग और उस पर अलग-अलग जिम्मेदारियों की एक सूची होती है। –

+0

@ नील, मैं तर्क दूंगा कि 80 के दशक से ओओ डिजाइन विधियों में तब से अनुभव के बड़े शरीर को शामिल नहीं किया गया है जो तब से प्राप्त हुआ है। फिर भी इन कार्डों की अवधारणा उपयोगी प्रतीत होती है, इसलिए उनका उल्लेख करने के लिए धन्यवाद! – Thorsten79

2

एक वर्ग में केवल एक जिम्मेदारी होनी चाहिए। यह इसकी लंबाई से बेहतर उपाय है। इसलिए, जब आपका कोड डिज़ाइन किया जाता है, तो आपके डिज़ाइन (एक प्रकार या कक्षा) की प्रत्येक इकाई केवल एक चीज़ के लिए ज़िम्मेदार होनी चाहिए (जो भी आपके मामले में "एक चीज़" है)। यदि आप इसे यथासंभव सरल रखते हैं, तो आपको गड़बड़ नहीं होगी।

1

जब आपको लगता है कि अब यह आपके लिए इसे प्रबंधित करने के लिए कठिन हो गया है और आप अटक गए हैं।

+0

मैं दूसरों के अनुसरण के लिए एक मानक के साथ आने की कोशिश कर रहा हूं; मेरे पास कुछ 3000+ लाइन कक्षाएं हैं, और जब मैं उन्हें समझाऊंगा तो यह एक बुरा विचार है, मैं भविष्य में बैकस्टॉप के रूप में कार्य करने से रोकने के लिए नियम निर्धारित करने की कोशिश कर रहा हूं। –

1

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

मैं वास्तव में एक सार्थक मीट्रिक के रूप में लाइनों की संख्या नहीं लेता।

+0

मीट्रिक के रूप में "कोड की रेखा" के बारे में चिंतित नहीं है, बस इसे स्थान लेने के लिए और अधिक सार्थक मीट्रिक ढूंढने का प्रयास कर रहा है। –

10

17 से अधिक लाइनें नहीं। न आधिक न कम। तो यदि 17 लाइनों के तहत है तो कैरिज रिटर्न चाल करेगा। यदि यह 17 से अधिक है तो आपको फ़ंक्शन के भीतर से अन्य कार्यों को कॉल करना प्रारंभ करना होगा।

उदाहरण के लिए:

public function myFunction() { 
... 
line 17: myFunctionPart2(); 
} 

public function myFunctionPart2() { 
... 
line 17: myFunctionPart3(); 
} 

और इतने पर।

इसकी सुंदर मानक प्रोग्रामिंग अभ्यास।

+1

वह कक्षाओं के बारे में पूछ रहा था ... कार्य नहीं। कक्षा में 17 लाइनें तब कम होंगी। –

+5

ओह, कक्षाओं के लिए सीमा 1 9 लाइनें है। – wowcat

+6

+1 क्योंकि यह मजाकिया है। प्रोग्रामिंग के लिए सच्चे रहस्य को जानने के लिए – Steven

15

कक्षा प्रशंसक-बाहर जटिलता: किसी दिए गए वर्ग की अन्य कक्षाओं की संख्या पर निर्भर करता है। इसके अलावा इसका वर्ग कम से कम कार्यात्मक कार्यक्रमों (फ़ाइल आधार पर) में रखरखाव की मात्रा को इंगित करने के लिए दिखाया गया है।

चक्रवात जटिलता: निर्दिष्ट सीमा के खिलाफ चक्रवात जटिलता की जांच करता है। जटिलता को, यदि, करते हैं, के लिए, ...,, पकड़, स्विच, केस स्टेटमेंट, और ऑपरेटरों की संख्या से मापा जाता है & & और || (प्लस वन) एक कन्स्ट्रक्टर, विधि, स्थिर प्रारंभकर्ता, या उदाहरण प्रारंभकर्ता के शरीर में। यह स्रोत के माध्यम से संभव पथों की न्यूनतम संख्या का एक उपाय है और इसलिए आवश्यक परीक्षणों की संख्या है। आम तौर पर 1-4 अच्छा माना जाता है, 5-7 ठीक है, 8-10 फिर से फैक्टरिंग पर विचार करें, और 11+ फिर से कारक!

+0

इस साल बाद में आ रहा है; चक्रीय जटिलता एक अच्छा पहला आदेश अनुमान है, लेकिन केवल प्रत्येक व्यक्तिगत विधि का परीक्षण कर रहा है, और अक्सर एक लाल हेरिंग होता है; यह कोड कठिनाई को माप रहा है, लेकिन आप वास्तव में जानना चाहते हैं कि * वहां * कितनी कठिनाई थी। (तर्क जटिल कोड ठीक है अगर कारण जटिल है; मध्यम-जटिलता कोड लिखना बुरा है अगर यह केवल मामूली हो सकता है!) –

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