Ejercicio: Ejercicio 2

Tenemos una aplicación que genera reportes de ventas. El código utiliza la librería TCPDF para generar archivos PDF. ¿Cómo podríamos desacoplar la generación de PDFs de la lógica de reportes para facilitar el cambio de librería en el futuro?

<?php
class Reporte {

    public function generaReporte($datos) {
  
  // ... lógica para recopilar datos del reporte
  
      $pdf = new TCPDF();
      $pdf->addPage();
      $pdf->setTextColor(0,0,0);
      $pdf->setFont('helvetica');
      $pdf->write(0, "REPORTE DE VENTAS ANUAL");
      $pdf->ln(20);
  
      foreach($datos as $item) {
        $pdf->write(0, $item);
        $pdf->ln(10);
      }
  
      $pdf->output("reporteventas.pdf");
  
    }
  
  }
  

Solución:

Aplicar patrón Strategy:

  • - Crear interfaz GeneradorPDF

  • - Implementar con la clase TCPDF

  • - Inyectar esta dependencia en Reporte

<?php
interface GeneradorPDF {
    public function generarPDF($datos);
  }
  
  class Reporte {
  
    private $pdf;
  
    public function __construct(GeneradorPDF $pdf) {
      $this->pdf = $pdf;
    }
  
    public function genera() {
  //...
      $this->pdf->generarPDF($datos);
    }
  
  }
  
  class TCPDF implements GeneradorPDF {
  // implementación
  }
  

Así se desacopla la generación de PDFs y puede cambiarse fácilmente.

Nosotros utilizamos cookies

Este sitio utiliza cookies para mejorar su experiencia de usuario.

Puedes aceptar todas las cookies pulsando en el botón de "Aceptar todas", rechazar todas las cookies pulsando el botón de "Rechazar cookies" o configurar manualmente usando el botón de "más opciones"

Para más información visita nuestra Política de cookies

Personaliza las Cookies

Estas cookies son necesarias para que el sitio web funcione y no se pueden desactivar en nuestros sistemas. Usualmente están configuradas para responder a acciones hechas por tí para recibir servicios, tales como ajustar tus preferencias de privacidad, iniciar sesión en el sitio, o llenar formularios. Puedes configurar tu navegador para bloquear o alertar la presencia de estas cookies, pero algunas partes del sitio web no funcionarán. Estas cookies no guardan ninguna información personal identificable.

Estas cookies nos permiten contar las visitas y fuentes de circulación para poder medir y mejorar el desempeño de nuestro sitio. Nos ayudan a saber qué páginas son las más o menos populares, y ver cuántas personas visitan el sitio. Toda la información que recogen estas cookies es agregada y, por lo tanto, anónima.