API REST con Spring Boot | 8 | Reutilización de código (@MappedSuperclass y código genérico)

API REST con Spring Boot | 8 | Reutilización de código (@MappedSuperclass y código genérico)

Introducción a la Anotación de Superclase

Resumen de la Sección: En esta sección, se introduce el concepto de anotación de superclase y su utilidad en la programación orientada a objetos.

Creación de Clase Base

  • La anotación de superclase permite crear clases base para que las entidades hereden propiedades comunes.
  • Los atributos heredados son invisibles y se copian directamente a las tablas de las entidades que heredan, evitando la repetición.

Implementación de Clase Base

  • Crear una clase base llamada "Base" dentro del paquete "Entidades".
  • Agregar anotaciones como "@MappedSuperclass" para mapear la superclase y evitar repeticiones.

Extensión a Entidades Específicas

  • Extender la entidad "Persona" de la clase base "Base", simplificando así el desarrollo al compartir atributos comunes.
  • Crear una nueva entidad "Autor" que extienda de la clase base, definiendo sus atributos específicos como nombre, apellido y biografía.

Implementación Genérica para Persistencia

Resumen de la Sección: Se aborda cómo utilizar código genérico para reutilizar métodos en diferentes entidades y simplificar operaciones básicas.

Necesidad de Código Genérico

  • Para cada entidad como "Autor", se requiere implementar servicios, repositorios y controladores específicos.

Métodos y Clases Genéricas

Resumen de la Sección: En esta sección, se explora el uso de métodos y clases genéricas en programación orientada a objetos, destacando cómo permiten la reutilización del código para diferentes tipos de datos.

Uso de Métodos y Clases Genéricas

  • Las clases genéricas limitan los tipos de datos que pueden recibir, como en el ejemplo donde una clase "caja" solo puede recibir tipos que extiendan de la clase "number".
  • Al instanciar una clase genérica, los datos enviados determinan el tipo que adquiere la instancia. Por ejemplo, enviar un dato string resultará en un tipo string para esa instancia.
  • La flexibilidad de los métodos genéricos permite enviar cualquier tipo de dato necesario, siempre y cuando cumpla con las restricciones definidas previamente.
  • Los códigos genéricos solo admiten tipos de referencia, no tipos primitivos. Esto implica utilizar referencias como "inter" en lugar de tipos primitivos como "int".

Ventajas y Consideraciones

  • El uso de códigos genéricos facilita la reutilización del código con diferentes tipos de datos, mejorando su calidad, legibilidad y limpieza.
  • Proporciona seguridad tipada al evitar castings innecesarios durante la ejecución del programa.
  • Permite restringir los tipos aceptados por una clase o método genérico mediante límites predefinidos.
  • Es esencial recordar que los códigos genéricos solo admiten tipos de referencia, evitando así errores al intentar utilizar tipos primitivos.

Implementación Práctica

Resumen de la Sección: En esta parte se detalla cómo implementar códigos genéricos en repositorios, servicios y controladores para mejorar la eficiencia y reutilización del código.

Implementación en Repositorios, Servicios y Controladores

  • Para hacer un código más genérico, se deben identificar módulos repetitivos que podrían beneficiarse del enfoque genérico.
  • En repositorios, se emplea herencia de interfaces para implementar códigos genéricos. Para servicios, se utilizan interfaces y sus implementaciones extendidas. Los controladores siguen un proceso similar con interfaz e implementación.