Elimina sentencias if/else y switch con el Patrón Estrategia

Elimina sentencias if/else y switch con el Patrón Estrategia

Deja un comentario

Comment as a guest.

  1. Excelente Post! Me ayudó para implementar un switch como de 31 condiciones para autenticación y registro que a su vez se factorizó a un menor número de condiciones gracias a haber desglosado así por partes. «Divide y vencerás».

  2. Muy buen contenido de altisima calidad! Solo para agregar esto aparte nos ayuda a tener implementaciones abiertas a modificaciones, osea nuevos tipos de cupon, pero cerrado a modoficaciones y tambien a mantener en algun grado responsabilidades divididas hasta cierto punto permite la implementacion de la S y la O jajaja para los que les gusta SOLID que para mi es una orientacion mas no veo positivo tener todas las letras, me facino el articulo y solo pregunta llama a tipodecupon::aplicar por el facades que crea una nueva instancia del objeto verdad?

    1. Muchas gracias loco! Si, tal cual como dice se está utilizando la S y la O de los principios SOLID. Y si, no es necesario aplicar todos los principios en una misma implementación.
      Si, estoy utilizando una fachada en tiempo real por eso utilizo directamente TipoDeCupon::aplicar().
      Lo que hace internamente Laravel con las fachadas en tiempo real es crear una clase para manejar los métodos de tu clase (en este caso TipoDeCupon) cómo métodos estáticos.
      Básicamente, nos ahorra tener que instancias la clase 😄

  3. Hola, no le veo el beneficio, solo basta que te digan que el cupón debe estar en la base de datos, y no estar haciendo archivos, eso ya lo implementa Magento, Prestashop, Shopify, creas los cupones y dependiendo de varios factores se aplica, y no lo hacen de la manera que pones

    1. Estás hablando de algo muuuy diferente. Cuando te toque implementar una lógica compleja de programación y no un CMS capaz la veas. Saludos.

  4. Muy buen articulo, este tipo de patrón estrategia, seria utilizable también para hacer una selección de tipo de pago en el caso de aceptar pagos por ejemplo con paypal via api, stripe, diferentes tipos de criptomonedas… Cierto?

  5. Excelente! Me dio una idea bastante más clara de como abordar una aplicación donde cada objeto debe tener una lógica diferente, pero pertenecer a la misma clase. Saludos!

  6. Hola Matias, dos preguntas. Por qué la clase contexto ? Desde la misma clase TiposDeCupon no era suficiente para llamar el tipo de cupón que se necesita ? la segunda ? Porque pasas una variable cupon de tipo Cupon como parámetro en el método aplicar de TiposdeCupon ? Cuál sería la intención de eso ? Gracias

    1. Cómo estas Joel?
      Tu primer pregunta surge bastante seguido así que, muchas gracias por hacerla. Como vos decís, en este si se podría haber obviado la clase Contexto y, si lo hubiera obviado, el contexto sería el método aplicar(). ¿Qué quiere decir esto? Que los patrones no deben aplicarse a raja tabla como están expuestos en el libro de Erich Gamma. Si no serían muy poco flexibles. En mi ejemplo puse la versión «full» como la que figura en el libro para que se entienda la idea. Lo importante es eso, entender la idea de cada patrón.

      Con respecto a la segunda pregunta, paso la variable $cupon porque el descuento se va a aplicar a dicho cupón. Mira la clase DosPorUnoEstrategia donde trato la variable $cupon.

      Cualquier duda, vuelve a preguntar.
      Saludos.

Sliding Sidebar

Matias Echazarreta

¡Hola!

Mi nombre es Matias Echazarreta.
Soy desarrollador web con más de 12 años de experiencia. Amante de Laravel, de los libros y del rock de los ’90. Te puedes comunicar conmigo  por trabajos de contratación, haciendo click aquí.

Nuestro Patreon

Desde Patreon puedes solicitar asesoria personalizado. ¡Ir a Patreon!

Suscríbete a nuestra lista de correo