Microsoft.Xna.Framework.Game
Klasa ma Services właściwość, która pozwala programiście dodać usługę do swojej gry poprzez dostarczanie rodzaj klasy i instancję klasy do metody Add.
Teraz zamiast przekazywać AudioComponent
do wszystkich klas i metod, które tego wymagają, wystarczy przekazać Game
instancję i wyszukać usługę. (Lokalizator usług )
Ponieważ gry mają wiele usług (GraphicsDevice, SceneGraph, AudioComponent, EffectsManager, itd.), Teraz zasadniczo będziesz przekazywać grę do wszystkiego.
Dlaczego więc nie uczynić z tych przypadków singletonów? Cóż, ponieważ Singletony są złe, ponieważ mają stan globalny, zapobiegają testowaniu i sprawiają, że projekt jest znacznie bardziej kruchy. Lokalizatory usług są równie uważane za anty-wzorzec dla wielu, ponieważ zamiast przekazywać zależność od obiektu, podajesz lokalizator usług (Gra), który łączy tę klasę z resztą usług.
Dlaczego więc Usługi są zalecane w XNA i tworzeniu gier? Czy to dlatego, że gry różnią się od zwykłych programów i są ściśle powiązane ze swoimi komponentami, a konieczność przejścia każdego komponentu niezbędnego do funkcjonowania klasy byłaby bardzo uciążliwa? Czy usługi gier są zatem niezbędnym złem w projektowaniu gier? Czy istnieją alternatywy, które nie wymagają długich list parametrów i łączenia?