क्या बड़े मॉड्यूल को विभाजित करने के कोई नकारात्मक दुष्प्रभाव हैं? [बन्द है]


21

मैं एक गितुब परियोजना को ब्राउज़ कर रहा था और इस मॉड्यूल को मिला जिसमें 10 हजार से अधिक लाइनें हैं।

क्या किसी एकल मॉड्यूल में इतना कोड होना एक आम बात है?

यह मुझे लगता है कि यह कई मॉड्यूल पर विभाजित किया जाना चाहिए। शायद प्रत्येक डीबी इंजन के लिए एक।

डेवलपर को इस तरह का एक बड़ा मॉड्यूल बनाने से क्या लाभ होता है ("एक ही जगह यह सब होने के अलावा") या इसे नीचे ("जटिलता" के अलावा) विभाजित करने से क्या लाभ है?


नहीं 8k लाइनों - यकीन के लिए!
— B42овиЈ

4
यह मॉड्यूल का आकार नहीं है, यह है कि आप इसका उपयोग कैसे करते हैं ...
— jmq

4
कार्यक्रम मनुष्यों द्वारा पढ़ने के लिए होते हैं और केवल संयोगवश कंप्यूटर को निष्पादित करने के लिए - डोनाल्ड नुथ।
— महमूद होसाम

1
एक मॉड्यूल / सबमॉड्यूल को एक विशेष कार्य करने के लिए माना जाता है। पायथन में 2 संख्याओं को जोड़ने के लिए ए (मूर्खतापूर्ण) मॉड्यूल केवल 2 पंक्तियाँ होंगी। कुछ अधिक जटिल करने के लिए एक मॉड्यूल निश्चित रूप से बड़ा होगा। मैं कहता हूं कि मॉड्यूल / सबमॉडल को केवल एक फ़ंक्शन तक सीमित रखें। अपने बेंचमार्क के रूप में कीप।
— c0da

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

जवाबों:


14

आपने जो सामना किया वह तथाकथित " ईश्वर वस्तु " है, क्योंकि यह सभी करता है या सभी जानता है। इससे दूर भागें (यदि आप कर सकते हैं)।

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

* यहां तक ​​कि एक 1k लाइन मॉड्यूल बहुत बड़ा है।


9
जो उदाहरण दिया गया है वह गॉड ऑब्जेक्ट नहीं है , यह वास्तव में एक पूरी श्रेणी की पदानुक्रम है, जिसमें यह सिद्धांत भी शामिल है , कि बस एक सिंगल-फाइल में होना होता है। यह आदर्श नहीं हो सकता है, लेकिन व्यावहारिक कारण हैं जो आप ऐसा करना चाहते हैं और जैसा कि BillThor सुझाव देता है, कोड स्वयं अन्यथा यथोचित संरचित है। यह निश्चित रूप से एक ईश्वर वस्तु की क्लासिक परिभाषा के लायक नहीं है , बस एक है जो करने के लिए एक काफी जटिल काम है और कई विभिन्न परिदृश्यों के अनुकूल होने की आवश्यकता है।
— मार्क बूथ

6

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

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


5

बेशक वास्तविक "सीमा" आपकी परियोजना और कारकों की भीड़ से भिन्न होती है।

लेकिन मैं अंगूठे के एक नियम के साथ झंकार करता हूं: सभ्य पायथन की 200 लाइनें । अर्थात्, पायथन में कोई सी या जावा कोड नहीं लिखा गया है, लेकिन पायथन में अच्छा पायथन है।


1

वाह।

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

मैं बाद में कागजात में खुदाई कर रहा हूं जो कि युग्मन और सामंजस्य के बारे में बहुत कुछ बताता है। हो सकता है कि कई डीबी मॉड्यूल होने से मॉड्यूल के बीच बहुत अधिक कॉलों को मजबूर किया जा सके, जो कि खराब अभ्यास, यानी कम सामंजस्य और उच्च युग्मन को बढ़ाने के लिए अग्रणी है?

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

एक और बात मैंने देखी कि कोड का हिस्सा जेनेरिक के रूप में बताया गया है और बाकी डीबीएस को इससे बढ़ाया गया है। मैं एक अजगर प्रोग्रामर नहीं हूँ, लेकिन शायद यह कुछ औचित्य साबित कर सकता है?

इसलिए, मेरे पास कोई अंतिम उत्तर नहीं है, लेकिन मुझे आशा है कि कोई व्यक्ति इन बिंदुओं को भी उजागर करेगा!

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