이 Microsoft.Xna.Framework.Game
클래스에는 프로그래머가 클래스 유형과 클래스 인스턴스를 Add 메서드에 제공하여 게임에 서비스를 추가 할 수 있는 Services 속성이 있습니다.
이제 AudioComponent
필요한 모든 클래스와 메소드 에 전달하는 대신 Game
인스턴스를 전달 하고 서비스를 찾아보십시오. ( 서비스 로케이터 )
이제 게임에는 많은 서비스 (GraphicsDevice, SceneGraph, AudioComponent, EffectsManager 등)가 있으므로 기본적으로 모든 것을 게임에 전달합니다.
그렇다면 왜 이러한 인스턴스를 싱글 톤으로 만들지 않겠습니까? 글쎄, 싱글 톤은 전역 상태를 가지고 있기 때문에 나쁘기 때문에 테스트를 방지하고 디자인을 훨씬 취하기 쉽게 만듭니다. 서비스 로케이터는 객체에 대한 종속성을 전달하는 대신 해당 클래스를 나머지 서비스와 연결하는 서비스 로케이터 (게임)를 전달하기 때문에 많은 사람들에게 반 패턴으로 간주됩니다.
그렇다면 XNA 및 게임 개발에서 왜 서비스가 권장됩니까? 게임이 일반 프로그램과 다르고 구성 요소와 밀접하게 관련되어 있고 클래스 기능에 필요한 모든 구성 요소를 전달해야하기 때문에 매우 번거 롭습니까? 게임 디자인에서 게임 서비스는 그저 필요한 악인가? 긴 파라미터 목록과 커플 링을 포함하지 않는 대안이 있습니까?