Question

Je viens avec des objectifs de performance pour la nouvelle année, et je pensais que je serais amusant de mettre un but de réduire la taille de la base de code, en particulier BOILERPLATE. Une action que je suis venu avec pour répondre est d'utiliser Projet Lombok pour faire des haricots aussi courts qu'ils devraient l'être. Mais j'ai l'habitude de passer à côté des inconvénients à de 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

?
Était-ce utile?

La solution

Un important inconvénient est support IDE. Depuis Lombok est pas vraiment un changement de langue, et depuis votre IDE ne comprend que java, vous avez besoin d'un IDE soutien Lombok pour obtenir les choses fonctionnent bien. A partir de maintenant, qui est seulement Eclipse qui comprend Eclipse et IntelliJ. Si vous utilisez Eclipse qui pourrait être ok, mais rappelez-vous que vous prenez une décision pour les développeurs futurs.

Je vous suggère de vous envisager de passer une partie de votre code dans une langue moins d'apparat, comme groovy. Nous avons eu du succès en mouvement certains de nos logique métier et les modèles en groovy et il fonctionne vraiment bien.

Autres conseils

Une limitation de Lombok est le fait qu'il est étroitement lié au compilateur java. Depuis l'API processeur d'annotation ne permet la création de nouveaux fichiers lors de la compilation (et non la modification des fichiers existants) utilisations de l'API en tant que lombok un point d'entrée pour modifier le compilateur java. Malheureusement, ces modifications du compilateur font une utilisation intensive des API non publiques. L'utilisation peut être lombok une bonne idée, mais vous devez savoir que la mise à niveau de votre compilateur peut cassé votre code. La probabilité est faible, mais je me sens toujours mal à l'aise en utilisant des API non publiques.

Un inconvénient potentiel à quelque chose comme Lombok est que les setters / getters « disparus », des outils sources ne peuvent pas les aspects « reconnaître » de l'objet résultant qui lui donnent des qualités de « haricot », étant donné que ces qualités ne se manifeste que dans la classe compilée .

Un autre inconvénient est qu'il est encore un autre morceau de « magie noire » au sein de 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 arrive au moment de la compilation plutôt que l'exécution est en fait une bénédiction (à mon humble avis). Mais, tu ne vas pas être en mesure de réutiliser ou partager votre code sans le projet car il est l'ajout d'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 de ces éléments sont des inconvénients rédhibitoires, plutôt seulement les aspects à connaître de regarder en avant.

Dans mon code source d'opinion dans "Java + Lombok" n'est pas le code source Java plus. Je le vois comme quelque chose de similaire Borland société a fait il y a plusieurs années dans leur Borland C ++ Builder IDE pour VCL - ils ont introduit des « propriétés » dans le code de C introduire efficacement une sorte d'un nouveau langage de programmation qui n'a pas été C ++ plus (pas C ++ dans le sens de niveau de la langue C). Sources en utilisant « Java + Lombok » ne sont pas des sources valides dans le sens de la spécification du langage Java. De plus, je pense que les annotations ne sont pas conçus pour influencer le langage sémantique.

Il est une bibliothèque tierce partie, et il y a des développeurs qui ne connaissent pas bien.

IDE devrait soutenir les annotations de traitement (il existe des plugins pour Eclipse et IDEA).

Comme nous l'avons mentionné ci-dessus, votre code sera sans getters / setters. Elle conduit à des violations sonar / checkstyle.

Comme indiqué par l'utilisateur @Jcs dans une autre réponse, je voudrais ajouter.

Dans notre projet, nous, utilisent mapstruct qui est utilisé pour générer des classes Mapper, avant que le code est compilé, en utilisant MVN commande generate-sources, cela se fait à la phase de processus à l'aide de plug-in processeur Maven.

projet ajoute lombok le bytecode pour le getter / setter dans le fichier de classe à la phase de compilation.

depuis la phase de processus est exécuté avant la compilation, il trouve qu'il n'y a pas getter / setter disponible en classe.

Il y a des solutions de contournement disponibles pour exécuter la phase de compilation plus d'un. Voir cette git billet hub pour plus de détails.

Note: Je suis STS utiliserai au printemps et ide il est pris en charge par lombok:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top