Trong ánh sáng của DRY , có vẻ như chỉ mong muốn lưu trữ một bộ sưu tập các đối tượng trò chơi liên quan trong một container. Tuy nhiên, người ta có thể cần các bộ sưu tập phụ của các đối tượng này trong các bối cảnh khác nhau. Có thể lưu trữ hợp lý các bộ phụ cụ thể này trong các thùng chứa phù hợp hơn. Điều này làm tăng nỗ lực theo dõi các đối tượng trên các container, ví dụ như khi các đối tượng bị xóa khỏi thế giới trò chơi.
Các khả năng để đơn giản hóa một thiết kế như vậy là gì và sự đánh đổi điển hình là gì?
Để minh họa:
Trong trò chơi nhập vai nhiều người chơi, máy chủ có thể chứa một bộ sưu tập các nhân vật trong bản đồ phù hợp để tra cứu theo id.
world
map<id, Character> allCharacters
Một nhân vật cũng có thể cư trú ở một cấp độ trò chơi nhất định. Để xác định tất cả các nhân vật có mặt ở một cấp độ, có vẻ phù hợp để giới thiệu một thùng chứa cho mỗi cấp độ chứa các ký tự hiện có trên đó. Bằng cách này bạn có thể thực thi logic chung cho tất cả các ký tự ở cấp độ đó.
world
map<id, Character> allCharacters
[levels]
level1
vector<Character> charactersOnPlayfield
level2
vector<Character> charactersOnPlayfield
...
Đi xa hơn nữa, khi một nhân vật tương tác với các thông điệp thế giới chỉ nên được chuyển đến các nhân vật trong phạm vi. Việc quản lý sở thích này có thể đạt được bằng cách chia mỗi cấp thành một lưới các ô, mỗi ô lần lượt lưu trữ các ký tự hiện đang đứng trên đó.
world
map<id, Character> allCharacters
[levels]
level1
vector<Character> charactersOnPlayfield
[cells]
cell1
vector<Character> charactersOnCell
cell2
vector<Character> charactersOnCell
...
level2
vector<Character> charactersOnPlayfield
[cells]
cell1
vector<Character> charactersOnCell
cell2
vector<Character> charactersOnCell
...
...
Các đối tượng Nhân vật ở các mức độ trừu tượng khác nhau đưa ra nhu cầu suy nghĩ cẩn thận về quyền sở hữu đối tượng và thời gian sống.
Lưu ý rằng các đối tượng Ký tự được lưu trữ trong các thùng chứa sẽ tự nhiên là các tham chiếu, không phải là bản sao. Ngoài ra, tôi giả định rằng không có bộ sưu tập rác tại chỗ.