जब भी मैं कर सकता हूं, मैं वस्तुओं के बीच संचार को अनुरोध-और-प्रतिक्रिया मॉडल में प्रतिबंधित करने का प्रयास करता हूं। मेरे कार्यक्रम में वस्तुओं पर एक आंशिक आंशिक आदेश है, जैसे कि किसी भी दो वस्तुओं के बीच A और B के बीच, A से सीधे या परोक्ष रूप से B की विधि या B के लिए, प्रत्यक्ष या अप्रत्यक्ष रूप से A की विधि को कॉल करने का एक तरीका हो सकता है। , लेकिन ए और बी के लिए एक-दूसरे के तरीकों को पारस्परिक रूप से कॉल करना संभव नहीं है। कभी-कभी, निश्चित रूप से, आप एक विधि के कॉलर से पिछड़े संचार करना चाहते हैं। कुछ तरीके हैं जो मुझे ऐसा करना पसंद है, और दोनों में से कोई कॉलबैक नहीं है।
एक तरीका विधि कॉल के रिटर्न मूल्य में अधिक जानकारी शामिल करना है, जिसका अर्थ है कि क्लाइंट कोड को यह तय करना होगा कि प्रक्रिया के नियंत्रण के बाद इसके साथ क्या करना है।
दूसरा तरीका यह है कि आप आपसी बच्चे को बुलाएं। यही है, अगर A, B को एक विधि कहता है, और B को A को कुछ सूचनाओं को संप्रेषित करने की आवश्यकता है, B, C पर एक विधि को कहता है, जहाँ A और B दोनों C को कॉल कर सकते हैं, लेकिन C A या B को कॉल नहीं कर सकता है। B के बाद C से सूचना प्राप्त करने के लिए जिम्मेदार है। A. ध्यान दें कि यह वास्तव में मेरे द्वारा प्रस्तावित पहले तरीके से मौलिक रूप से अलग नहीं है। ऑब्जेक्ट A अभी भी केवल रिटर्न मान से जानकारी प्राप्त कर सकता है; ऑब्जेक्ट ए में से कोई भी विधि B या C. द्वारा लागू नहीं की जाती है। इस ट्रिक की भिन्नता C को विधि के पैरामीटर के रूप में पास करना है, लेकिन C से A और B के संबंधों पर प्रतिबंध अभी भी लागू होता है।
अब, महत्वपूर्ण सवाल यह है कि मैं इस तरह से चीजें करने पर जोर क्यों देता हूं। इसके तीन मुख्य कारण हैं:
- यह मेरी वस्तुओं को अधिक शिथिल रखता है। मेरी वस्तुएं अन्य वस्तुओं को एनकैप्सुलेट कर सकती हैं, लेकिन वे कभी भी कॉलर के संदर्भ पर निर्भर नहीं करेंगे, और संदर्भ कभी भी एन्कैप्सुलेटेड ऑब्जेक्ट्स पर निर्भर नहीं करेगा।
- यह मेरे नियंत्रण प्रवाह को आसान बनाता है। यह मान लेना अच्छा है कि एकमात्र कोड जो आंतरिक
self
विधि की स्थिति को बदल सकता है, जबकि एक विधि निष्पादित एक विधि और कोई अन्य नहीं है। यह उसी तरह का तर्क है जो समवर्ती वस्तुओं पर म्यूटेक्स लगाने के लिए नेतृत्व कर सकता है।
- यह मेरी वस्तुओं के इनकैप्सुलेटेड डेटा पर आक्रमणकारियों को बचाता है। सार्वजनिक विधियों को आक्रमणकारियों पर निर्भर होने की अनुमति है, और उन आक्रमणकारियों का उल्लंघन किया जा सकता है यदि एक विधि को बाहरी रूप से कहा जा सकता है जबकि दूसरा पहले से ही निष्पादित हो रहा है।
मैं कॉलबैक के सभी उपयोगों के खिलाफ नहीं हूं। मेरी नीति के अनुसार "कॉल करने वाले को कभी नहीं" रखने पर, यदि कोई वस्तु B पर एक विधि का आह्वान करती है और उस पर कॉलबैक पास करती है, तो कॉलबैक A की आंतरिक स्थिति को नहीं बदल सकता है, और इसमें A द्वारा सम्मिलित की गई वस्तुएं भी शामिल हैं। A के संदर्भ में वस्तुएँ। दूसरे शब्दों में, कॉलबैक केवल बी द्वारा दी गई वस्तुओं पर तरीकों को लागू कर सकता है। कॉलबैक, वास्तव में उसी प्रतिबंध के तहत है जो बी है।
टाई करने के लिए एक अंतिम ढीला अंत यह है कि मैं किसी भी शुद्ध कार्य के आह्वान की अनुमति दूंगा, इस आंशिक आदेश की परवाह किए बिना मैं बात कर रहा हूं। शुद्ध कार्य उन तरीकों से थोड़े अलग हैं जिनमें वे परिवर्तनशील स्थिति या साइड इफेक्ट्स पर निर्भर नहीं हो सकते हैं या उन पर निर्भर नहीं हो सकते हैं, इसलिए उनके बारे में कोई चिंता नहीं है।