Un paio di mesi fa ho iniziato a lavorare in un nuovo progetto, e quando ho letto il codice mi sono accorto della quantità di metodi statici usati. Non solo i metodi di utilità come collectionToCsvString(Collection<E> elements)
, ma anche una grande quantità di logica aziendale è contenuta in essi.
Quando ho chiesto al ragazzo responsabile della logica dietro a questo, ha detto che era un modo di fuggire dalla tirannia di Spring . Va in giro questo processo di pensiero: per implementare un metodo di creazione scontrino cliente, potremmo avere un servizio
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Ora, il ragazzo ha detto che non gli piace avere classi gestite inutilmente da Spring, fondamentalmente perché impone la restrizione che le classi client debbano essere Spring bean stesse. Finiamo per avere tutto gestito da Spring, che praticamente ci costringe a lavorare con oggetti stateless in modo procedurale. Più o meno ciò che è affermato qui link
Quindi, invece del codice precedente, ha
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Potrei argomentare sul punto di evitare Spring che gestisce le nostre classi quando possibile, ma quello che non vedo è il vantaggio di avere tutto statico. Questi metodi statici sono anche stateless, quindi anche non molto OO. Mi sentirei più a mio agio con qualcosa come
new CustomerReceiptCreator().createReceipt()
Afferma che i metodi statici hanno alcuni vantaggi aggiuntivi. Vale a dire:
- Più facile da leggere. Importa il metodo statico e abbiamo solo bisogno di cura sull'azione, non su ciò che la classe sta facendo.
- È ovviamente un metodo privo di chiamate DB, quindi a buon mercato dal punto di vista delle prestazioni; ed è una buona cosa per chiarire, in modo che il potenziale cliente abbia bisogno di entrare il codice e controllalo.
- Più facile scrivere test.
Ma sento che non c'è qualcosa di completamente corretto in questo, quindi mi piacerebbe sentire alcuni pensieri più esperti degli sviluppatori su questo.
Quindi la mia domanda è: quali sono le potenziali insidie di questo modo di programmazione?