El nuevo director técnico de una importante fábrica comenzó a causar problemas cuando llegó por primera vez y no se le permitió usar Lombok.

  El nuevo director técnico llegó incluso a prohibir que todo desarrollo dentro de la empresa utilice Lombok. Sin embargo, no se dieron razones claras y convincentes.

Así que vino a conversar conmigo y me preguntó si esta solicitud era razonable. Respecto a este asunto, creo que el punto de partida del director técnico es bueno, pero su enfoque es un poco extremo.

La razón por la que digo que el punto de partida es bueno es porque el uso de Lombok trae muchos problemas y, personalmente, no lo uso activamente en el trabajo.

La razón por la que no lo uso activamente es porque todavía se usan los códigos de algunos colegas, por lo que también me veo obligado a instalar los complementos de Lombok.

Ahora que he hablado sobre este tema, hablaré brevemente sobre algunos de mis puntos de vista.

¿Cuáles son los beneficios de Lombok?
Lombok es una herramienta Java muy práctica que se puede utilizar para ayudar a los desarrolladores a eliminar el código detallado de Java, especialmente para objetos Java simples (POJO). Lo hace a través de anotaciones.

Si sabe más sobre Lombok, puede omitir este párrafo primero y mirar hacia atrás directamente. Si no está muy familiarizado con él, puede entenderlo brevemente.

Para usar Lombok en un proyecto, se requieren tres pasos:

1. Instale el complemento Lombok en el IDE

Actualmente, Lombok admite una variedad de IDE, incluidos Eclipse, Intellji IDEA, Myeclipse, etc.

El método de instalación en IDEA es el siguiente:

2. Dependencias relacionadas con la importación

Lombok admite el uso de múltiples herramientas de compilación para importar dependencias. Actualmente, admite principalmente maven, gardle, ant, etc.

Por ejemplo, el método de importación usando maven es el siguiente:

<dependencia>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>


3. Usa anotaciones en el código

Lombok simplifica el código principalmente a través de anotaciones, entre las que se suelen utilizar @Data, @Getter/@Setter, @Builder, @NonNull, etc.

Si usa la anotación @Data, simplemente puede definir un Java Bean:

import lombok.Data;
@Data
public class Menu {
    private String shopId;
    private String skuMenuId;
    private String skuName;
}


Usar la anotación @Data en la clase es equivalente a usar las anotaciones @ToString, @EqualsAndHashCode, @Getter, @Setter y @RequiredArgsConstrutor al mismo tiempo, lo cual es muy útil para las clases POJO.

Es decir, automáticamente ayuda a definir métodos como toString, Getter y Setter en la clase Menu del ejemplo.

A través del ejemplo anterior, puede encontrar que usamos la anotación @Data para reducir en gran medida la cantidad de código y hacer que el código sea muy conciso. Esta es también la razón principal por la que muchos desarrolladores están interesados ​​en usar Lombok.

Además, diferentes personas tienen diferentes opiniones sobre el uso de Lombok, porque muchas personas han usado Lombok y están familiarizadas con sus ventajas, así que centrémonos en los problemas que traerá el uso de Lombok.

¿Qué tiene de malo Lombok?
Compañeros de equipo de Strong X
Porque el uso de Lombok requiere que los desarrolladores instalen los complementos correspondientes en el IDE.

Si el complemento no está instalado, si usa el IDE para abrir un proyecto basado en Lombok, se le indicará que no se puede encontrar el método y otros errores. Hacer que la compilación del proyecto falle.

En otras palabras, si una persona en el equipo del proyecto usa Lombok, entonces otros también deben instalar el complemento IDE. De lo contrario, no hay manera de colaborar en el desarrollo.

Más importante aún, si Lombok se usa en un paquete jar que definimos, todas las aplicaciones que dependen de este paquete jar deben instalar complementos, lo cual es muy intrusivo.

Legibilidad del código y baja capacidad de depuración
El uso de Lombok en el código puede ayudar a reducir una gran cantidad de código, ya que Lombok ayudará a generar una gran cantidad de código automáticamente.

Pero estos códigos solo se generan durante la fase de compilación, por lo que en el proceso de desarrollo faltan muchos códigos.

El uso extensivo de Lombok en el código conducirá a una legibilidad mucho menor del código y también traerá ciertos problemas a la depuración del código.

Por ejemplo, si queremos saber qué clases hacen referencia al método getter de un determinado atributo en una determinada clase, no es tan sencillo.

Hay trampas
Debido a que Lombok hace que el desarrollo de código sea muy fácil, esto hace que algunos desarrolladores confíen demasiado en él.

