(ध्यान दें: tl; मेरा असली राय के लिए बहुत नीचे स्थित डॉ उपलब्ध है)
मैं किसी भी बड़े नाम बोली और हमेशा है, क्योंकि यह बहुत ही मामले निर्भर है कि कैसे आप सभी करते हैं कि सही जवाब है कहने के लिए नहीं जा रहा हूँ यह चीज़। उदाहरण के लिए विधियों की संख्या: यदि आप आधुनिक एचडी एलसीडी टीवी के रिमोट कंट्रोलर के लिए एक नियंत्रण सॉफ्टवेयर बना रहे हैं जिसमें लगभग 40-50 बटन हैं, तो आप इसे कक्षाओं में में कैसे तोड़ सकते हैं ताकि आप केवल इतना कह सकें, कक्षा प्रति 7 तरीके?
व्यक्तिगत तौर पर मैं एक वर्ग कुछ उपयोगिता वर्गों के तरीकों के सैकड़ों होने तक खत्म हो सकता है, लेकिन मेरी राय में यह StringUtil.XML.escapeSpecialCharacters(someString)
या XMLUtil.escapeSpecialCharacters(someString)
से StringUtil.escapeXMLspecialCharacters(someString)
की तरह कुछ करने के लिए आसान है, जिसका मतलब है में एक एक्सेसर स्तर के सभी तरीकों को रखने के लिए पसंद करते हैं। हालांकि ये सब ठीक प्रतीत होते हैं, पहला पहला उगता है (कम से कम मेरे दिमाग में, वह है!) क्योंकि यह उस विधि तक पहुंचने का सरल और बहुत आसान तरीका है: आपको यह सोचने की ज़रूरत नहीं है कि आप जिस स्ट्रिंग को संभालने में हैं एक्सएमएल या एक्सएचटीएमएल या जेएसओएन या जो भी हो, आप बस सामान्य तरीकों से एक विधि चुन लेंगे और यही वह है।
पिछले टीवी रिमोट समानता को ध्यान में रखते हुए, मान लीजिए कि आप उन्हें विभिन्न वर्गों में विभाजित करते हैं। यदि हम प्रति वर्ष औसतन इस तरह की विधियों में से 7 विधियों की अनुमति देते हैं और MenuButtons
, AdjustmentButtons
और 'संख्या चयनकर्ता बटन' जैसे संवेदनात्मक समूहों को रिमोट पर बटन समूहित करने का प्रबंधन करते हैं, तो हम 8 या उससे अधिक कक्षाओं के साथ समाप्त होते हैं। यह वास्तव में एक बुरी चीज नहीं है, लेकिन यह आसानी से थोड़ा भ्रमित हो जाता है, खासकर अगर वे बहुत सावधानी से सनसनीखेज समूहों में विभाजित नहीं होते हैं। बस अपने टीवी रिमोट्स 'आरयूएस इंक कार्यालय के आस-पास की रानों की कल्पना करें: "कौन कहता है कि चालू/बंद बटन एक नियंत्रण बटन है?" "जोकर है जो वॉल्यूम +/- मेनू बटन पर रखता है? PRE/CH (बटन जो वर्तमान और पिछले चैनल और/या छवि स्रोत के बीच स्विच करता है) बटन एक संख्या बटन नहीं है!" "मार्गदर्शिका बटन संदर्भ के आधार पर टीवी गाइड और नेविगेशन मेनू दोनों को खोलता है, हम इसके साथ क्या करने जा रहे हैं !?"
इसलिए आप उम्मीद कर सकते हैं कि इस उदाहरण से कुछ मनमानी संख्या का उपयोग करके स्वयं को सीमित करने के लिए कुछ अनियंत्रित जटिलता लागू हो सकती है और एप्लिकेशन के तार्किक प्रवाह को तोड़ दिया जा सकता है।
इससे पहले कि मैं अपने पिछले दो सेंट में फेंकूं, प्रति विधि लाइनों की संख्या के बारे में एक बात: ब्लॉक को ब्लॉक के रूप में सोचें।प्रत्येक पाश एक ब्लॉक है, प्रत्येक सशर्त एक ब्लॉक है और इतने पर और आगे। कोड की एक इकाई के लिए आवश्यक इन ब्लॉकों की न्यूनतम राशि क्या है, जिसमें एक ही जिम्मेदारी है? यह आपका limiter होना चाहिए, "हर जगह सात" होने की इच्छा नहीं है। पैकेज में कक्षाओं की संख्या, कक्षाओं में विधियों और तरीकों से कोड की रेखाओं से।
तो, मेरा असली राय वास्तव में यह है:: पैकेज में वर्गों की संख्या काफी कम किया जाना चाहिए डॉ;
और यहाँ टीएल है। मैं हाल ही में निम्न कार्य शुरू किया गया है, लेकिन मुझे यकीन है कि अगर मैं इसे करने के लिए रखेंगे नहीं कर रहा हूँ:
- पैकेज
foo
कार्यान्वयन के लिए इंटरफेस और अन्य आम कक्षाओं में शामिल है।
- पैकेज
foo.bar
समारोह के लिए कहा इंटरफेस के कार्यान्वयन में शामिल है bar
- पैकेज
foo.baz
समारोह के लिए कहा इंटरफेस के कार्यान्वयन में शामिल है baz
आमतौर पर इसका तात्पर्य मेरी पूरी संरचना एक सुसंगत है (और सबसे अधिक संभावना कम) वर्गों की संख्या और शीर्ष स्तरीय वर्ग इंटरफेस (और उनकी टिप्पणियां) पढ़कर मुझे अन्य पैकेजों को भी समझने में सक्षम होना चाहिए।
प्रति वर्ग के तरीके: जैसा कि मैंने ऊपर बताया है, सभी की आवश्यकता है। यदि आपकी कक्षा 170 विधियों के बिना नहीं रह सकती है, तो इसे अपने पास दें। रिफैक्टरिंग एक पुण्य है, ऐसा कुछ नहीं जिसे हर समय लागू किया जा सकता है।
प्रति विधि पंक्तियां: जितनी कम हो सके, मैं आम तौर पर प्रति विधि 10 से 25 लाइनों के साथ समाप्त होता हूं और 25 मेरे लिए थोड़ा अधिक होता है, इसलिए मैं कहूंगा कि 10 इसके लिए एक अच्छा संतुलन बिंदु है।
मुझे लगता है कि यह सिफारिश अत्यधिक सरल है। हम कक्षा को दो में विभाजित नहीं करते हैं क्योंकि उनके पास सात से अधिक विधियां हैं। हमें मुख्य रूप से एकजुटता के बारे में सोचना चाहिए। –
आप केवल इसलिए विभाजित नहीं हैं क्योंकि सात से अधिक विधियां हैं - लेकिन यह मीट्रिक उस कक्षा में आपका ध्यान निर्देशित करती है जिसे (शायद) को वैसे भी रीफैक्टरिंग की आवश्यकता होती है। – vektor
औसत स्क्रीन (1920x1080) पर आप उस समय लगभग 60 लाइनें देख सकते हैं। मेरी राय में यह एक विधि के लिए बहुत अधिक है। –