ओओपी में ग्लोबल्स बुराई के कारण बहुत सारे हैं ।
यदि साझाकरण की आवश्यकता वाली वस्तुओं की संख्या या आकार फ़ंक्शन मापदंडों में कुशलता से पारित होने के लिए बहुत बड़ी है, तो आमतौर पर हर कोई वैश्विक वस्तु के बजाय निर्भरता इंजेक्शन की सिफारिश करता है ।
हालांकि, इस मामले में जहां लगभग सभी को एक निश्चित डेटा संरचना के बारे में जानने की जरूरत है, डिपेंडेंसी इंजेक्शन वैश्विक वस्तु से बेहतर क्यों है?
उदाहरण (एक सरलीकृत एक, आम तौर पर बिंदु दिखाने के लिए, एक विशिष्ट अनुप्रयोग में बहुत अधिक गहराई के बिना)
कई वर्चुअल वाहन हैं, जिनके पास प्रकार, नाम, रंग, गति, स्थिति आदि से बड़ी संख्या में गुण और अवस्थाएं हैं, कई उपयोगकर्ता उन्हें रिमोट कंट्रोल कर सकते हैं, और बड़ी संख्या में ईवेंट (दोनों उपयोगकर्ता-) शुरू और स्वचालित) अपने राज्यों या गुणों का एक बहुत बदल सकते हैं।
भोला समाधान सिर्फ उनमें से एक वैश्विक कंटेनर बनाने के लिए होगा, जैसे
vector<Vehicle> vehicles;
जिसे कहीं से भी एक्सेस किया जा सकता है।
अधिक ओओपी-अनुकूल समाधान कंटेनर के उस वर्ग का सदस्य होना होगा जो मुख्य ईवेंट लूप को संभालता है, और इसके निर्माता में तत्काल किया जाता है। हर वर्ग जिसे इसकी आवश्यकता है, और मुख्य धागे का सदस्य है, को उनके निर्माता में एक पॉइंटर के माध्यम से कंटेनर तक पहुंच दी जाएगी। उदाहरण के लिए, यदि कोई बाहरी संदेश नेटवर्क कनेक्शन के माध्यम से आता है, तो पार्सिंग को संभालने वाले एक वर्ग (प्रत्येक कनेक्शन के लिए एक) पर ले जाएगा, और पार्सर को एक पॉइंटर या संदर्भ के माध्यम से कंटेनर तक पहुंच होगी। यदि पार्स किए गए संदेश का परिणाम कंटेनर के एक तत्व में या तो परिवर्तन होता है, या कार्रवाई करने के लिए उसमें से कुछ डेटा की आवश्यकता होती है, तो इसे सिग्नल और स्लॉट्स (या इससे भी बदतर) के माध्यम से हजारों वेरिएबल्स को टॉस करने की आवश्यकता के बिना संभाला जा सकता है। उन्हें पार्सर में संग्रहीत करना बाद में जिसे पार्सर कहा जाता है) द्वारा पुनर्प्राप्त किया जाना है। बेशक, सभी वर्ग जो निर्भरता इंजेक्शन के माध्यम से कंटेनर तक पहुंच प्राप्त करते हैं, एक ही धागे का हिस्सा हैं। विभिन्न धागे सीधे इसे एक्सेस नहीं करेंगे, लेकिन अपना काम करेंगे और फिर मुख्य धागे को सिग्नल भेजेंगे, और मुख्य धागे में स्लॉट कंटेनर को अपडेट करेंगे।
हालांकि, अगर अधिकांश वर्गों को कंटेनर तक पहुंच प्राप्त होगी, तो क्या यह वास्तव में एक वैश्विक से अलग है? अगर कंटेनर में कई वर्गों के डेटा की जरूरत है, तो क्या "निर्भरता इंजेक्शन तरीका" सिर्फ एक प्रच्छन्न वैश्विक नहीं है?
एक उत्तर धागा सुरक्षा होगा: भले ही मैं ध्यान रखता हूं कि वैश्विक कंटेनर का दुरुपयोग न करें, हो सकता है कि भविष्य में एक और डेवलपर, एक करीबी समय सीमा के दबाव में, फिर भी सभी का ख्याल रखे बिना, एक अलग धागे में वैश्विक कंटेनर का उपयोग करेगा। टक्कर के मामलों। हालांकि, यहां तक कि निर्भरता इंजेक्शन के मामले में, कोई व्यक्ति किसी अन्य थ्रेड में चलने वाले को एक संकेतक दे सकता है, जिससे वही समस्याएं हो सकती हैं।