Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Otro enfoque de la interfaz. La clase abstracta.

Hasta ahora, antes de empezar con las clases de Service, preparábamos una interfaz para darle forma a todos nuestros servicios, y, aunque eso está bien, puede que queráis pensar otra forma de hacerlo, y es con una clase abstracta.

La preparación

Como siempre, necesitamos la entidad, y el repositorio; eso no puede cambiar.

Para realizar la entidad, como siempre, implementaremos de Modelo, e incluiremos los atributos necesarios

Se trata de una entity muy simple, por lo que no vamos a preparar ni DTO, Asumo que en una aplicacion real, deberia ser mas compleja, pero para nosotros, ya esta bien.

Como siempre, trabajando con STS, he creado los tres atributos, y luego he pedido a eclipse que generase los dos constructores, los getters, los setters, y el toString.

Es poco mas trabajo que hacerlo con Lombock, y, a mi me queda mucho mas claro.

El repositorio, de momento solo necesitamos lo basico, de forma que en el package correspondiente, preparamos

Y otro tema listo

La clase abstracta

Ante todo aclarar que esta clase podía implementar la interface que hemos creado para los otros servicios, solo tendríamos que empezar con algo como

Vigilad porque he creado una nueva interface, que al final sustituirá a la antigua, pero como eso obliga a refactorizar, esta la utilizaremos de aquí en adelante, y lo demas, ya lo arreglaremos. Solo hemos añadido dos método más y hemos dejado un poco mas coherente los retornos, y los nombres….

La nueva interfaz es

y, entonces, ¿para que quiero una clase abstracta?

He añadido la clase abstracta, precisamente porque he pensado que puedo encontrarme con código que repito en todos (o en muchos) servicios, y es precisamente el código que escribire aqui.

Tambien aclarar que todo esto no es mas que una herramienta para hacernos mas cómodo el código, por lo que sois vosotros los que necesitareis tomar decisiones acerca de como va a quedar el codigo en vuestro caso, y ya lo iremos comentando. Ahora os presento el codigo que he escrito. (podéis bajarlo de Github, al final del capitulo esta la direccion)

Definiendo la clase

Como ya suponeis, nuestros genéricos son

  • T : la entity
  • S : el tipo de id que utiliza nuestra clase
  • U : el repositorio para nuestra entity, y ha de ser un JpaRepository

En nuestro caso. nuestro primer uso, pueden ser (como ejemplo):

  • T : Pelicula.java
  • S : Long, como el id que utilizaPelicula
  • U : nuestro repositorio IPelicula.java

Para construir nuestra clase, vamos a pensar así, como si T fuera Pelicula… y demas, aunque escribiremos genéricos, claro

Tambien, podemos observar que esta clase no la verá Spring, ya que no la hemos calificado, y es correcto, Spring necesita las extensiones de la clase y no la abstract

Por lo demas, vamos a escribir todas las funciones que podamos resolver, para que nuestro usuario no tenga que escribir todo el servicio. Naturalmente, a nuestro usuario siempre le queda la posibilidad de hacer un @Override de los métodos cuando necesite hacer algo mas

Nosotros, por ejemplo, podemos ofrecer soluciones muy básicas para insert, update, borrarPorId, borrar, listarTodos, leerUno y existe

pero nos es totalmente imposible facilitar codigo para patch, con lo que esa la dejamos abstract, y asi obligamos a nuestro usuario el tener que escribirla.

Yo he decidido, en mi caso, escribir esto, pero, insisto, una vez mas que vosotros debéis decidir que métodos queréis forzar, y que codigo queréis colocar en el resto de casos, pero la mia, queda asi

Y nuestro servicio

Ahora, para escribir el servicio, deberemos extender la clase que estábamos comentando (IServicioMas), y no hace falta implementar nada, porque lo hicimos a nivel de clase padre.

He sobrecargado todos los métodos que me han parecido oportuno, para mi forma de trabajar, y, aun así, me ha quedado un servicio mucho más sencillo

En este punto, ya podemos realizar el test de este Dao, y eso lo haremos en el siguiente artículo

Conclusión

Todo este desarrollo lo teneis explicado con mas detalle en youTube (a partir de 30/05/24) , y, aunque es conveniente que intentéis escribirlo TODO vosotros, si queréis renunciar a ello, lo teneis tambien en GitHub

Este desarrollo esta hecho para disponer de un fuente para explicar otros temas, tal y como se indica en Visión de conjunto con Spring

En YouTube

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 35.172.230.21
Proxy: 35.172.230.21
Remote host: ec2-35-172-230-21.compute-1.amazonaws.com
Remote port: 58076
** 35.172.230.21, 172.70.39.31