Depende. Na verdade, existem 2 tipos de métodos estáticos:
- Métodos que são estáticos porque PODEM ser
- Métodos que são estáticos porque TÊM que ser
Em uma base de código de tamanho pequeno a médio, você pode realmente tratar os dois métodos de forma intercambiável.
Se você tem um método que está na primeira categoria (pode ser estático) e precisa alterá-lo para acessar o estado da classe, é relativamente simples descobrir se é possível transformar o método estático em um método de instância.
Em uma grande base de código, no entanto, o grande número de sites de chamada pode tornar a pesquisa para ver se é possível converter um método estático em um não estático muito caro. Muitas vezes as pessoas verão o número de ligações e dirão "ok ... é melhor não mudar esse método, mas sim criar um novo que faça o que eu preciso".
Isso pode resultar em:
- Muita duplicação de código
- Uma explosão no número de argumentos do método
Essas duas coisas são ruins.
Portanto, meu conselho seria que, se você tiver uma base de código acima de 200K LOC, eu só tornaria os métodos estáticos se eles fossem métodos estáticos obrigatórios.
A refatoração de não estático para estático é relativamente fácil (basta adicionar uma palavra-chave), então se você quiser transformar um pode ser estático em um estático real mais tarde (quando precisar da funcionalidade fora de uma instância), você pode. No entanto, a refatoração inversa, transformando um método can-be-static em um método de instância é MUITO mais caro.
Com grandes bases de código, é melhor errar pelo lado da facilidade de extensão do que pelo lado da pureza idealógica.
Portanto, para grandes projetos, não torne as coisas estáticas, a menos que você precise que elas o sejam. Para pequenos projetos, basta fazer o que você mais gosta.