c# - Object composition references -- bidirectional? -


मान लें कि आपके पास एक वर्ग ऑब्जेक्ट है:

  पब्लिक क्लास क्लास {IList & lt; Student & gt; छात्रों; }   

और आपके पास एक छात्र वस्तु है:

  सार्वजनिक वर्ग के छात्र {निजी कक्षा वर्ग; }   

डेटाबेस से इन ऑब्जेक्ट लोड करते समय, एसोसिएशन लोड करने का सबसे अच्छा तरीका क्या है?

जब आप एक वर्ग लोड करते हैं, तो आपके पास छात्रों की एक खाली सूची होगी। यदि आप पहले छात्रों को लोड करते हैं, तो क्लास ऑब्जेक्ट का कोई रिक्त संदर्भ नहीं होगा जब तक क्लास लोड नहीं हो जाता।

यह उन सभी समस्याओं में से एक है जो मैं हर समय से कुश्ती करता हूं। सबसे सुरुचिपूर्ण दृष्टिकोण है कि मैं (अब तक) के साथ आया हूँ केवल उन वस्तुओं के गुणों को बनाने के लिए है जो मेरे लिए यह सब संभालते हैं

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

जिस एप्लिकेशन पर आप चर्चा कर रहे हैं, उसका असली गुंजाइश, जेनेरिक शैली को रोल करने देता है, क्या हम करेंगे? यहां एक क्लास क्लासिक क्लास क्लास है। (आह, वह मजेदार था।) वही विचार छात्र कक्षा पर लागू होंगे, हालांकि।

  सार्वजनिक वर्ग की कक्षा {IList & lt; छात्र & gt; _students; सार्वजनिक IList & lt; छात्र & gt; छात्र {प्राप्त करें (यदि (_स्टुटेंट्स == रिक्त) {_students = नया आईआईएलआईटी & lt; छात्र & gt; (); PopulateStudents (); // बस सादगी के लिए}} // एक सेटर के लिए आमतौर पर कोई ज़रूरत नहीं है ... छात्रों का उपयोग करें। एड (विद्यार्थी)}}   

इससे आप क्या कर सकते हैं ऑन-डिमांड लोडिंग इस विशेष कक्षा के लिए छात्रों का यह मानना ​​है कि वेब विकास के लिए, यदि आपका आवेदन किसी कक्षा के बारे में जानकारी देख रहा है, लेकिन अभी छात्रों की सूची की आवश्यकता नहीं है, तो उसे डेटाबेस से क्यों खींचें? PopulateStudents () जितना जटिल हो उतना जटिल हो सकता है कम से कम आप डेटाबेस कॉल को वहां पर रखेंगे, लेकिन इसमें कुछ कैशिंग भी फेंकने का बुरा विचार नहीं होगा।

यदि आप इसे ठीक से करते हैं, तो आप वास्तव में ऑब्जेक्ट लोड करने वाले ऑर्डर के बारे में चिंता करने की ज़रूरत नहीं पड़ेगी। जब आप चाहें / उनकी आवश्यकता होती है, और आपके खपत कोड में आपके हिस्से पर कोई भी सोचना नहीं पड़ता, तो वे सभी लोड हो जाते हैं। जब आप कॉल करते हैं तो

  वर्ग c = नया वर्ग (आईडी); // आप अपने छात्रों को प्राप्त करने के लिए एक कक्षा की जरूरत है ... IList & lt; छात्र & gt; छात्र सूची = सी। छात्र;   

आप वास्तव में नहीं जानते हैं कि आपका डेटा पहले ही खींचा गया था, या फिर खींचने की आवश्यकता है, या क्या - और आपको क्या करना है? वर्ग खुद को किरकिरा विवरणों को संभालने दें।

स्वाभाविक रूप से ऐसा करने के लिए विचार किए गए हैं कि आपको काम करने की आवश्यकता है। उदाहरण के लिए, 'नई' कक्षा (दूसरे शब्दों में, वर्ग जो डेटाबेस अभी में नहीं है) के बारे में क्या है? हालांकि कुछ गहन प्रोग्रामिंग के साथ, अंतिम परिणाम समान है।

Comments