Pregunta

Voy a subir con los objetivos de rendimiento para el nuevo año, y pensé que sería divertido poner una meta para reducir el tamaño de la base de código, sobre todo repetitivo. Una acción que yo he llegado con hacer frente a esto es utilizar Proyecto Lombok para hacer que los granos tan corto como deberían ser. Pero tengo la costumbre de pasar por alto aspectos negativos de nuevo software y enfoques, así que estoy confiando en la comunidad de desbordamiento de pila: ¿Puede alguien decirme por qué Lombok es una mala idea

?
¿Fue útil?

Solución

Una desventaja importante es el soporte IDE. Desde Lombok no es en realidad un cambio de idioma, y ??desde su IDE Java sólo entiende, tendrá un IDE que soporta Lombok para que todo funcione bien. A partir de ahora, que sólo se Eclipse que incluye Eclipse y IntelliJ. Si utiliza eclipsar que podría estar bien, pero recuerde que usted está tomando una decisión para los desarrolladores futuras.

Yo te sugeriría que se tiene en cuenta el traslado de algunos de su código en un lenguaje menos ceremonial como maravilloso. Hemos tenido éxito en movimiento algunas de nuestra lógica de negocio y modelos en maravilloso y funciona muy bien.

Otros consejos

Una limitación de Lombok es el hecho de que está estrechamente relacionado con el compilador de Java. Dado que la API de procesador de anotación sólo permite la creación de nuevos archivos durante la compilación (y no la modificación de los archivos existentes) usos Lombok esa API como un punto de entrada para modificar el compilador Java. Por desgracia, estas modificaciones del compilador hacen un uso intensivo de las API que no son públicas. El uso de Lombok puede ser una idea buena pero hay que tener en cuenta que al actualizar el compilador puede rompió su código. La probabilidad es baja, pero siempre me siento incómodo el uso de las API que no son públicas.

Una desventaja potencial para algo así como Lombok es que con los setters / getters "perdido", herramientas de código no pueden "reconocer" los aspectos del objeto resultante que le dan cualidades de "Grano", ya que esas cualidades sólo se manifiestan en la clase compilada .

Otra desventaja es que es una pieza más de la "magia negro" dentro de la cadena de herramientas. Afortunadamente, parece ser una pieza bastante benigno (no he usado), y el hecho de que sucede en tiempo de compilación en lugar de tiempo de ejecución es en realidad una bendición (en mi humilde opinión). Sin embargo, no vas a ser capaz de volver a utilizar o compartir su código sin el proyecto ya que es la adición de artefactos para su base de código. Así, mientras que el archivo de clase compilado puede ser un "POJO", yo diría que su código fuente no es un POJO.

Ninguno de estos son inconvenientes paralizantes, y no sólo los aspectos a tener en cuenta mirando hacia adelante.

En mi opinión código fuente en "Java + Lombok" no es código fuente de Java más. Lo veo como algo similar Borland compañía hizo hace muchos años en su ++ Builder IDE Borland C para VCL - introdujeron las "propiedades" en el código C ++ para introducir efectivamente una especie de un nuevo lenguaje de programación que no era C ++ más (no en C ++ en el sentido de estándar del lenguaje C ++). Fuentes utilizando "Java + Lombok" no son fuentes válidas en sentido de la especificación del lenguaje Java. Por otra parte creo que las anotaciones no fueron diseñados para el lenguaje influencia semántica.

Es una biblioteca de terceros, y hay desarrolladores que no se conocen bien.

IDE debe apoyar anotaciones de procesamiento (hay plugins para IDEA y Eclipse).

Como se mencionó anteriormente, el código no podrá contar con getters / setters. Se lleva a violaciónes de sonar / Checkstyle.

Como se ha señalado por el usuario @Jcs en otra respuesta, me gustaría añadir más.

En nuestro proyecto, están utilizando mapstruct que se utiliza para generar asignador de clases, antes de compilar el código, usando MVN-generan fuentes de comandos, esto se hace en la fase de proceso usando el plugin de maven procesador.

Lombok proyecto añade el código de bytes para el captador / definidor en el archivo de clase en la fase de compilación.

desde fase de proceso se ejecuta antes de la compilación, se encuentra que no existe captador / definidor disponibles en la clase.

Existen algunas soluciones disponibles para ejecutar la fase de compilación más de uno. Ver este git billete concentrador para más detalles.

Nota: Estoy usando STS ide para la primavera y el apoyo de Lombok:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top