2010-08-09 10 views
12

मैं एक डेटाबेस से आइटम वापस लाने के लिए एक वर्ग का उपयोग कर रहा कल्पना कीजिए,क्या कक्षा में बहुत सी विधियां उस वर्ग की वस्तु के ऊपरी हिस्से को बढ़ाती हैं?

class BankRecord { 

public int id; 
public int balance; 

public void GetOverdraft() { 
... 
} 
public void MakeBankrupt(){ 
... 
} 

} 

कहना अब, क्या या 100 तरीकों इस का उपयोग कर के प्रदर्शन को भी हो अगर वहाँ सिर्फ 2 तरीकों होने पर होता है (ऊपर) के रूप में, हो सकता है उनमें से कुछ बहुत बड़े हैं।

यदि इन सभी ऑब्जेक्ट्स पर सभी विधियां थीं तो इन सैकड़ों ऑब्जेक्ट्स को और खराब करना होगा? यह सी #/जावा प्रकार की भाषाओं के लिए है, लेकिन सभी भाषाओं के लिए यह जानना अच्छा होगा।

या क्या यह एक अच्छा वर्ग है, इन वस्तुओं पर सभी कार्यों को करने के लिए, और वस्तु को शुद्ध डेटा वर्ग के रूप में छोड़ दें?

+5

संक्षिप्त उत्तर, ** नहीं **। लंबा जवाब, किसी और के स्पष्टीकरण के साथ जवाब देने तक प्रतीक्षा करें। – jjnguy

+1

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

+0

धन्यवाद, पूरी तरह से सहमत हैं कि 100 तरीके सही समय पर सही नहीं हैं, लेकिन सिर्फ उदाहरण स्पष्ट करना चाहते थे। –

उत्तर

7

किसी ऑब्जेक्ट का उदाहरण बनाते समय रनटाइम कोड को डुप्लिकेट नहीं करता है। एक उदाहरण बनने पर केवल सदस्य फ़ील्ड स्मृति में स्थान आवंटित किए जाते हैं। इस कारण से, आपको "केवल डेटा" वर्ग नहीं बनाना चाहिए जब तक कि आपके पास ऐसा करने के लिए कोई अन्य डिज़ाइन कारण न हो।

कहा जा रहा है कि, अन्य सर्वोत्तम प्रथाओं के कारण हैं कि आप कई तरीकों से कक्षा क्यों नहीं चाहते हैं (उदाहरण के लिए God object anti-pattern)।

4

नहीं। सीएलआर वस्तुओं में उस प्रकार की मेटा जानकारी के लिए एक सूचक है जिसमें प्रतिबिंब और विधि तालिका के लिए आवश्यक सब कुछ शामिल है। विधि तालिका में विधि कार्यान्वयन को देखने के लिए ओवरहेड तालिका में प्रविष्टियों की संख्या के बावजूद समान है। अधिक जानकारी के लिए this article देखें। संक्षेप में सभी ऑब्जेक्ट्स में 8 बाइट ओवरहेड होते हैं (टाइप हैंडल के लिए 4 और सिंकब्लॉक के लिए 4)।

हालांकि, धीमा हो सकता है प्रतिबिंब है। यह केवल तब से बनाता है जब आप किसी प्रकार के मेटाडेटा के माध्यम से गणना करना चाहते हैं तो उस प्रकार में अधिक सदस्यों को घोषित किए जाने पर यह धीमा हो जाएगा।

संबंधित मुद्दे