Dipende. Esistono davvero 2 tipi di metodi statici:
- Metodi statici perché POSSONO esserlo
- Metodi statici perché DEVONO esserlo
In una base di codice di piccole e medie dimensioni puoi davvero trattare i due metodi in modo intercambiabile.
Se hai un metodo che si trova nella prima categoria (can-be-static), e devi cambiarlo per accedere allo stato della classe, è relativamente semplice capire se è possibile trasformare il metodo statico in un metodo di istanza.
In una grande base di codice, tuttavia, il numero di siti di chiamata potrebbe rendere la ricerca per vedere se è possibile convertire un metodo statico in uno non statico troppo costoso. Molte volte le persone vedranno il numero di chiamate e diranno "ok ... meglio non cambiare questo metodo, ma crearne uno nuovo che fa quello che mi serve".
Ciò può comportare:
- Molta duplicazione del codice
- Un'esplosione nel numero di argomenti del metodo
Entrambe queste cose sono cattive.
Quindi, il mio consiglio è che se si dispone di una base di codice superiore a 200K LOC, renderei i metodi statici solo se sono metodi statici.
Il refactoring da non statico a statico è relativamente facile (basta aggiungere una parola chiave), quindi se vuoi trasformare un can-be-static in uno statico effettivo in un secondo momento (quando hai bisogno della sua funzionalità al di fuori di un'istanza) puoi farlo. Tuttavia, il refactoring inverso, che trasforma un can-be-static in un metodo di istanza, è MOLTO più costoso.
Con basi di codice di grandi dimensioni è meglio sbagliare sul lato della facilità di estensione, piuttosto che sul lato della purezza dell'idea logica.
Quindi, per i grandi progetti non rendere le cose statiche a meno che non sia necessario che lo siano. Per piccoli progetti, fai quello che ti piace di più.