Patrón Adapter

¿Qué es?

Es un patrón de diseño. Su finalidad es utilizar las funcionalidades de las librerías de terceros como si fueran propias. Es como una persona que vive en España, ha comprado un portátil en Alibaba y el portátil viene con clavija china, que no es compatible con la toma de corriente de su país. Para solucionar este problema, ha comprado un adaptador, que hace conexión entre la clavija china y la toma de corriente español, así permitir el paso de la corriente eléctrica.

Ejemplos de la minificación en Magento 2

Magento puede minificar los ficheros de Javascript y Css para mejorar el performance. Para ello, utiliza dos librerías de terceros.

Magento crea un interface, que tiene un método minify. Las interfaces son como el índice de un artículo. Antes de ponernos a redactar el contenido, pensamos el esquema del artículo. Es como tener el plano de una casa antes de construirla. Otro ejemplo de la vida real puede ser todos los electrodomésticos tienen que poder enchufar. La interfaz puede ser Electrodoméstico, sus métodos pueden ser enchufar. Así todos los aparatos que sean del tipo electrodoméstico podrán enchufar.

        
            interface AdapterInterface
            {
                public function minify($content);
            }
        
    

En este caso, el interface AdapterInterface tiene un método llamado minify. Es decir todas las clases que implementen esta interfaz tendrán la funcionalidad de minificar el contenido. Está implementada por dos clases:

  • CSSmin: lib/internal/Magento/Framework/Code/Minifier/Adapter/Css/CSSmin.php
  • JShrink: lib/internal/Magento/Framework/Code/Minifier/Adapter/Js/JShrink.php

Estas dos clases tienen un método común, minify, porque implementan la misma interfaz. En el método minify, el método de las clases de terceros para minificar el contenido es llamado.

        
            #lib/internal/Magento/Framework/Code/Minifier/Adapter/Css/CSSmin.php

            public function minify($content)
            {
                $pcreRecursionLimit = ini_get('pcre.recursion_limit');
                ini_set('pcre.recursion_limit', self::PCRE_RECURSION_LIMIT);
                $result = $this->getCssMin()->run($content);
                ini_set('pcre.recursion_limit', $pcreRecursionLimit);
                return $result;
            }

            # lib/internal/Magento/Framework/Code/Minifier/Adapter/Js/JShrink.php

            public function minify($content)
            {
                return Minifier::minify($content);
            }
        
    

¿Qué conseguimos con el patrón Adapter?

Conseguimos integrar las librerías de terceros en el sistema Magento. Ahora podemos usarlas mediante la inyección de dependencias. Recomiendo leer este artículo type vs virtualtype.