Các Microsoft.Xna.Framework.Game
lớp học có một dịch vụ bất động sản, cho phép các lập trình viên để thêm một dịch vụ trò chơi của họ để bằng cách cung cấp các loại hình lớp và một thể hiện của lớp để Add phương pháp.
Bây giờ, thay vì phải truyền một AudioComponent
cho tất cả các lớp và phương thức yêu cầu nó, thay vào đó bạn chỉ cần truyền Game
ví dụ của bạn và tra cứu dịch vụ. ( Định vị dịch vụ )
Giờ đây, vì các trò chơi có nhiều dịch vụ (GraphicsDevice, SceneGraph, AudioComponent, EffectsManager, et cetera), nên về cơ bản bạn sẽ chuyển Game sang mọi thứ.
Vậy tại sao không biến những trường hợp này thành Singleton? Chà, bởi vì Singletons rất tệ bởi vì chúng có trạng thái toàn cầu, ngăn chặn thử nghiệm và làm cho thiết kế của bạn dễ vỡ hơn nhiều. Các trình định vị dịch vụ được coi là một mô hình chống đối với nhiều người vì thay vì chỉ truyền phụ thuộc vào một đối tượng, bạn chuyển một trình định vị dịch vụ (Trò chơi) kết hợp với các dịch vụ còn lại.
Vậy thì tại sao Dịch vụ được đề xuất trong XNA và phát triển trò chơi? Có phải vì các trò chơi khác với các chương trình thông thường và rất đan xen với các thành phần của chúng và phải vượt qua mọi thành phần cần thiết cho hoạt động của một lớp sẽ rất cồng kềnh? Có phải Dịch vụ trò chơi sau đó là một điều ác cần thiết trong thiết kế trò chơi? Có những lựa chọn thay thế không liên quan đến danh sách tham số dài và khớp nối?