As classes "Manager" podem ser problemáticas por vários motivos. Os dois principais motivos tendem a ser:
- o nome não é claro (o que realmente significa "gerenciamento" e é sempre o mesmo para todo tipo de coisa sendo gerenciada?)
- eles tendem a ser grupos de funcionalidades que violam o princípio da responsabilidade única (ou seja, que um tipo deve fazer uma coisa)
Muitas vezes, uma dessas razões causa ou implica a outra.
Essas questões são boas coisas a serem lembradas, mas elas não paralisam sua capacidade de realmente fazer o seu jogo . No final, ninguém vai se importar com o que suas aulas são chamadas ou o que elas fazem. Eles vão se importar com o seu jogo.
Geralmente, é muito fácil separar a maioria dos "gerentes" em duas partes:
a parte que armazena os objetos reais e fornece acesso a eles (que você pode chamar de "armazenamento", "repositório", "banco de dados", "cache" ou várias outras coisas. Esse é o tipo geralmente responsável pelo tempo de vida dos objetos, ou seja, quando um objeto é removido ou não está mais contido por uma instância desse tipo, ele deixa de existir.
a parte que processa os objetos reais e realiza algum trabalho neles. Ele pode atualizar esses objetos (então é um "atualizador" ou "simulação") ou pode desenhá-los (então é uma "gaveta" ou "renderizador"). Ou pode fazer outra coisa com eles; o importante é nomeá-lo de acordo com seu objetivo principal. Você geralmente atribui a instâncias desse tipo uma instância ou referência a instâncias do primeiro tipo (aquela que apenas lida com a vida útil dos objetos).
Pode-se argumentar razoavelmente que o nome do primeiro tipo pode incluir gerente (pois "gerencia a vida útil de" alguns objetos). O mundo não terminará se você nomear seu tipo dessa maneira, embora seja necessário aguentar as reações instintivas da forma "não chame as coisas de gerentes" com bastante frequência; portanto, você pode evitá-lo apenas por isso.