एक गोंद या प्रबंधन वर्ग कब बहुत कुछ कर रहा है?


10

मुझे अपने डिजाइनों में अन्य कक्षाओं का प्रबंधन करने वाली केंद्रीकृत कक्षाओं के निर्माण की संभावना है। यह सब कुछ खुद को स्टोर नहीं करता है, लेकिन अधिकांश डेटा अनुरोध पहले "प्रबंधक" पर जाएंगे। इस प्रश्न के उत्तर को देखते हुए मैंने "गॉड ऑब्जेक्ट" शब्द पर गौर किया। विकिपीडिया इसे एक एंटीपैटर्न के रूप में सूचीबद्ध करता है, काफी।

एक वैध गोंद वर्ग, या मॉड्यूल के बीच की रेखा कहां है, जो डेटा और संदेशों को एक स्थान से दूसरे स्थान पर भेजती है, और एक वर्ग जो बहुत अधिक कर रहा है?

जवाबों:


15

बहुत सारे लोग कहते हैं कि "एक वर्ग को अपने सिर से कभी बड़ा नहीं होना चाहिए"।

हालाँकि, मैंने अभी इस विषय पर कुछ वास्तव में महान, विश्व स्तरीय प्रोग्रामर के साथ चर्चा में भाग लिया है। मैंने इसे नग्न वस्तुओं में से एक के साथ बात की है। जहां तक ​​हम बता सकते हैं, कभी-कभी, यह होता है, और इसके आसपास होने का कोई रास्ता नहीं है।

आम तौर पर, हालांकि, ऐसा होने वाला एक वर्ग एक डोमेन ऑब्जेक्ट है जो आपके डोमेन के मूल तत्व का प्रतिनिधित्व करता है - एक खाता बैंकिंग के लिए, एक खुदरा बिक्री के लिए, आदि। यदि आप पा रहे हैं कि यह अन्य वर्गों के लिए भी होता है, तो आप शायद उस वर्ग की जिम्मेदारी पर विचार करना चाहते हैं। यहाँ मेरी युक्तियां हैं:

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

अंगूठे के एक नियम के रूप में, यदि यह बहुत बड़ा है, तो देखें कि क्या आप किसी अन्य वर्ग को कोई जिम्मेदारियां सौंप सकते हैं, और यदि आप नहीं कर सकते हैं, तो यह शायद ठीक है।


उपयोगी ठोस दिशानिर्देशों के साथ अच्छा जवाब। मैं ऐसी डोमेन ऑब्जेक्ट्स के लिए कक्षाएं बनाना चाहता हूं, जहां सभी, या लगभग सभी, डेटा डोमेन के कुछ पहलू का प्रतिनिधित्व करता है और मैं इसे एक इकाई के रूप में व्यवहार करने में सक्षम होना चाहता हूं। तब मैं वास्तविक जिम्मेदारियों को उन वर्गों के लिए सौंपता हूं जो केवल बड़े वर्ग के अंदर ही तात्कालिक होते हैं। इसलिए मैं लाइन के बहुत करीब हूं, और मुझे इसे लिखते समय व्यक्तिगत कक्षाओं को छोटा बनाने की दिशा में झुकना चाहिए।
jprete
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.