Estou ouvindo opiniões conflitantes, como:
- "As aulas de gerente dedicado quase nunca são a ferramenta de engenharia certa"
- "As aulas de gerente dedicado são (atualmente) a melhor maneira de sobreviver a um grande projeto com milhares de recursos"
Vamos dar uma classe clássica do ResourceManager que possui a seguinte funcionalidade:
- Carrega ativos (texturas, áudio, modelos 3D etc.)
- Garante que os ativos sejam carregados apenas uma vez, mantendo um cache
- A referência conta os ativos para determinar se eles podem ser desalocados
- Oculta a origem dos ativos reais (por exemplo, pode haver um arquivo por ativo ou todos os ativos em um arquivo de pacote ou os ativos podem até ser carregados pela rede)
- Pode recarregar ativos sem reiniciar o programa, o que é extremamente útil para os artistas que trabalham no jogo.
Vamos também tirar o argumento "singletons ruins" da mesa , fingindo que esses objetos ResourceManager não são singletons e, em vez disso, são transmitidos por injeção de dependência .
Depois, há o argumento "use a factory" ou "chame de fábrica". Meu problema com isso é que, sim, é uma fábrica, mas também é um cache e um recarregador (por falta de uma palavra melhor). Chamar isso de fábrica não o descreve adequadamente e, se eu o tornar uma fábrica adequada, onde é implementado o cache e o recarregamento?
Concordo que as classes "Gerente" geralmente são um sintoma de arquitetura ruim, mas nesse caso específico, como ela poderia ser reestruturada e ainda manter toda a funcionalidade ? É uma situação em que uma classe "Gerente" é realmente apropriada?