No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Java Spring

Curso de Java Spring

Alejandro Ram铆rez

Alejandro Ram铆rez

Implementar la anotaci贸n @Service

23/35
Recursos

Aportes 19

Preguntas 11

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Estaba un poco confundido con el concepto de Repositorio y Servicio. As铆 que me puse a indagar un poco y resulta que el repositorio es la capa simple de acceso o de comunicaci贸n con el sistema de almac茅n de datos (ojo, solo comunicaci贸n), mientras que el servicio es la l贸gica de acceso a estos datos desde la aplicaci贸n, as铆 pues un ejemplo ser铆a: Entras a un cajero autom谩tica y sacas dinero de tu cuenta, el banco es el repositorio, y el cajero es el servicio.

Las implementaciones del m茅todo delete son buenos ejemplos de los estilos declarativo e imperativo.
El primero define el qu茅 va a hacer el c贸digo mientras que el segundo define el c贸mo y por consiguiente se ven m谩s detalles. Cabe aclarar que el estilo declarativo no puede existir sin el estilo imperativo ya que el primero se apoya en el segundo para ocultar las estructuras de control (if, else, switch, etc).

驴Porqu茅 es necesario verificar que el producto exista en la base de datos antes de borrarlo? El Id normalmente se obtiene de procesos anteriores como de un listado, y si queremos saber si el borrado es exitoso se podr铆a obtener el n煤mero de fila(s) eliminada(s) 鈥 lo digo porque esto se ve muy bonito y mantenible, pero es costoso en m谩quina鈥 驴no?

@Service:

Intermediario entre el controlador de la API y el repositorio

Nuestros servicios son negociadores entre el repositorio y los controladores

Creo que todo tiene un porque, al principio lo ve铆a como algo repetitivo pero ahora tengo mas claro el porque se programa as铆.
Gracias profesor, excelente curso.

Creo que de esta forma es m谩s legible el m茅todo delete:

    public boolean delete(long id) {
        if (get(id).isEmpty()) {
            return false;
        }
        repository.delete(id);
        return true;
    }

Para el que quiera entender de donde vienen estos objetos que nombra el profesor como el Optional o el m茅todo .map() 鈥 esto hace parte de lo que es Programaci贸n Funcional (Un paradigma de programaci贸n) de la cual Java a帽o tras a帽o ha tratado de adaptarse a este.
Actualmente se encuentra un curso de Java Funcional en platzi y es excelente.
https://platzi.com/cursos/java-funcional/

Esta linea se puede leer de la siguiente forma?, no entend铆 muy bien la instrucci贸n
Si existia el producto y fue eliminado responde true de lo contrario response false
return getProduct(productId).map(Product ->{
productoRepository.delete(producttId);
return true;
}).orElse(false);

No hace falta usar el @Autowired en este caso porque Spring buscar谩 la instancia de ProductRepository en su contenedor y se dar谩 cuenta que existe creado previamente uno con el nombre productRepository, mismo nombre que el del atributo en ProductService. No obstante es buena pr谩ctica anotarlo con @Autowired

Otra opcion para el Delete, es con una lamda, queda mas prolijo me parece.

  public boolean delete(int productId){
        
        return getProduct(productId).map(product -> true).orElse(false);
    }```

Significado de @Service

Como usar el orElse del metodo map

![](https://static.platzi.com/media/user_upload/image-2c9f4bbf-adf6-4115-ae4b-b0e7886f5c8b.jpg)Si tienen errores como este tengan en cuenta no poner un "," de m谩s, me qued茅 una hora buscando el error ![](https://static.platzi.com/media/user_upload/image-eaea91a3-b9e5-4f08-8a98-21787dff409b.jpg)
Con los delete a mi me gusta verificar despues de eliminar de esta forma ```js public boolean delete(int productId) { // return getProduct(productId).map(product -> { // productRepository.delete(productId); // return true; // }).orElse(false); // if(getProduct(productId).isPresent()) { // productRepository.delete(productId); // return true; // } // return false; productRepository.delete(productId); return productRepository.getProduct(productId).isPresent(); } ```Ya despues agregar try catch para evitar da帽os y cambia un poco pero la idea se mantiene

Otra forma de hacerlo

	boolean isPresent = getProduct(productId).isPresent();

        if(isPresent) productRepositoryDomain.delete(productId);

        return isPresent;

Saber un framework de backend como Nest.js me esta ayudando a entender mas rapido estos terminos. Que estemos haciendo varios archivos que obtienen un producto puede ser dificil de entender para un principiante.

Muy 煤til todo.