Quels sont les risques avec le projet Lombok?
Je viens avec des objectifs de performance pour la nouvelle année, et je pensais que je serais amusant de mettre un objectif de réduire la taille de la base de code, en particulier standard. Une action que j'ai proposée Pour résoudre ce problème est d'utiliser Project Lombok pour rendre les haricots aussi courts qu'ils devraient l'être. Mais j'ai l'habitude de négliger les inconvénients des nouveaux logiciels et approches, donc je compte sur la communauté Stack Overflow: Quelqu'un peut-il me dire pourquoi Lombok est une mauvaise idée?
6 réponses
Un inconvénient majeur est le support IDE. Puisque Lombok n'est pas réellement un changement de langue, et puisque votre IDE ne comprend que java, vous aurez besoin d'un IDE qui prend en charge Lombok pour que les choses fonctionnent correctement. À partir de Maintenant, c'est seulement Eclipse qui inclut Eclipse et IntelliJ. Si vous utilisez eclipse, cela pourrait être correct, mais rappelez-vous que vous prenez également une décision pour les futurs développeurs.
Je vous suggère d'envisager de déplacer une partie de votre code dans un langage moins cérémoniel tel que groovy. Nous avons réussi à déplacer certaines de nos logiques et modèles métier dans groovy et cela fonctionne très bien.
Une limitation de Lombok est le fait qu'il est étroitement lié au compilateur java. Étant donné que L'API du processeur d'annotation permet uniquement la création de nouveaux fichiers lors de la compilation (et non la modification des fichiers existants), lombok utilise cette API comme point d'entrée pour modifier le compilateur java. Malheureusement, ces modifications du compilateur font un usage intensif des API non publiques. Utiliser lombok peut être une bonne idée, mais vous devez être conscient que la mise à niveau de votre compilateur peut casser votre code. Le la probabilité est faible mais je me sens toujours mal à l'aise d'utiliser des API non publiques.
Un inconvénient potentiel à quelque chose comme Lombok est qu'avec les setters/getters "manquants", les outils source peuvent ne pas" reconnaître "les aspects de l'objet résultant qui lui donnent des qualités" bean", puisque ces qualités ne se manifestent que dans la classe compilée.
Un autre inconvénient est que c'est encore un autre morceau de" magie noire " dans la chaîne d'outils. Heureusement, il semble être un morceau plutôt Bénin (Je ne l'ai pas utilisé), et le fait que cela se produit au moment de la compilation plutôt qu'à l'exécution est en fait une bénédiction (à mon humble avis). Mais, vous ne pourrez pas réutiliser ou partager votre code sans le projet car il ajoute des artefacts à votre base de code. Ainsi, alors que le fichier de classe compilé peut être un "POJO", je dirais que votre code source n'est pas un POJO.
Aucun d'entre eux ne sont des inconvénients paralysants, plutôt que des aspects à prendre en compte.
À mon avis, le code source dans "Java + Lombok" n'est plus le code source Java. Je le vois comme quelque chose de similaire Borland company a fait il y a de nombreuses années dans leur IDE Borland C++ Builder pour VCL-ils ont introduit des "propriétés" dans le code C++ introduisant efficacement une sorte de nouveau langage de programmation qui n'était plus C++ (pas C++ dans le sens de la norme du langage C++). Les Sources utilisant "Java + Lombok" ne sont pas des sources valides au sens de la spécification du langage Java. De plus je pense que les annotations n'étaient pas conçu pour influencer la sémantique du langage.
C'est une bibliothèque tierce, et il y a des développeurs qui ne la connaissent pas bien.
IDE devrait prendre en charge le traitement des annotations (il existe des plugins pour IDEA et Eclipse).
Comme mentionné ci-dessus, votre code sera sans getters/setters. Cela conduit à des violations de sonar/checkstyle.
Comme indiqué par l'utilisateur @ Jcs dans une autre réponse, je voudrais ajouter plus.
Dans notre projet, nous utilisons mapstruct qui est utilisé pour générer des classes de mappeur, avant que le code ne soit compilé, en utilisant la commande mvn generate-sources, cela se fait en phase de processus en utilisant le plugin de processeur Maven.
Project lombok ajoute le bytecode pour le getter/setter dans le fichier de classe à la phase de compilation.
Comme la phase du processus est exécutée avant la compilation, il trouve qu'il n'y a pas getter / setter disponible en classe.
Il existe des solutions de contournement disponibles pour exécuter plusieurs phases de compilation. Voir ce ticket git hub pour plus de détails.
Note: j'utilise STS ide par Spring et il est supporté par lombok:)