Microsoft.Xna.Framework.Game
Клас має Services властивість , яке дозволяє програмісту додати службу в свою гру, надаючи тип класу і екземпляр класу для методу Add.
Тепер, замість того, щоб передавати AudioComponent
всі класи та методи, які цього вимагають, ви просто передаєте свій Game
примірник і шукаєте службу. ( Локатор обслуговування )
Тепер, оскільки в іграх є багато сервісів (GraphicsDevice, SceneGraph, AudioComponent, EffectsManager та ін.), Ви в основному проходите гру до всього.
То чому б просто не зробити ці екземпляри Singleton? Ну, тому що одиночні погані, оскільки вони мають глобальний стан, запобігають тестуванню та роблять ваш дизайн набагато крихкішим. Локатори сервісів для багатьох однаково вважаються анти-зразком, оскільки замість того, щоб просто передавати залежність об'єкту, ви передаєте локатор сервісу (Гра), який з'єднує цей клас з рештою сервісів.
Тож чому чомусь рекомендуються Послуги в розробці XNA та ігор? Це тому, що ігри відрізняються від звичайних програм і сильно переплітаються зі своїми компонентами, і тому, що потрібно передати кожен компонент, необхідний для функціонування класу, було б дуже громіздко? Чи ігрові послуги просто тоді є необхідним злом у дизайні ігор? Чи є альтернативи, які не включають тривалі списки параметрів та з'єднання?