Microsoft.Xna.Framework.Gameवर्ग एक है सेवाएं संपत्ति प्रोग्रामर वर्ग के प्रकार और विधि जोड़ने के लिए वर्ग का एक उदाहरण प्रदान करके अपने खेल के लिए एक सेवा को जोड़ने के लिए अनुमति देता है।
अब, AudioComponentसभी वर्गों और विधियों को पास करने की आवश्यकता होती है, बजाय इसके कि आप बस अपना Gameउदाहरण दें और सेवा को देखें। ( सेवा लोकेटर )
अब, क्योंकि खेलों में कई सेवाएं हैं (GraphicsDevice, SceneGraph, AudioComponent, EffectManager, et cetera), अब आप मूल रूप से गेम टू एवरीथिंग पास करेंगे।
तो क्यों न सिर्फ इन उदाहरणों को एक सिंगलटन बनाया जाए? ठीक है, क्योंकि सिंग्लेटन्स खराब हैं क्योंकि उनके पास एक वैश्विक स्थिति है, परीक्षण को रोकना, और अपने डिजाइन को बहुत अधिक भंगुर बनाना। सेवा लोकेटर समान रूप से कई के लिए एक विरोधी पैटर्न माना जाता है क्योंकि केवल एक वस्तु पर निर्भरता पारित करने के बजाय, आप एक सेवा लोकेटर (गेम) पास करते हैं जो कि बाकी सेवाओं के साथ उस वर्ग को जोड़े।
तो फिर XNA और गेम डेवलपमेंट में सेवाओं की सिफारिश क्यों की जाती है? क्या यह इसलिए है क्योंकि खेल नियमित कार्यक्रमों से अलग होते हैं और उनके घटकों के साथ बहुत अधिक जुड़े होते हैं और कक्षा के कामकाज के लिए आवश्यक हर घटक को पारित करना अत्यधिक बोझिल होगा? क्या गेम सर्विसेज अभी गेम डिज़ाइन में एक आवश्यक बुराई हैं? क्या ऐसे विकल्प हैं जो लंबी पैरामीटर सूची और युग्मन शामिल नहीं करते हैं?