तब एक हरियाली होती है, और चीजों को साफ करने के प्रयास में, कोई एक GameManager लिखता है। शायद GameStates का एक समूह रखने के लिए, शायद कुछ GameObjects को स्टोर करने के लिए, वास्तव में कुछ भी बड़ा नहीं है। एक प्यारा, थोड़ा, प्रबंधक।
तुम्हें पता है, जैसा कि मैं यह पढ़ रहा था, मेरे सिर में बहुत कम अलार्म थे। "GameManager" नाम की कोई वस्तु कभी भी प्यारा या छोटा नहीं होने वाला है। और किसी ने कोड को साफ करने के लिए ऐसा किया? यह पहले जैसा क्या दिखता था? ठीक है, एक तरफ मजाक करता है: एक वर्ग का नाम एक स्पष्ट संकेत होना चाहिए कि कक्षा क्या करती है, और यह एक बात होनी चाहिए (उर्फ: एकल जिम्मेदारी सिद्धांत )।
इसके अलावा, आप अभी भी GameManager जैसी किसी वस्तु के साथ समाप्त हो सकते हैं, लेकिन स्पष्ट रूप से, यह बहुत उच्च स्तर पर मौजूद है, और इसे उच्च स्तर के कार्यों के साथ ही चिंता करनी चाहिए। खेल की वस्तुओं की एक सूची बनाए रखना? शायद। खेल वस्तुओं के बीच संचार सुविधा? ज़रूर। वस्तुओं के बीच टकराव की गणना? नहीं! यही कारण है कि नाम प्रबंधक पर बहुत बुरा लगा है - यह बहुत व्यापक है, और उस बैनर के तहत बहुत दुरुपयोग की अनुमति देता है।
कक्षा के आकार पर अंगूठे का एक त्वरित नियम: यदि आप प्रति वर्ग कोड की कई सौ पंक्तियों में चल रहे हैं, तो कुछ गलत हो रहा है। अति उत्साही होने के बिना, कुछ भी कहना, 300 LOC मेरे लिए एक कोड गंध है, और यदि आप 1000 से अधिक जा रहे हैं, तो चेतावनी की घंटी बंद होनी चाहिए। यह मानते हुए कि कोड की 1000 पंक्तियाँ 250 प्रत्येक के 4 अच्छी तरह से संरचित वर्गों की तुलना में समझने में सरल हैं, आप खुद को बहका रहे हैं।
जब समय एक मुद्दा बन जाता है, तो अलग वर्ग लिखने या इस विशाल प्रबंधक को उप-प्रबंधकों में विभाजित करने का कोई तरीका नहीं।
मुझे लगता है कि यह केवल मामला है क्योंकि समस्या को उस बिंदु पर प्रचारित करने की अनुमति है जहां सब कुछ पूरी तरह से गड़बड़ है। के अभ्यास पुनर्रचना - वास्तव में आप के लिए क्या देख रहे है आप लगातार छोटे वेतन वृद्धि में कोड के डिजाइन में सुधार करने की जरूरत है ।
ऐसा होने से रोकने के लिए आप क्या सुझाव देंगे?
समस्या एक तकनीकी नहीं है, इसलिए आपको इसके लिए तकनीकी सुधार की तलाश नहीं करनी चाहिए। समस्या यह है: कोड के अखंड टुकड़े बनाने के लिए आपकी टीम में एक प्रवृत्ति है, और यह विश्वास है कि यह इस तरह से काम करने के लिए मध्यम / दीर्घकालिक में किसी तरह फायदेमंद है। यह भी लगता है कि टीम में एक मजबूत वास्तुशिल्प नेतृत्व की कमी है, जो खेल की वास्तुकला को कम करेगा (या कम से कम, यह व्यक्ति इस कार्य को करने के लिए बहुत व्यस्त है)। मूल रूप से, टीम के सदस्यों को पहचानने का एकमात्र तरीका यह है कि यह सोच गलत है। यह किसी का उपकार नहीं करता। उत्पाद की गुणवत्ता खराब हो जाएगी, और टीम केवल और भी अधिक रातें तय करेगी।
अच्छी खबर यह है कि स्वच्छ कोड लिखने के तात्कालिक, मूर्त लाभ इतने महान हैं, कि लगभग सभी डेवलपर्स अपने लाभों को बहुत जल्दी महसूस करते हैं। टीम को कुछ समय के लिए इस तरह से काम करने के लिए मनाएं, परिणाम बाकी होंगे।
मुश्किल हिस्सा यह है कि बुरे कोड (और जल्दी से बेहतर डिजाइन के साथ आने के लिए एक प्रतिभा) के विकास के लिए विकास को सीखने के लिए अधिक कठिन कौशल में से एक है। मेरा सुझाव इस आशा के इर्द-गिर्द टिका है कि आपके पास टीम में कोई वरिष्ठ है जो ऐसा कर सकता है - इस तरह से लोगों को समझाना बहुत आसान है।
संपादित करें - थोड़ी अधिक जानकारी:
सामान्य तौर पर, मुझे नहीं लगता कि आपकी समस्या खेल के विकास तक सीमित है। इसके मूल में, यह एक सॉफ्टवेयर इंजीनियरिंग समस्या है, इसलिए उस दिशा में मेरी टिप्पणी। खेल विकास उद्योग की प्रकृति अलग हो सकती है, चाहे इसके अधिक परिणाम और अन्य प्रकार के विकास की तुलना में समय सीमा उन्मुख हो, मुझे यकीन नहीं है।
खेल के विकास के लिए विशेष रूप से, "विशेष रूप से खेल वास्तुकला" युक्तियों के बारे में स्टैकऑवरफ्लो पर इस प्रश्न का स्वीकृत उत्तर , कहते हैं:
ऑब्जेक्ट ओरिएंटेड डिज़ाइन के ठोस सिद्धांतों का पालन करें ...।
यह अनिवार्य रूप से बिल्कुल वही है जो मैं कह रहा हूं। जब मैं दबाव में होता हूं, तो मैं अपने आप को कोड के बड़े टुकड़े भी लिखता हूं, लेकिन मैंने इसे अपने सिर में ड्रिल कर लिया है। मेरे लिए अच्छी तरह से काम करना, दिन की पहली छमाही (या तीन-चौथाई) खर्च करना है, जो मध्यम-गुणवत्ता वाले कोड की एक बड़ी मात्रा का उत्पादन करता है, और फिर वापस बैठने के लिए, और थोड़ी देर के लिए इसके बारे में सोचता है; कोड को थोड़ा सुधारने के तरीके के बारे में मेरे सिर में, या कागज / व्हाइटबोर्ड पर थोड़ा सा डिज़ाइन करें। अक्सर, मैं दोहरावदार कोड को नोटिस करता हूं, और पठनीयता में सुधार करते हुए वास्तव में चीजों को तोड़कर कोड की कुल पंक्तियों को कम करने में सक्षम हूं। इस बार निवेश किया गया खुद के लिए इतनी जल्दी भुगतान करता है, कि इसे "निवेश" कहना मूर्खतापूर्ण लगता है - अक्सर मैं ऐसे कीड़े उठाऊंगा जो शायद मेरा आधा दिन (एक हफ्ते बाद) बर्बाद हो गए थे, क्या मैंने इसे जाने दिया था।
- उसी दिन चीजों को ठीक करें जिस दिन आप उन्हें कोड करते हैं।
- आपको खुशी होगी कि आपने घंटों के भीतर किया।
वास्तव में विश्वास करना ऊपर वाला मुश्किल है; मैं इसे केवल अपने काम के लिए करने में कामयाब रहा हूं क्योंकि मैंने अनुभव किया है, बार-बार, प्रभाव। फिर भी, मेरे लिए कोड फिक्सिंग को सही ठहराना मेरे लिए अभी भी मुश्किल है जब मैं अधिक मंथन कर सकता हूं ... तो मैं निश्चित रूप से समझता हूं कि मैं कहां से आ रहा हूं। दुर्भाग्य से, यह सलाह शायद बहुत सामान्य है, और करना आसान नहीं है। मैं दृढ़ता से इसमें विश्वास करता हूँ, हालाँकि! :)
अपने विशिष्ट उदाहरण का उत्तर देने के लिए:
अंकल बॉब का क्लीन कोड यह बताने का एक अद्भुत काम करता है कि अच्छी गुणवत्ता कोड क्या है। मैं इसकी लगभग सभी सामग्रियों से सहमत हूं। इसलिए, जब मैं 30 000 LOC प्रबंधक वर्ग के आपके उदाहरण के बारे में सोचता हूं, तो मैं वास्तव में "अच्छे कारण" भाग से सहमत नहीं हो सकता। मैं आक्रामक ध्वनि नहीं करना चाहता, लेकिन इस तरह सोचने से समस्या पैदा होगी। एक ही फ़ाइल में इतना कोड होने का कोई अच्छा कारण नहीं है - यह लगभग 1000 पृष्ठों का पाठ है! स्थानीयता (निष्पादन की गति, या "सरलता") के किसी भी लाभ को डेवलपर्स द्वारा तुरंत उस राक्षसी को नेविगेट करने की कोशिश करते हुए पूरी तरह से बंद कर दिया जाएगा, और इससे पहले कि हम विलय पर चर्चा करें, आदि।
यदि आप आश्वस्त नहीं हैं, तो मेरा सबसे अच्छा सुझाव उपरोक्त पुस्तक की एक प्रति को हथियाना होगा, और इसके माध्यम से देखना होगा। इस प्रकार की सोच को लागू करना लोगों को स्वेच्छा से स्वच्छ, स्व-स्पष्टीकरण कोड बनाने की ओर ले जाता है, जो अच्छी तरह से संरचित है।