Domina el PATRÓN de DISEÑO STRATEGY: ¡Ejemplo Práctico y Real! en JAVA y Spring Boot

Sdílet
Vložit
  • čas přidán 5. 08. 2024
  • Recursos:
    🔗 [github.com/JamiltonQuintero/S...]
    Inserts:
    INSERT INTO client(id, name, age, favorite_product) VALUES
    (1, 'John Doe', 25, 'Laptop'),
    (2, 'Jane Smith', 30, 'Phone'),
    (3, 'Robert Brown', 40, 'Tablet');
    INSERT INTO employee(id, name, age, time_with_company) VALUES
    (1, 'John Doe', 25,5),
    (2, 'Jane Smith', 30,12),
    (3, 'Robert Brown', 40, 1);
    INSERT INTO users(id, name) VALUES
    (1, 'John Doe'),
    (2, 'Jane Smith'),
    (3, 'Robert Brown');
    ------------------------------
    Descubre en detalle el Patrón Strategy, uno de los patrones de diseño más poderosos para escribir código flexible y mantenible. En lugar de explicarte con simples ejemplos teóricos, te mostraré cómo implementé este patrón en un escenario real de desarrollo. Acompáñame mientras abordo un reto auténtico con Java y Spring Boot y te enseño a aplicar este patrón en tus propios proyectos.
    👍 ¿Te ha sido útil este contenido? ¡No olvides dar 'like' y suscribirte para más tutoriales prácticos!
    📝 Si tienes preguntas o experiencias similares, ¡déjalas en los comentarios! Estoy aquí para conversar y ayudar.
    #Java #SpringBoot #PatrónStrategy #DesarrolloReal #ProgramaciónPráctica
    ------------------------------
    ⌚Marcas de tiempo
    00:00 Intro
    00:37 Explicacion conceptual
    03:51 Ejemplo de codigo caso real
    05:42 Clase Abstracta Factory/Estrategia
    11:30 Entendiendo el codigo
    15:26 Consumiendo servicio con diferentes estrategias
    17:38 Conclusion
    18:56 Recursos para que practiquen
    20:02 Reto
    ------------------------------
    🌎 Mis Redes Sociales
    Sigueme en Linkedin : / jamilton-alonso-quinte...

