Il y a quelques mois, j'ai commencé à travailler sur un nouveau projet, et lorsque je parcourais le code, il me frappait la quantité de méthodes statiques utilisées. Non seulement les méthodes utilitaires en tant que collectionToCsvString(Collection<E> elements)
, mais aussi beaucoup de logique métier y sont conservées.
Quand j'ai demandé au gars responsable de la raison derrière cela, il a dit que c'était un moyen d' échapper à la tyrannie de Spring . Cela va quelque chose autour de ce processus de réflexion: pour mettre en œuvre une méthode de création de reçu client, nous pourrions avoir un service
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Maintenant, le gars a dit qu'il déteste avoir des classes gérées inutilement par Spring, essentiellement parce qu'il impose la restriction que les classes clientes doivent être elles-mêmes des beans Spring. Nous finissons par tout gérer par Spring, ce qui nous oblige à peu près à travailler avec des objets sans état d'une manière procédurale. Plus ou moins ce qui est indiqué ici https://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
Donc, au lieu du code ci-dessus, il a
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Je pourrais argumenter au point d'éviter que Spring gère nos cours lorsque cela est possible, mais ce que je ne vois pas, c'est l'avantage d'avoir tout statique. Ces méthodes statiques sont également sans état, donc pas très OO. Je me sentirais plus à l'aise avec quelque chose
new CustomerReceiptCreator().createReceipt()
Il affirme que les méthodes statiques ont des avantages supplémentaires. À savoir:
- Plus facile à lire. Importez la méthode statique et nous n'avons qu'à nous soucier de l'action, pas de la classe qui la fait.
- Est évidemment une méthode sans appels DB, donc bon marché en termes de performances; et c'est une bonne chose de le préciser, de sorte que le client potentiel doive entrer dans le code et vérifier cela.
- Écriture de tests plus facile.
Mais j'ai juste l'impression qu'il y a quelque chose qui ne va pas complètement dans tout ça, donc j'aimerais entendre les réflexions de développeurs plus expérimentés à ce sujet.
Donc ma question est, quels sont les pièges potentiels de cette façon de programmer?
static
méthode que vous illustrez ci-dessus n'est qu'une méthode d'usine ordinaire. Rendre les méthodes d'usine statiques est la convention généralement acceptée, pour un certain nombre de raisons impérieuses. La question de savoir si la méthode d'usine est appropriée ici est différente.