Problema
Recentemente, li muito sobre Singletons serem ruins e como a injeção de dependência (que entendo como "usando interfaces") é melhor. Quando implementei parte disso com retornos de chamada / interfaces / DI e aderindo ao princípio de segregação de interface, acabei com uma bagunça.
As dependências de um pai da interface do usuário em que basicamente as de todos os seus filhos eram combinadas; portanto, quanto mais alto a hierarquia era um elemento da interface do usuário, mais inchado era o construtor.
No topo da hierarquia da interface do usuário, havia uma classe Application, contendo as informações sobre a seleção atual e uma referência a um modelo 3d que precisa refletir as alterações. A classe de aplicação estava implementando 8 interfaces, e isso era apenas a rotunda de um quinto dos produtos (/ interfaces) por vir!
Atualmente, trabalho com um singleton segurando a seleção atual e os elementos da interface do usuário com uma função para atualizar-se. Essa função desativa a árvore da interface do usuário e os elementos da interface do usuário e, em seguida, acessa o singleton da seleção atual conforme necessário. O código parece mais limpo para mim dessa maneira.
Pergunta
Um singleton pode ser apropriado para este projeto?
Se não, existe uma falha fundamental no meu pensamento e / ou implementação da DI que a torna tão complicada?
Informações adicionais sobre o projeto
Tipo: Cesto de compras para apartamentos, com sinos e assobios
Tamanho: 2 homens-mês para código e interface do usuário
Manutenção: Nenhuma atualização em execução, mas talvez a "versão 2.0" posterior
Ambiente: Usando C # no Unity, que usa uma Entidade Sistema de componentes
Em quase todos os casos, a interação do usuário aciona várias ações. Por exemplo, quando o usuário seleciona um item
- a parte da interface do usuário que mostra esse item e sua descrição precisa ser atualizada. Para isso, ele também precisa obter algumas informações de um modelo 3d para calcular o preço.
- na interface do usuário, o preço total geral precisa ser atualizado
- uma função correspondente em uma classe em um modelo 3d precisa ser chamada para exibir as alterações lá