PATRÓN de DISEÑO DTO en JAVA - Tutorial Completo Fácil

Поділитися
Вставка
  • Опубліковано 14 гру 2024

КОМЕНТАРІ • 51

  • @programando_en_java
    @programando_en_java  Рік тому

    🔔 ¡Ayúdame a llegar a 50.000 subs! 👉 2ly.link/20Hmi
    🎉 APÓYAME 👉 2ly.link/20HnV
    📩 NEWSLETTER SEMANAL 👉 2ly.link/21fmf
    🎯 MENTORIA 👉 2ly.link/20FqN
    🎁 CURSO GRATUITO de JAVA 👉 2ly.link/20Hme
    🎁 CURSO GRATUITO de SPRING BOOT 👉 2ly.link/20HmM
    📱Redes Sociales 👉 2ly.link/20Hmg

  • @andresbrinez6123
    @andresbrinez6123 Рік тому +3

    Gracias por la explicación sobre el patrón DTO en Java. Me ayudó mucho a entender el tema. ¡Buen trabajo!

  • @jesusarmandomaciasbenitez1517
    @jesusarmandomaciasbenitez1517 11 місяців тому

    carnal , no manches me encantan tus videos estoy aprendiendo mas ahorita estos conceptos que cuando inicie hace 10 años

  • @Jehiselmov
    @Jehiselmov Рік тому +3

    Súper interesante y util, hay muy pocos que sean recientes y en español respecto a este tema. Sólo una recomendación, las redes sociales apareciendo en la esquina izquierda abajo (constantemente) a mí me distraen muchísimo y me cuesta concentrarme en lo que estás diciendo. No sé si a otros les pasa pero quizás podrían aparecer ocasionalmente o con mucha menos frecuencia. De todos modos es sólo un detalle, gracias por la info y por este canal 🙆‍♂✌💯

    • @programando_en_java
      @programando_en_java  Рік тому +2

      ¡Gracias por tu comentario! Puede ser que tengas razón, echaré un vistazo a ver cómo podría hacerlo de otra forma. Un placer de que mis vídeos te ayuden 😄✌️

  • @pauloapptech5038
    @pauloapptech5038 Рік тому +2

    Muy interesante, muchas gracias!

  • @breynnerariza5239
    @breynnerariza5239 10 місяців тому

    Que buena explicación, muchas gracias!

  • @lauraseguramartinez8724
    @lauraseguramartinez8724 Рік тому +1

    Gracias muy clara tu explicación. Saludos

  • @matiasvaldes1391
    @matiasvaldes1391 Рік тому +1

    Excelente amigo!!!

  • @kaltonar
    @kaltonar Рік тому +2

    Como siempre magnifico, tengo una duda si podrias hacer un video haciendo inyeccion de dependencias por constructor pero masiva donde se manejen de unas 10 dependencias en adelante, esto haciendo referencia que un proyecto ya estaba construido de esa manera con pura etiqueta AUTOWIRED y simplemente quisiera cambiar de una mejor manera la estructuracion, gracias.

    • @programando_en_java
      @programando_en_java  Рік тому

      ¡Muchas gracias por tu comentario de ánimo! Sobre el problema que describes, no existe de por sí una solución, el problema que veo es que el proyecto no está bien pensado en forma de arquitectura y tienes una clase que se dedica a realizar diferentes tipos de lógica de negocio en vez de tenerlas separadas de forma que se delegue a cada servicio su función específica. La solución que veo es tener que refactorizar la clase y delegar funcionalidades.
      Espero que se haya entendido cómo lo he explicado, si no házmelo saber. ¡Un saludo! 😉

  • @bgarciam
    @bgarciam Рік тому +1

    Hola, excelente explicación, para el aspecto de guardar los datos en BD, igual primero caen lo datos en UsuarioDTO luego pasa a DTO para guardar? o se crea otro dto especial para guardar los datos.

    • @programando_en_java
      @programando_en_java  Рік тому

      ¡Hola! No sé si te he entendido correctamente pero creo que estás confundiendo “DTO” con “Entity”, Entity es la class que representa una entidad (tabla) en la base de datos, un DTO es una representación de la información que quieres pasar entre capas de tu proyecto.
      ¿Quizás así es más claro? Dime si te sirve :)

  • @unknow-re8ly
    @unknow-re8ly 11 місяців тому +1

    Tengo una duda, bueno, más bien quiero una opinión. Para mí proyecto de grado me pidieron hacer un sistema bancario. Mi base de datos ya estaba construida y funcionando y tenía mis clases entidades de las tablas. Supuse que la seguridad de los datos era lo más importante y que esos registros de la base de datos no salgan de la capa de datos así que dentro de la capa de datos tenia varios métodos que encriptaban los datos mas sensibles como números de tarjetas o contraseñas. El objeto encriptado contenía todos los campos del registro y pasaba a la capa de negocio donde hacia todo lo que tenía que hacer. Decidí dejar intactos los datos de menor importancia como el nombre y apellido para presentarlos tranquilamente en la capa de visualización. Creo que sin ser consciente aplicaba el patrón dto pero, este planteamiento de usar un registro completo encriptado es lo correcto? Tome la decisión de encriptarlo porque en caso de hacer operaciones de bajo nivel como actualizar contraseñas o consultar ahorros me facilitarian mucho la tarea de tener hacer estas operaciones sin tener que volcer a consultar a la base de datos. Esto que hago está bien?

    • @programando_en_java
      @programando_en_java  11 місяців тому +2

      Está bastante bien pensado y es como debería ser ya que como explicas no quieres que otras capas “sepan” de algún tipo de información y puedes utilizar la encapsulación para poder modificar esos datos como también comentas.
      Si quieres una opinión, para un proyecto de cara a un negocio es mejor que deleges el guardado de las contraseñas o datos sensibles ya que si quisieras tú añadir la seguridad puede ser un tema bastante delicado.
      ¡Espero que sigas así! Si necesitas algo más, no dudes en comentar 😎✌️

  • @biancahoffmann2489
    @biancahoffmann2489 10 місяців тому +1

    Hay alguna diferencia entre modelo y entidad? por ejemplo yo en javascript/typescript, al usar prisma o mongoose, primero creo un modelo, que luego se crea en la base de datos y la entidad es de como se va a "comportar" en mi backend, ya sea agregando mas cosas para algo en concreto... y mi dto por ejemplo al registrar un usuario solo tiene, nombre, email, password.... asi tambien pasa en spring boot? ya que en el video sale entidad y se relaciona con las columnas de una base de datos.

    • @programando_en_java
      @programando_en_java  10 місяців тому +1

      Buena pregunta, es posible que se use de forma sinónima, pero el modelo es más en concreto a lo que es el diseño de la base de datos y la entidad es la tabla en sí. En Spring Boot no hace falta crear ningún tipo de "modelo" cómo en prisma, al crear las clases de entidades Spring ya es capaz de crear el modelo de la base de datos.
      En prisma se crea un "modelo" con archivos ya que es un frameworks diseñado para poder ser usado por diferentes lenguajes de programación y te generan las entidades según el modelo creado, en Spring Boot no.
      ¡Un saludo! 😎

    • @biancahoffmann2489
      @biancahoffmann2489 10 місяців тому

      @@programando_en_java genial, muchas gracias 😁

  • @ingenieroandreschacon
    @ingenieroandreschacon 8 місяців тому +1

    Una pregunta tienen una hoja de ruta de los videos para aprender java hasta spring boot

    • @programando_en_java
      @programando_en_java  8 місяців тому

      ¡Hola, gracias por el comentario! Desgraciadamente no existe una ruta, pero existe un curso gratuito de Java que puedes encontrar en el primer comentario :).
      Un saludo

  • @fcalderonsanchez
    @fcalderonsanchez 6 місяців тому +1

    Hola Ricardo! Gracias por tan buenos videos! estoy siguiendo el tema viendo los records y mappers, creo son imprecindibles para usarse con el patron de diseño DTO.
    Tengo una duda relacionada aunque no corresponde al video: Cual es la convención para los paquetes del patrón Controller-Service-Repository: Se ubican las clases en los mismos según la entidad (y sus clases relacionadas)? o se generan paquetes según la capa (com.aaa.controller / com.aaa.repo) y se ponen las clases correspondientes, priorizando la función de la clase más que la entidad en la que se enfonca. Ojalá se haya entendido y puedas absolver mi duda. Mil gracias!!!

    • @programando_en_java
      @programando_en_java  6 місяців тому +1

      ¡Hola! Es una buena pregunta existen diferente forma de estructurar tu proyecto, por norma general existen dos formas de estructurar nuestro proyecto Package By Feature y Package By Layer, como indicaste. La decisión depende de ti como programador o arquitecto, pero para mí, si el proyecto va a ser monolito o va a contener bastantes funcionalidades suelo preferir "by feature" si es pequeño, "by layer" creo que es suficiente.
      ¡Espero te ayude la respuesta! 🫡

  • @alessandraayala3295
    @alessandraayala3295 Рік тому +1

    No es necesario tener todos los atributos de la entity en la DTO, en especial a las FK, no?

    • @programando_en_java
      @programando_en_java  Рік тому

      Exacto, en los DTO deberíamos de tener los datos que necesitamos, hay que tener cuidado de exponer aquellos que pueden traer problemas de seguridad, como las claves primarias o FK, como mencionas 😉🤘

  • @MsDead28
    @MsDead28 Рік тому +1

    hola genial la explicacion mas claro que el agua ajajaja. cambiando de tema que fuente estas usando?

    • @programando_en_java
      @programando_en_java  Рік тому +1

      ¡Gracias a ti! Pues sinceramente no lo sé, es la que viene por defecto con el IDE jaja :)

  • @RLAPERU2
    @RLAPERU2 Рік тому +1

    Buena explicacion,, como manejas el DTO cuando retorna varios registros?

    • @programando_en_java
      @programando_en_java  Рік тому

      ¡Hey gracias por tu comentario! ¿A qué te refieres exactamente cuándo retorna varios registros? Si es hacer dos consultas a la base de datos, es posible crear un DTO que contenga ambos ambos en una sola clase 😉

    • @leonardohuaca7146
      @leonardohuaca7146 Рік тому +1

      ​​@@programando_en_java dentro de un DTO tengo los atributos de la clase(esta contiene un clase relacionada.tmb) y tmb quiero mostrar los datos de la clase relacionada , pero solo para mostrar informacion solo get , sin persistir en la base de datos, esto es un Dto tambien? ,

    • @programando_en_java
      @programando_en_java  Рік тому +1

      @@leonardohuaca7146 ¡Hola! Creo que no he entendido exactamente tu pregunta, creo que estas hablando de Entidades y lo estás mezclando con un DTO, pero realmente no he entendido tu mensaje, ¿podrías volver a explicarlo, por favor?

    • @leonardohuaca7146
      @leonardohuaca7146 Рік тому +1

      @@programando_en_java Hola , si entendi , pero como se puede retornar un objeto vacio en vez de un null cuando este no se encuentre en la database (intente con los empty pero igual sale null ) Optional userById= user.findById(id);
      -respuesta json , quiero q me salga asi {} en vez del null
      {
      dataUsuario : null
      }
      {
      dataUsuario : {}
      }

    • @programando_en_java
      @programando_en_java  Рік тому +1

      @@leonardohuaca7146 ¡Ya veo! Te explico, Java es un lenguaje fuertemente en la orientación a objectos, eso quiere decir que no es tan flexible cómo puede ser javascript para enviar objectos vacíos.
      La única forma de enviar un objecto vacío, es decir '{}' tienes que tener una clase sin ningún atributo o indicar a través de anotaciones, cómo por ejemplo si usas Jackson, la anotación @JsonIgnore, otra forma es crear el JSON en formato String por ti mismo y enviarlo de vuelta.
      No sé exactamente cómo lo estas haciendo, pero entiendo que puedes estar usando Spring Boot para devolver un Json.
      Si tienes más dudas, házmelo saber ;)

  • @ronaldoclementerodriguezco6936

    Hola, muy buena explicacion felicidades. He visto videos donde explican esto de los DTO, pero veo que crean un interfaz le llaman wrapper creo, donde transforman las entidades en dto. En este ejemplo que nos explics no lo usaste de esa manera. Porque? Es mejor manejarlo con una interfaz para transformar las entidades a dto o viceversa?

    • @programando_en_java
      @programando_en_java  Рік тому

      ¡Hola! Ahora mismo no sé cómo sería, ¿tienes algún ejemplo? Así podría ver por qué usan una interfaz en el DTO y Entity

    • @neiderpineda8023
      @neiderpineda8023 7 місяців тому

      Yo suelo utilizar mapStructs para el mapeo de entidades a dto y viceversa, es muy fácil de utilizar

  • @aamb_c133
    @aamb_c133 11 місяців тому +1

    buenas cual es la diferencia con el patrón de diseño DAO?

    • @programando_en_java
      @programando_en_java  11 місяців тому +1

      Los DAO son clases que se encargan del manejo y acceso de la base de datos, los DTO se encarga de el envío de información entre capas de nuestro proyecto.
      No sé si se entenderá pero si no házmelo saber 😉

    • @aamb_c133
      @aamb_c133 11 місяців тому +1

      @@programando_en_java El concepto esta claro pero no me queda claro como se integra en una API
      Es decir usaría objetos DTO en la clase Controller y objetos DAO en la clase de servicios
      o como seria?

    • @programando_en_java
      @programando_en_java  11 місяців тому +1

      @aamb_c133 las clases DAO son clases con lógica para la base de datos, los DTO son clases con estructura de información sin lógica, los DTO se usan tanto en los controllers como en los servicios, los DAO para la capa de persistencia donde se usa las clases de entidades 🙏😄

    • @aamb_c133
      @aamb_c133 11 місяців тому

      @@programando_en_java Osea que DAO los usaría para no tener que trabajar directamente con las entidades

    • @programando_en_java
      @programando_en_java  11 місяців тому +1

      @aamb_c133 ¿directamente? Los DAO trabajan con las entidades :)

  • @NataliaBrendaAndinoAtencio
    @NataliaBrendaAndinoAtencio Рік тому

    Hola! Gracias por tu contenido!! Tengo una duda: por qué siempre usas final en lugar de private en los atributos?

    • @programando_en_java
      @programando_en_java  Рік тому +1

      Utilizo final para definir que los atributos de la clase sean inmutables, también puedes marcarlos como private :)

  • @TheMiguel18
    @TheMiguel18 11 місяців тому +1

    Bastante claro el video, tengo dos preguntas, ¿en que paquete deberían estar los DTOs, service o controller?
    Y algo más si supongamos quiero de la misma entidad exponer de dos maneras diferentes sus datos ¿Es correcto crear 2 DTOs para esa entidad ó lo suyo sería usar los getters de un único DTO?

    • @programando_en_java
      @programando_en_java  11 місяців тому +1

      ¡Buenas preguntas! Puedes crear un paquete nuevo que sea “dtos” o si son solamente unos cuantos puedes almacenarlos en el paquete “service” aquellos que están relacionados con los “services” y en “controller” aquellos relacionados con los “controllers”.
      ¡Claro que es correcto! Si crees que es necesario y tiene sentido tener 2 DTOs para no mostrar a otra capa información adicional, no veo por qué estaría mal 😉✌️

    • @TheMiguel18
      @TheMiguel18 11 місяців тому

      @@programando_en_java Muchas gracias por tu respuesta, me gustó tu canal, suscrito.

    • @gTosca_666
      @gTosca_666 7 місяців тому

      @@TheMiguel18 Yo las coloco en service en unc carpeta dto

  • @Vizmonting
    @Vizmonting 3 місяці тому

    Porque le llaman patron si solo es un puente entre la entidad y el service?