Depende. Realmente hay 2 tipos de métodos estáticos:
- Métodos que son estáticos porque PUEDEN ser
- Métodos que son estáticos porque TIENEN que ser
En una base de código de tamaño pequeño a mediano, realmente puede tratar los dos métodos de manera intercambiable.
Si tiene un método que está en la primera categoría (puede ser estático) y necesita cambiarlo para acceder al estado de la clase, es relativamente sencillo averiguar si es posible convertir el método estático en un método de instancia.
Sin embargo, en una base de código grande, la gran cantidad de sitios de llamadas puede hacer que la búsqueda para ver si es posible convertir un método estático en uno no estático sea demasiado costosa. Muchas veces la gente verá la cantidad de llamadas y dirá "ok ... mejor no cambiar este método, sino crear uno nuevo que haga lo que necesito".
Eso puede resultar en:
- Mucha duplicación de código
- Una explosión en el número de argumentos de método
Ambas cosas son malas.
Entonces, mi consejo sería que si tiene una base de código de más de 200K LOC, solo haría que los métodos sean estáticos si son métodos que deben ser estáticos.
La refactorización de no estático a estático es relativamente fácil (solo agregue una palabra clave), por lo que si desea convertir un can-be-static en uno estático real más adelante (cuando necesite su funcionalidad fuera de una instancia), entonces puede hacerlo. Sin embargo, la refactorización inversa, convertir un método can-be-static en un método de instancia, es MUCHO más caro.
Con bases de código grandes, es mejor equivocarse por el lado de la facilidad de extensión, en lugar del lado de la pureza idealológica.
Por lo tanto, para proyectos grandes, no hagas las cosas estáticas a menos que lo necesites. Para proyectos pequeños, haga lo que más le guste.