Komentáře • 17

  • @JamiltonQO
    @JamiltonQO  Před 11 měsíci +2

    Recuerden que si tienen alguna duda, comentario o sugerencia no duden en hacérmelo saber. Por este medio o en mi linkedin www.linkedin.com/in/jamilton-alonso-quintero-osorio-b79b7b1ab/ saludos y un fuerte abrazo.

  • @CeratiGilmour
    @CeratiGilmour Před 11 měsíci +3

    puedas hacer una del patrón value object, excelente video me ayuda mucho en reducir los switch grandesss aajjaj

    • @JamiltonQO
      @JamiltonQO  Před 11 měsíci +1

      Lo tendré en cuenta @LpaPlant par un próximo video. Muchas gracias por comentar. Y exactamente jaja la idea es dejar esos hiyukens de 10 opciones de if else o switch y en vez de eso un código mucho más mantenible. Me alegra un montón que te haya servido. ¿Y cuéntame ya te bajaste la rama e hiciste el reto? Espero por aquí tu rama ejje

  • @andresmauriciodussan1918
    @andresmauriciodussan1918 Před 11 měsíci +1

    Excelente contenido!

    • @JamiltonQO
      @JamiltonQO  Před 11 měsíci +1

      Saludos @andresmauriciodussan1 muchísimas gracias por comentar y la verdad me alegra muchísimo que te gusté mi contenido y que te sea de utilidad. Espero entonces tu rama próximamente para ver como quedo tu reporte? ajja ojo pues yo veré

    • @andresmauriciodussan1918
      @andresmauriciodussan1918 Před 11 měsíci +1

      @@JamiltonQOupdate, como vos dices en el video, me puse a jugar con el código y logré aprender bastante, pero falle en la misión de hacer un reporte bonito... ahí fue cuando recordé el porqué abandoné la idea de ser front jaja. btw, muchas gracias por compartir el conocimiento

    • @JamiltonQO
      @JamiltonQO  Před 11 měsíci +2

      Esooooo ese es el camino... practicando me alegra muchísimo de verdad que te haya servido el haber practicado y bueno este es nuestro camino jaja seguir en el backend el diseño dejémoselo a los creativos visuales. Un saludo mi hermano y gracias por el update. Bendiciones.

  • @josephfelipecontreras8630

    Muy buen video, solo quedo con una duda, por qué no creas directamente un bean en donde el hashmap ya tenga los tipos de decisión, no logró comprender el sentido de tener primero un bean con un Hashset para luego poder crear el hashmap dentro del factory, saludos y gracias de antemano!

    • @JamiltonQO
      @JamiltonQO  Před 23 dny +1

      Hola Joseph, saludos. Muchas gracias. Me alegra mucho que te haya gustado este video. Gracias por el apoyo.
      Buena pregunta. Uno de los motivos es que la idea de estos patrones de diseño es ayudar a cumplir los principios SOLID. Si te fijas, si tenemos un bean prediseñado, cada vez que agreguemos una nueva estrategia, tendremos que modificar el bean, lo que dejará esa clase abierta a modificaciones. Aunque me parece una buena idea, probablemente podríamos buscar la forma de hacerlo dinámico desde un bean y así la estrategia quedaría más limpia.
      El motivo de crear el hashmap con el set es que el Map carga las interfaces existentes de forma dinámica que existan con la implementación de las estrategias private Map reportEnumIReportMap, por eso IReport está como value de ReportEnum.
      Cuando por el constructor le inyectamos Set types, allí llegan la cantidad de clases o estrategias que existan en el sistema usando IReport, y en el constructor (que en los ciclos de vida de Java siempre es lo primero que se ejecuta) cargamos los tipos para luego poder usar de forma dinámica la estrategia que se desee usar sin tener que instanciarla. Por ejemplo, en Java tenemos que instanciar de forma manual cuando hacemos esto: List nombres = new ArrayList(); (la interfaz es List y la clase concreta es ArrayList). El problema de esto es que rompe con el principio SOLID de open/close, ya que en nuestro caso de uso queremos poder tener la libertad de retornar el reporte deseado según lo soliciten por parámetro. Ese es el principal motivo por el que está así. Saludos y espero que esta respuesta ayude a aclarar tus dudas. bendiciones

  • @lara97196516
    @lara97196516 Před 9 měsíci +2

    Saludos amigo desde Colombia. Me parece interesante tú análisis, ya que aplicas el patrón en un caso real. Sin embargo, me queda duda sí realmente estás aplicando strategy, en mi parecer la solución que mencionas aplica el patrón factory, estás creando una instancia del tipo de reporte para clasificar el comportamiento del algoritmo. Tambien me queda duda si realmente estás aplicando prinicipio abierto y cerrado, al final tienes que tocar el código para agregar una nueva funcionalidad. Sería chevere otro caso donde implementes factory y strategy, explicando la diferencia entre los patrones y en que momento utilizar cada uno. Saludos!!!!

    • @JamiltonQO
      @JamiltonQO  Před 9 měsíci +4

      Hola @lara97196516, un gran saludo desde Colombia igualmente jeje. Primero que todo agradecerte el tiempo que te tomaste en redactar el mensaje y en analizar la solución. Si de hecho tienes razón en que no es un strategy 100% porque quedó combinado con la factoría. Pero al final lo que hacemos en el día a día es justamente eso, combinar recursos y soluciones para llegar a mejores soluciones. Los patrones de diseño no son estáticos. Puedes tomar lo mejor de ellos con el fin de crear un diseño sólido y escalable.
      Ahora, con respecto a lo que mencionas sobre el principio abierto cerrado. Si te fijas en la clase ReportFactory, esa clase está cerrada a modificaciones, que de hecho por eso tiré un poco de las factorías para no hacer la implementación con if-else que en todos los ejemplos lo hace con las instancias de las estrategias instanciaban las estrategias, fue por ello que decidí juntar dos patrones que me parece que se integran bien para dar una solución más escalable.
      Igual y el principio abierto cerrado nos dice que una clase debería estar cerrada a su modificación en el día a día como haces eso? La única forma seria crear librerías donde allí si deseas modificar deberías sobreescribir la clase completamente o a través de selead clases en java 17, pero eso sinceramente es una fantasía como te digo, en el día a día el software es un proceso de cambio constante, quizá se reducen sus cambios, pero llegar a que nunca jamás vuelvas a cambiar una clase, te soy sincero, no veo cómo en una iteración constante lo podrías llegar a hacer. El cliente pide siempre requerimientos nuevos, en donde al fin y al cabo por más bien que hayas hecho tu diseño vas a volver a tocar esa clase.

    • @JamiltonQO
      @JamiltonQO  Před 9 měsíci +4

      Continuo con la respuesta jajaja.
      De hecho mira si puedes el video del FACTORY METHOD donde explique y se nota un poco más el uso y diferencia de las factorías las cuales seleccionan el algoritmo concreto según el tipo de reporte. Allí deje en el servicio un switch case, pero como mencione en el video se podría buscar hacer lo mismo en pro de dejar la clase "cerrada" sin ser puristas, pues jeje allí se marca y se denota una gran diferencia entre estos dos patrones uno es encargado simplemente de seleccionar e instanciar las estrategias que al final es lo que hacen las factorías son fábricas de objetos o familias de objetos y dos ya como tal las estrategias que allí implementas en concreto la solución el algoritmo creo que en este video puede estar un poco lo que me mencionaste de explicar las diferencias. Si puedes mírate el video por fa y me comentas si aun sigues con la duda, si tienes una opinión diferente o si igual y piensas igual. Me interesaría bastante que me deudas dar ese feed back porque me gusto muchísimo tu comentario. Mil gracias nuevamente. Un gran saludo
      czcams.com/video/HBFsmX-_0qM/video.html

    • @lara97196516
      @lara97196516 Před 9 měsíci

      Hola @jamiltonquinteroosorio. Estuve revisando tu video de patrón factory, y tienes toda la razón, son muy parecidos. A mi parecer, conceptualmente son diferentes pero en la aplicación se puede uno confundir un poco. Factory es un patrón creacional, permite la creación de instancia de forma ordenada y escalable. Strategy define el comportamiento de una clase en tiempo de ejecución. Hace unos meses me tocó implementar factory y strategy para poder procesar en un servicio de Kfc diferentes tipo de cupones y me pequé un enredada con este tema, por eso me interesa mucho fortalecer mis conocimientos y agradezco mucho por tu contenido. Muchas gracias amigo, porque este trabajo que haces es muy importante. Saludos

    • @lara97196516
      @lara97196516 Před 9 měsíci +1

      De igual forma quiero hacer una sugerencia muy respetuosamente. En mi parecer vas muy rápido con las explicaciones del código. La persona que tiene idea del tema, las coge rápido, pero otras personas se pueden marear con tanto cambio de pantalla. Sería chévere que explicaras el desarrollo de los ejercicios en el video y no una solución ya hecha. Nuevamente saludos y espero mucho contenido para seguir aprendiendo! Saludos 🫡

    • @JamiltonQO
      @JamiltonQO  Před 9 měsíci +4

      ​ @lara97196516 hola nuevamente jeje mil gracias mira gracias por la recomendación de hecho hasta mi esposa me lo ha dicho jaja que dice que en los directos hablo muy rápido que parezco que me fueran a arrestar o algo así jajaja. El formato que mencionas es interesante y lo tendré en cuenta para algún video que no sea tan largo, pero por ejemplo ese flujo que vez ahí me toma al rededor de 2 a 3 horas hacerlo imagínate editar un video de 3 horas jaja si editando 40 min me quiero volver loco entonces la verdad aunque si tienes razón sería mucho más interesante para el que lo quiera seguir al pie de la letra paso a paso el código para mí sería muy difícil la edición por eso a veces me queda más fácil trabajarlo de esa forma, pero voy a tratar de crear contenido un poco más variado. De hecho si te fijas no pude continuar con la serie de los patrones y es que he tenido mucho trabajo, por eso me está quedando más fácil hacer los lives y de lo que hablo allí saco contenido para los que no se pueden unir al live. Espero bajar la carga de trabajo pronto y retomar los vídeos también. Nuevamente, muchas gracias por esos comentarios que sé que me ayudaran a crecer y poder crear contenido de más valor.

  • @juanjosezaccara4821
    @juanjosezaccara4821 Před 8 měsíci +1

    esta buena la clase de patron strategy lo malo es que tu estas enseñando y cuando estas enseñando no podes ir tan rapido no pode estar mostrando algo y saltar a otra cosa y voy aqui y voy para allá tenga en cuenta que esta enseñando es solo un consejo gracias por la clase

    • @JamiltonQO
      @JamiltonQO  Před 8 měsíci +2

      Saludos, juan mil gracias por el consejo de verdad que estoy tratando de mejorarlo cuando los grabo no quedan así, solo que al editarlos se le quitan muchas partes que se sienta que el video va más rápido. Igual recuerda que tienes la opción de ponerlo en velocidad lenta, esa es la idea de un video, puedes repetir cuantas veces quieras. Saludos