Agora, estou enfrentando a integração de um contêiner de inversão de controle (IoC) em um aplicativo existente, e estou procurando algumas recomendações sobre como isso pode ser realizado com mais facilidade com o objetivo final de reduzir o acoplamento, aumentando assim a testabilidade. Embora eu geralmente não classificasse a maioria das classes como objetos divinos , cada uma tem muitas responsabilidades e dependências ocultas por meio de estática, singletons e falta de interfaces.
Aqui estão alguns antecedentes de alguns dos desafios que precisam ser enfrentados:
- A injeção de dependência é pouco usada
- Os métodos estáticos são abundantes - tanto na fábrica quanto nos métodos auxiliares
- Singletons são bastante prevalentes
- As interfaces, quando usadas, não são muito granulares
- Os objetos geralmente recebem dependências desnecessárias por meio de classes base
Nossa intenção é que, na próxima vez que precisarmos fazer alterações em uma área específica, tentemos eliminar dependências que, na realidade, existem, mas que estão ocultas atrás de globais, como singletons e estáticas.
Suponho que isso torne o contêiner de IoC secundário à introdução da injeção de dependência, mas espero que exista um conjunto de práticas e recomendações que possam ser seguidas ou consideradas que nos ajudarão a romper essas dependências.