मैं प्रबंधक कक्षाएं लिखने से कैसे बचूँ?


13

मुझे लगता है कि यह XxxManagerगेम इंजन प्रोग्रामिंग में शैली की कक्षाओं का उपयोग करने के लिए एक बुरा विचार है , फिर भी जब मैं उनके उपयोग से बचने की कोशिश करता हूं, तो मैं हमेशा कुछ ऐसा करता हूं जो सभी अभिनेताओं / संस्थाओं / खेल की दुनिया के स्थानों और उन पर कार्य करता है, जो एक Managerऔर नाम से होने पर समाप्त होता है ।

क्या यह वास्तव में एक बुरा पैटर्न है? यदि हां, तो विकल्प क्या हैं?


2
प्रबंधकों के साथ क्या गलत है?
क्रिस मैकफारलैंड

blog.codinghorror.com/i-shall-call-it-somethingmanager और अन्य, हालांकि मुझे यकीन नहीं है कि यह वास्तव में लागू होता है
रॉस टेलर-टर्नर

2
यह लिंक वास्तव में लागू नहीं होता है, यह नामकरण के बारे में है। मुझे लगता है कि यह सवाल प्रोग्रामर एसई के लिए एक बेहतर फिट हो सकता है।
टाइयपी_77

3
वास्तव में, प्रोग्रामर्स एसई पर हमारे मित्र पहले से ही इस सवाल का जवाब दे दिया है, पर एक नज़र डालें इस और इस और इस । क्रेडिट "प्रबंधक कक्षाओं के प्रोग्रामर से बचने के लिए कैसे" के साथ Google-खोज में जाता है।
टाइयपी_77

@ Tyyppi_77 आपके StackOverflow लिंक से च्वाइस उद्धरण: "नामकरण पक्षाघात नहीं मिलता है। हाँ, नाम बहुत महत्वपूर्ण हैं, लेकिन वे पर्याप्त महत्वपूर्ण नहीं हैं कि वे बड़ी मात्रा में समय बर्बाद करें। यदि आप 10 में एक अच्छा नाम नहीं सोच सकते हैं। मिनट, आगे बढ़ें। " मैं सहमत हूँ। कोड को कहीं जाना है। कृपया इसे कॉल करें।
क्रिस मैकफारलैंड

जवाबों:


11

"प्रबंधक" कक्षाएं विभिन्न कारणों से समस्याग्रस्त हो सकती हैं। दो प्रमुख कारण हैं:

  • नाम अस्पष्ट है ( वास्तव में "प्रबंधन" क्या करता है, और क्या यह हमेशा हर प्रकार की चीज़ों को प्रबंधित करने के लिए समान है?)
  • वे कार्यक्षमता के बकेट होने की ओर रुख करते हैं जो एकल जिम्मेदारी सिद्धांत का उल्लंघन करता है (अर्थात, एक प्रकार से एक काम करना चाहिए)

अक्सर उन कारणों में से एक कारण या दूसरे का तात्पर्य होता है।

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

अधिकांश "प्रबंधकों" को दो भागों में अलग करना आमतौर पर बहुत आसान होता है:

  • वह भाग जो वास्तविक वस्तुओं को संग्रहीत करता है और उन्हें एक्सेस प्रदान करता है (जिसे आप "स्टोर," ए "रिपॉजिटरी," ए "डेटाबेस," ए "कैश" या विभिन्न अन्य चीजों को कॉल कर सकते हैं। यह वह प्रकार है जो आमतौर पर जिम्मेदार होता है) वस्तुओं के जीवनकाल के लिए; अर्थात्, जब किसी वस्तु को हटा दिया जाता है या अन्यथा इस प्रकार के उदाहरण से निहित नहीं होता है तो इसका अस्तित्व समाप्त हो जाता है।

  • वह हिस्सा जो वास्तविक वस्तुओं को संसाधित करता है और उन पर कुछ काम करता है। यह उन वस्तुओं को अपडेट कर सकता है (तब यह "अपडेटर" या "सिमुलेशन" है) या यह उन्हें आकर्षित कर सकता है (फिर यह "दराज" या "रेंडरर" है)। या यह उनके साथ कुछ और कर सकता है; महत्वपूर्ण बात यह है कि इसका नाम अपने प्राथमिक उद्देश्य के अनुसार रखा जाए। आप आम तौर पर इस प्रकार के उदाहरणों को या उदाहरण के उदाहरण या उदाहरण के उदाहरण देंगे (वह जो केवल वस्तुओं के जीवनकाल को संभालता है)।

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


6

जब आप उन ब्लॉग पोस्ट को पढ़ते हैं जो आप टिप्पणियों में जुड़े होते हैं, तब आप देखेंगे कि "एक प्रबंधक यदि किसी अन्य नाम से" है, तो यह वही है जो आप करना चाहते हैं। सॉफ्टवेयर विकास में यह आम सहमति है कि वैश्विक चर बुरे हैं, और एकमात्र विकल्प यह है कि किसी भी डेटा को अन्य डेटा द्वारा आयोजित किया जाता है।

नामित वर्ग के साथ समस्या यह FoobarManagerहै कि "प्रबंधक" शब्द आपको यह नहीं बताता है कि वास्तव में वर्ग क्या करता है। उदाहरण के लिए:

  • जब यह फोबर्स के गेम मैकेनिक्स को नियंत्रित करता है, तो आप इसे नाम दे सकते हैं FoobarController
  • जब यह foobars को दर्शाता है, लेकिन फिर प्रतिनिधियों कुछ और करने के लिए पर नियंत्रण है, यह एक है FoobarFactoryया FoobarBuilder
  • जब यह स्क्रीन पर फोब्स को खींचता है, तो यह ए FoobarRenderer
  • जब यह फोबर्स द्वारा उत्पन्न घटनाओं को सुनता है, तो यह एक है FoobarEventHandler
  • जब यह फोबर्स के साथ कुछ होने की प्रतीक्षा करता है, तो यह एक है FoobarObserver
  • जब यह बिना किसी तर्क के फ़ॉबरों के संग्रह के लिए सिर्फ एक गूंगा डेटा धारक होता है, तो आप इसे नाम देते हैं Foobars

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


1
मैं अक्सर नामों का उपयोग करना पसंद करता हूं FoobarStoreया FoobarRepositoryइसके बारे में स्पष्ट होना चाहता हूं कि यह किस लिए है।
लुकाजोयड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.