Antes de empezar

1

Pasos para aprender Java Spring

2

¿Java sigue siendo gratuito?

3

Instalación de ambiente de desarrollo: Linux Ubuntu

4

Instalación de ambiente de desarrollo: macOS

5

Instalación de ambiente de desarrollo: Windows

Introducción a Spring boot

6

¿Qué es y qué usaremos de Spring?

7

Conocer qué es una aplicación autocontenida

8

Crear nuestra aplicación con Spring Initializr

9

Hola mundo con Spring Boot

10

Configurar Spring Boot

11

Crear la estructura del proyecto

Spring Data

12

¿Qué es JPA?

13

Conocer qué es Spring Data

14

Conectar la base de datos a nuestra aplicación

15

Mapear las tablas como clases

16

Crear Entity cuando su clave primaria es compuesta

17

Mapear relaciones entre clases

18

Usar la interface CrudRepository

19

Query Methods

Construyendo nuestra API

20

Implementar la anotación @Repository

21

¿Qué es el patrón Data Mapper y qué resuelve?

22

Orientar nuestra API al dominio con MapStruct

23

Orientar nuestro repositorio a términos del dominio

24

Inyección de dependencias

25

Implementar la anotación @Service

26

Implementar la anotación @RestController

27

Exponer nuestra API

Mejorando nuestra API

28

Controlar las respuestas HTTP

29

Crear el dominio de compras

30

Mapear el dominio de compras

31

Crear el repositorio de compras

32

Probando nuestros servicios de compras

33

Documentar nuestra API con Swagger

Spring Security

34

Configurar la seguridad de nuestra API con Spring Security

35

Generar un JWT

36

Autenticación con JWT

37

Autorización con JWT

Despliegue de nuestra aplicación

38

Desplegar nuestra API desde la ventana de comandos

39

Desplegar nuestra base de datos con Heroku

40

Desplegar nuestra API con Heroku

41

Conclusiones y despedida del curso

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Java Spring

Curso de Java Spring

Alejandro Ramírez

Alejandro Ramírez

Orientar nuestro repositorio a términos del dominio

23/41
Recursos

Aportes 23

Preguntas 15

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

cuando se maneja todo el proyecto en ingles se puede usar el siguiente estándar de nombrado. Usando como ejemplo la entidad Product:

ProductDTO para objetos de dominio
Product para las entidades

Una de las clases quizás mas densas en cuestion de la cantidad de clases, metodos y funciones a las que toca echarles una repasada. Pero es cuestion de ver una y otra vez el video y aprovechar esta explicacion magnifica para retomar el hilo del proyecto y aprender cosas importantes

Por ejemplo, en el caso del código de barras, como no tenemos acceso a este desde la API, si queremos agregarlo programáticamente, sería algo como:

@Override
public Product save(Product product) {
    Producto producto = mapper.toProducto(product);
    producto.setCodigoBarras("uncodigo");
    // Aqui se guarda el producto con el codigo de barras
    // pero luego del hacer el mapping el Product que se retorna ya no tiene el atributo codigoBarras (barCode)
    return mapper.toProduct(productoCrudRepository.save(producto));
}

Sería algo así?

yo ya se programar con java , python , javascript. he hecho aplicaciones con nodejs express ,pero ver este curso me hace sentir un principiante. asi que a esto se referia mi profe de la universidad de que con java se hace ingeniera de software de verdad.

En mi opinión la estrategia de nombrar a las clases en español e ingles estuvo bien, porque de esa manera puede entender la forma como se utiliza MapStruct y conocer el potencial de la misma, para evitar el acoplamiento del código a una base de datos puntual y enfocar el código al dominio. Excelente explicación

Me parece que el profe debió hacer un repaso por el flujo de datos entre las diferentes capas, pues se vuelve un poco confuso seguirle el paso sin entender como interactuanentre si.

Resumen de que se intenta hacer:

Al orientar nuestro repositorio a términos del dominio, lo que se quiere conseguir es conectar los métodos que tenemos en el repositorio, a el dominio para que así todo funcione en términos del dominio y no de la base que está conectada directamente con la DB.

Un aporte en el uso de la lambda:

Mientras lo que reciba algún método coincide en el orden y tipos de los argumentos de la lambda, el método se puede pasar a referencia.

Es decir que esto:

return products.map(productDataList -> productMapper.toProducts(productDataList));

Se reduciría a esto:

return products.map(productMapper::toProducts);

Está genial el curso, uno de los mejores que he hecho. Aunque el ejemplo quizás no sea tan preciso y redunda mucho el código.

Que confuso, 3 repositorios de productos …

En mi opinión es importante escribir el proyecto en cualquier otro idioma diferente al que estamos acostumbrado, como lo hace el profesor porque en la vida real te encuentras con una sopa de código y esto que nos enseña nos hace ser mas ágiles para codificar o o corregir a futuro.
Felicito al 1000% al profesor, es otro de los que han explicado super bien los cursos que he tomado aqui en Platzi 😉

Excelente manejo de los optionals y lambdas de java 8

PORQUE USAR MAP STRUCT

1.- Cual es la diferencia entre una lista normal y una lista optional?
2.- si la bd esta en ingles y todo esta en ingles… ya no es necesario usar MapStruct ?
3.- Porque Optional.of?

Gracias de antemano

Se que no es el tema, pero agradecería una breve explicación del método map de Optional. En que momento se declaro “prods”? De donde viene su valor?

Es incorrecto decir más óptimo.

Ahora sí se enredo esta vaina… 😦

Todas las clases deben estar orientadas al dominio?

Creo que empezaré de nuevo, no tengo el código de la clase ProductRepository de persistence como lo tiene el profe, no veo donde se perdió ese código. 😦

Se podría hacer el mapper en la capa de service para evitar tener tantos repositorios? o la responsabilidad de mapear es de un repositorio?

Significado de todo esto

Ya me perdí, empezaré de nuevo el proyecto porque aqui tiene código que no vi donde lo agregó en la clase ProductRepository.java de la carpeta persistence 😦

Tengo una consulta que pasaría si en la clase ProductoRepository de persistence se usara
un ProductCrudRepository<Product,Integer> en ves de un ProductoCrudRepository ya que no se tuviere que convertir muchas veces o usar el famoso mapper es valido profesor?