oop - When should an object be included as a member of another object, and when should it always standalone? -
एक उदाहरण समस्या:
स्टैक अतिप्रवाह पर, एक प्रश्न पृष्ठ कई अलग-अलग उत्तर दिखाता है इन उत्तरों को प्रदर्शित करने में साइट ने उत्तर के लेखक के बारे में जानकारी भी दी है। इसका मतलब यह है कि हालांकि बैज की संख्या किसी दिए गए उपयोगकर्ता के पास और उसके उत्तर में कोई जवाब नहीं है, फिर भी उस पेज को प्रदर्शित करने के लिए डेटा को पुनः प्राप्त करने की आवश्यकता है।
मैं जो देख सकता हूं , एक मॉडल में इस दृश्य डेटा को खींचने के बारे में तीन अलग-अलग तरीके हैं:
-
एक पोस्ट ऑब्जेक्ट सदस्य के रूप में एक पूर्ण उपयोगकर्ता ऑब्जेक्ट शामिल कर सकता है दृश्य इस प्रकार उपयोगकर्ता को इस प्रकार एक्सेस करेगा:
$ post- & gt; उपयोगकर्ता- & gt; मिलना () यह क्लीनर लगता है, क्योंकि एक नियंत्रक पदों का अनुरोध कर सकता है और इसके साथ किया जा सकता है, लेकिन अभी तक अक्षम है क्योंकि एक पोस्ट शायद हमेशा को पूर्ण विकसित उपयोगकर्ता की आवश्यकता नहीं है मुझे लगता है कि यह अच्छी तरह से काम करता है यदि उपयोगकर्ता ऑब्जेक्ट अपेक्षाकृत प्रकाश है, जो शायद यह होगा। तब समस्या यह होगी कि आपको पोस्ट पुनर्प्राप्ति क्वेरी के भाग के रूप में उपयोगकर्ता पुनर्प्राप्ति कोड को डुप्लिकेट करना होगा।
पोस्ट ऑब्जेक्ट उपयोगकर्ता के लिए केवल एक आईडी रख सकता है जब पोस्ट, या पोस्ट नियंत्रक को वापस कर दिए जाते हैं, तो नियंत्रक फिर से सेट से अनूठे यूजर आईडी को निकाल सकता है और उन्हें एक उपयोगकर्ता कारखाने में पास कर सकता है। लौटाए गए उपयोगकर्ता ऑब्जेक्ट तब दृश्य के रूप में सेट किए गए मूल डाक के साथ अलग संग्रह के रूप में पारित हो जाएंगे। इस दृश्य ने उपयोगकर्ता की जानकारी जैसे
$ उपयोगकर्ता [$ post- & gt; getUserId ()] - & gt; प्राप्त कर सकते हैं (पुनःप्रतीकरण) ।
एक हाइब्रिड दृष्टिकोण: पोस्ट ऑब्जेक्ट के अंदर उपयोगकर्ता ऑब्जेक्ट शामिल करें, लेकिन पोस्ट पुनर्प्राप्ति विधि के भाग के रूप में अद्वितीय आईडी निष्कर्षण और उपयोगकर्ता पुनर्प्राप्ति है। यानी
पोस्ट :: getPosts () सभी प्रासंगिक पदों को पकड़ लेगा और उन्हें रिक्त उपयोगकर्ता के सदस्यों के साथ ऑब्जेक्ट में परिवर्तित कर दूंगा, तो यह सभी उपयोगकर्ता आईडी निकालेगा और उन्हें
User :: getUsers ()
मुझे लगता है कि मैं क्या कर रहा हूं, यह कैसे होता है मुझे पता है कि जब किसी ऑब्जेक्ट को एक अन्य ऑब्जेक्ट मूल रूप से रखना चाहिए? क्या यह अशुद्ध / एक कोड गंध है, इसके बदले ऐसे संबंधित ऑब्जेक्ट अलग-अलग लौट आए हैं, साथ ही अन्य को जानने वाले ऑब्जेक्ट को पुनः प्राप्त नहीं किया गया है। मैं अलग पुनर्प्राप्ति की अवधारणा के प्रति झुकाव कर रहा हूं - यह सबसे अधिक कुशल लगता है - परन्तु यह सचमुच महसूस करता है कि वे इसके लिए भी संबंधित हैं।
1 और 2 के बीच में एक समाधान भी है। उपयोगकर्ता वर्ग के लिए आलसी लोडिंग प्रॉक्सी हो सकती है। इस समाधान के साथ आप दोनों विश्व के सर्वश्रेष्ठ हो सकते हैं क्योंकि प्रॉक्सी वास्तविक चीज़ के साथ परस्पर विनिमय योग्य है, इसलिए स्थिति के आधार पर आप स्वयं वस्तु या प्रॉक्सी हो सकते हैं
संपादित करें: मैं एक उदाहरण के साथ इसकी व्याख्या करने का प्रयास करूंगा।
कहो कि आपको एक ऐसा दृश्य है जहां आपको उपयोगकर्ता जानकारी की आवश्यकता नहीं है, तो आप अपनी पोस्ट को निर्देश / अनुदेश दे सकते हैं फ़ैक्टरी उपयोगकर्ता के लिए आलसी प्रॉक्सी () का उपयोग करने के लिए जिसमें केवल एक आईडी है इसलिए उपयोगकर्ताओं के लिए कोई भी एक्सेस की आवश्यकता नहीं है।
एक और दृश्य में आपको उपयोगकर्ता जानकारी तक पहुंचने की आवश्यकता है, लेकिन केवल कुछ पदों के लिए, यहां पर आप उपयोगकर्ता के लिए आलसी प्रॉक्सी को शामिल करने के लिए अपने फैक्टरी को निर्देश / निर्देश भी देते हैं। लेकिन जब आपको वास्तव में उपयोगकर्ता जानकारी तक पहुंच की आवश्यकता होती है, तो आप प्रॉक्सी ऑब्जेक्ट का उपयोग कर सकते हैं जो तब वास्तविक उपयोगकर्ता ऑब्जेक्ट को लोड करेगा और उसके लिए संदेश रीडायरेक्ट करेगा।
अभी तक एक और दृश्य में आपको पोस्ट और यूजर जानकारी दोनों की ज़रूरत है, इसलिए यहां आप अपने पोस्ट फ़ैक्टरी को वास्तविक उपयोगकर्ता ऑब्जेक्ट का इस्तेमाल करने का निर्देश देते हैं।
Comments
Post a Comment