¿QUÉ es y CUÁNDO UTILIZAR el PATRÓN STRATEGY? - EJEMPLO en LARAVEL 👨🏻‍💻👩🏻‍💻

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ส.ค. 2024
  • En este video vamos aprender por qué es importante este patrón y cuándo lo debemos utilizar.
    Los patrones de diseño son soluciones a problemas ya conocidos.
    El patrón Strategy define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiable, permitiendo que un algoritmo varíe independientemente de los clientes que lo usan.
    🔗 Repositorio del código
    github.com/jcwirko/strategy-p...
    🕐 Secciones del video:
    0:00 Intro
    0:10 Escenario a realizar
    0:41 Solución estructurada
    2:41 Propósito del patrón strategy
    3:39 Implementación del patrón strategy
    🤝 Si queres apoyar al canal:
    * cafecito.app/return16
    * ko-fi.com/return
    Si te gusto el video dale me gusta, y si realmente te sirvió suscribite y compartilo para que otros puedan seguir creciendo y así ayudarnos entre todos.
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 39

  • @CanalRubi
    @CanalRubi ปีที่แล้ว +3

    Excelente, ya lo había aplicado en Laravel y ahora quise aplicarlo en Angular guiándome por este mismo video y espectacular, muchas gracias gracias!

  • @yesicamattos2456
    @yesicamattos2456 3 ปีที่แล้ว +2

    Muy buen video

  • @brunopadin4905
    @brunopadin4905 2 ปีที่แล้ว

    Sos un genio Return

  • @jmangarret
    @jmangarret ปีที่แล้ว +1

    💯

  • @tzalejo82
    @tzalejo82 3 ปีที่แล้ว +4

    excelente el video, muy claro y al hueso ja..ojala que publiques otros patrones!!Saludo

    • @return194
      @return194  3 ปีที่แล้ว +4

      Si, se vienen varios patrones más

    • @tzalejo82
      @tzalejo82 3 ปีที่แล้ว +2

      @@return194estaré al tanto compañero..

  • @MrYYAG
    @MrYYAG 3 ปีที่แล้ว +2

    EXELENTE VIDEO MUY CLARO Y BIEN EXPLICADO

  • @leonardopaini
    @leonardopaini 3 ปีที่แล้ว +1

    Muy claro todo!! Seguí haciendo videos así!

  • @sistemasweb5761
    @sistemasweb5761 2 ปีที่แล้ว

    lo mejor que vi, muy buenos videos

    • @return194
      @return194  2 ปีที่แล้ว

      Muchas gracias, pronto haré más videos de nuevo

  • @faucemocharrafich9637
    @faucemocharrafich9637 3 ปีที่แล้ว +1

    Buen video, bien explicado. 👍

  • @stefanofabi
    @stefanofabi 3 ปีที่แล้ว +2

    Creo que era mejor aplicar el patron state
    Buen video

    • @return194
      @return194  3 ปีที่แล้ว +2

      Sisi, es que hay muchos patrones similares, la idea es ir mostrando cada uno con un ejemplo para tener la posibilidad de decidir cuando se necesite
      Gracias por el aporte!

  • @jhonathanalfonso3497
    @jhonathanalfonso3497 3 ปีที่แล้ว +1

    Excelente contenido!!!

  • @vhpm18
    @vhpm18 2 ปีที่แล้ว

    Excelentes vídeos bro

  • @MiguelLopezAriza
    @MiguelLopezAriza 3 ปีที่แล้ว +1

    Muchas gracias

  • @cat2011fsa
    @cat2011fsa 3 ปีที่แล้ว +2

    genial muchas gracias investigando el patrón no me quedaba claro como implementar el contexto , tu video me ayudo muchísimo para resolver un problema de mi trabajo jajaj grande , vale ese cafe !!

    • @return194
      @return194  3 ปีที่แล้ว

      Me alegro que pudiste resolver

    •  3 ปีที่แล้ว +1

      @@return194 Exacto, a mi me pasaba lo mismo, pq en los textos aparece ese famoso "contexto" que yo pensaba que se refería al contexto en el que se necesitaba ... en este caso al controlador, pero súper bien que mostraste que era una clase aparte.

    • @return194
      @return194  3 ปีที่แล้ว

      @ Me imagino que hay otras formas de hacerlo, pero ami me parece una buena solución de esa forma descentralizandolo

  • @DonCuche_pausa
    @DonCuche_pausa 2 ปีที่แล้ว +1

    El mejor video que he visto sobre este patrón implementado en Laravel incluyendo videos en inglés y español, es una obra maestra didáctica sobre el tema, buenísimo.

    • @return194
      @return194  2 ปีที่แล้ว

      Muchísimas gracias

  • @DanielAlvarez-rq5vu
    @DanielAlvarez-rq5vu 2 ปีที่แล้ว

    Excelente la explicación, También me gustaría ver aplicado a PHP Puro sin Frameworks ni librerías

  • @cristianveizaga3672
    @cristianveizaga3672 3 ปีที่แล้ว +1

    clarisimo, muchas gracias, ahora me cayo la ficha

  • @united.in.dreams
    @united.in.dreams 3 ปีที่แล้ว +2

    Muy buen tutorial, lo que si podrías bajar un poco la velocidad en cuando creabas los nuevos strategies para los diferentes escenarios.

    •  3 ปีที่แล้ว +2

      sorry pero pienso que esa es el chiste de que sea un video .... mostrar un ejemplo y los otros se hacen igual siguiendo la misma logica

  • @davidcorbalan823
    @davidcorbalan823 3 ปีที่แล้ว +1

    me gusta mucho los videos tuyos, podrias realizar alguno con la arquitectura hexagonal y sus ventajas?

    • @return194
      @return194  3 ปีที่แล้ว

      Es uno de los temas que tengo pensado para más adelante. Hay mucho por hacer y de a poco voy largando.
      Me alegro que te sirva, muchas gracias

    • @davidcorbalan823
      @davidcorbalan823 3 ปีที่แล้ว +1

      @@return194 la verdad que siempre prnse en como hacer mas limpia la logica de negocio y que sea de simple lectura, muy buena la implementacion y ayuda que das

  • @lara97196516
    @lara97196516 ปีที่แล้ว +1

    Eso que acabas de hacer es el patrón factory 🏭. Generaste una fábrica para creación de nuevos objetos dependiendo de la necesidad del cliente.

  • @alvaroaliaga7892
    @alvaroaliaga7892 2 ปีที่แล้ว +2

    Puedo usar repositories adentro de strategys? Devolviendo el repositorio que solicite el cliente usando el patron strategy coomo en tu ejemplo. Buen video

    • @return194
      @return194  2 ปีที่แล้ว

      no sería lo correcto, pero como sería el escenario ?

    • @alvaroaliaga7892
      @alvaroaliaga7892 2 ปีที่แล้ว

      @@return194 Recibo un request desdel clien front (Cliente), en el controllador. En ese request pueden venir varios parametros = (rango de fecha, empresa, nombre de cliente, numero de cliente, codigo postal), pueden venir todos los parametros o pueden venir solo algunos de ellos. Al recibirlos hago un if else if para verificar que parametros me llegan y segun los parámetros armo la consulta en el modelo a la base de datos. Funciona muy bien, pero veo que hay mejores maneras posibles de hacerlo orientada a objetos. 1) desacomplando la base de datos del controlador 2) creando una clase por cada tipo de consulta, o un repositorio por cada tipo de consulta segun sus parametros.
      Controllador:
      public function filterProducts(FilterProducts $request){
      $dataRequest = $request->dataRequest ? json_decode($request->dataRequest,true) : false;


      $products = Product::filterProducts($request)
      ->selectRaw("*,match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE) as relevance")
      ->orderByRaw('relevance DESC')
      ->paginate(isset($dataRequest["limit"]) ? $dataRequest["limit"] : 10);
      if(count($products)>0){
      return response()->json($products);
      }else{
      return response()->json(['error' => 'No hay resultados en la busqueda'],200);
      }
      }
      Model Products
      public function scopeFilterProducts($query,$request){
      return $query->when(!$request->status || ($request->status && $request->status === 0), function($query){
      return $query->with('category')->with('gallery')
      ->where(function($query){
      $query->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)");
      });
      })->when($request->status && ($request->status === 1 || $request->status === 2), function($query){
      $query->with('category')->with('gallery')
      ->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)")
      ->where('status',request('status'));
      })->when($request->status && $request->status === 3, function($query){
      $query->with('category')->with('gallery')
      ->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)")
      ->where('inventory',0);
      })->when($request->status && $request->status === 4, function($query){
      $query->with('category')->with('gallery')
      ->whereRaw("match(name, content, slug) against('(".e(request('filter'))."*) (".e(request('filter')).")' IN BOOLEAN MODE)")
      ->onlyTrashed();
      });
      }

    • @return194
      @return194  2 ปีที่แล้ว

      Lee sobre las query scopes y decime si te sirve, con eso deberías poder solucionar creo yo

  • @bellorinrobert
    @bellorinrobert ปีที่แล้ว

    Amigo un libro de programación orientada a objetos que reomiendes al 100%

  • @reynaldoeg
    @reynaldoeg 3 ปีที่แล้ว +1

    Muy bueno el video, pero según el diagrama, no me queda claro cual es la clase Contexto que hereda de la interfaz Estrategia

    • @return194
      @return194  3 ปีที่แล้ว +2

      El contexto no hereda la interfaz, el contexto sabe a que clase llamar según lo que necesita el cliente. Las clases que heredan la interfaz son las estrategias concretas (todas las clases de los estados, por ej: InTransit.php...) de esta forma todas tienen que hacer la implementacion del método de la interfaz

    • @reynaldoeg
      @reynaldoeg 3 ปีที่แล้ว +1

      @@return194 Muchas gracias por la respuesta!!