En el proceso de uso de Lombok, si no comprende los principios subyacentes de varias anotaciones, es fácil producir resultados inesperados.

Para dar un ejemplo simple, sabemos que cuando usamos @Data para definir una clase, automáticamente generará el método equals() para nosotros.

Pero si solo usa @Data en lugar de @EqualsAndHashCode(callSuper=true), el valor predeterminado será @EqualsAndHashCode(callSuper=false). En este momento, el método equals() generado solo comparará los atributos de las subclases y no considerará Atributos heredados de la clase principal, independientemente de si los derechos de acceso a los atributos de la clase principal están abiertos o no.

Esto puede conducir a resultados inesperados.

Afectando la actualización
Debido a que Lombok es muy intrusivo en el código, puede causar un problema relativamente grande, es decir, afectará nuestra actualización del JDK.

De acuerdo con la frecuencia actual de actualización de JDK, se lanzará una nueva versión cada seis meses, pero como herramienta de terceros, Lombok es mantenido por un equipo de código abierto, por lo que no se puede garantizar su velocidad de iteración.

Por lo tanto, si necesitamos actualizar a una nueva versión de JDK, si las funciones no son compatibles con Lombok, se verán afectadas.

Otro posible problema es que la actualización de Lombok también será limitada.

Debido a que una aplicación puede depender de varios paquetes jar, y cada paquete jar puede depender de diferentes versiones de Lombok, esto lleva a la necesidad de un arbitraje de versiones en la aplicación, y sabemos que el arbitraje de versiones de paquetes jar no es tan fácil. de problemas también es alta.

Destrucción de encapsulación
Los problemas anteriores, creo que hay formas de evitarlos. Pero hay otra razón importante por la que algunas personas rechazan el uso de Lombok, es decir, destruirá la encapsulación.

Como todos sabemos, las tres características principales de Java incluyen encapsulación, herencia y polimorfismo.

Si usamos Lombok directamente en el código, automáticamente generará getter, setter y otros métodos para nosotros, lo que significa que todos los parámetros en una clase proporcionan automáticamente métodos de configuración y lectura.

Como ejemplo simple, definimos una clase de carrito de compras:

@Data
public class ShoppingCart { 
    //商品数目
    private int itemsCount; 
    //总价格
    private double totalPrice; 
    //商品明细
    private List items = new ArrayList<>();
}


Sabemos que la cantidad de artículos en el carrito de compras, los detalles del artículo y el precio total en realidad están relacionados antes, y si es necesario modificarlos, deben modificarse juntos.

Sin embargo, usamos la anotación @Data de Lombok para los dos atributos itemCount y totalPrice. Aunque los definimos como tipos privados, se proporcionan métodos getter y setter públicos.

El exterior puede modificar libremente los valores de estas dos propiedades a través del método setter. Podemos llamar al método setter a voluntad para restablecer los valores de los atributos itemsCount y totalPrice, lo que también hará que sean inconsistentes con los valores del atributo items.

La definición de encapsulación orientada a objetos es: a través del control de acceso, los datos internos se ocultan y el exterior solo puede acceder y modificar los datos internos a través de la interfaz limitada proporcionada por la clase. Por lo tanto, exponer métodos setter que no deberían exponerse viola claramente la función de encapsulación orientada a objetos.

Una buena práctica no debe proporcionar getter/setter, sino solo proporcionar un método addItem público y, al mismo tiempo, modificar los tres atributos de itemsCount, totalPrice y items.

Resumen
Este artículo resume las ventajas y desventajas de Lombok, una herramienta de desarrollo Java comúnmente utilizada.

La ventaja es que el uso de anotaciones puede ayudar a generar código automáticamente, lo que reduce en gran medida la cantidad de código y hace que el código sea muy conciso.

Pero eso no significa que no haya problemas en el uso de Lombok. En el proceso de uso de Lombok, también puede haber problemas como ser hostil con los compañeros de equipo, hostil con el código, hostil con la depuración y hostil con las actualizaciones.

Además de eso, usar Lombok también genera el problema de romper la encapsulación.

Aunque hay muchas ventajas en el uso de Lombok, también trae algunos problemas.

Pero ya sea que se recomiende usarlo en el desarrollo diario o no, en realidad mantengo una actitud neutral. No recomiendo que confíes demasiado en él, y no requiero que lo uses por completo.

Mientras todos lo usen, o antes de evaluar si introducir Lombok en el código, mientras piensan en sus ventajas y pueden considerar los problemas que trae al código, ¡entonces se logrará el propósito de este artículo!
 

Supongo que te gusta

Origin blog.csdn.net/weixin_42450130/article/details/130308466
Recomendado
Clasificación