Certificación Magento 2: arquitectura basada en módulos [dependencias, limitaciones, interacciones]

¡Hola, lectores del blog de Amasty!

Continuamos trabajando en una lista de publicaciones de respuesta dedicadas a la certificación Magento 2 y ya cubrimos el primer tema de la guía de estudio.

Esta semana le hemos pedido a nuestro equipo de desarrolladores, Vitaly, que describa la arquitectura basada en módulos de Magento 2 y nos dé pistas sobre las limitaciones y la interacción del módulo.

Arquitectura basada en módulos de Magento 2 [breve descripción general]

Como es sabido, los módulos y temas en Magento 2 se utilizan como elementos de personalización. Donde los módulos dan diferentes características y propiedades a un sitio, y los temas afectan la apariencia.

Tanto los módulos como los temas tienen su propio ciclo de vida, lo que te permite instalar, deshabilitar y eliminar los elementos.

¿Qué te da eso?

El enfoque de modularidad de Magento hace que el código sea más claro. Le permite simplificar el proceso de desarrollo y el proceso de identificación y corrección de defectos.

¿Cuál es el objetivo general de cualquier módulo de Magento?

Cada módulo está desarrollado para proporcionar funciones específicas de Magento, introducir nuevas funciones o ampliar la funcionalidad de otros módulos.

Según los desarrolladores de  Magento  ,


Maximizar la extensibilidad ha sido nuestro objetivo en todos los aspectos del desarrollo de Magento.
Las tareas principales, como el
envío , se empaquetan como módulos discretos, y usted amplía sus funciones instalando módulos que compra a proveedores externos o crea usted mismo… Cualquier módulo está diseñado para funcionar de forma autónoma.

Cualquier módulo forma un grupo lógico independiente que consta de bloques, controladores, ayudantes y modelos (archivos php y xml) . Por lo tanto, el enfoque de modularidad asume que cada módulo tiene sus propias propiedades y características únicas. El hecho simplifica el desarrollo y mejora la calidad de la arquitectura framework Magento 2 .

Los módulos generalmente se encuentran en el directorio de proveedores de Magento 2 . El directorio tiene el siguiente formato: proveedor / <proveedor> / <tipo> – <módulo-mame> donde <tipo> se puede asignar a uno de los siguientes valores:

  • módulo – para módulos (módulo-cliente-importación-exportación)
  • tema : para interfaces y administradores (theme-frontend-luma o theme-adminhtml-backend)
  • language : para paquetes de idiomas (language de_de)

Por ejemplo: proveedor/magento/módulo-cliente-importación-exportación

Obtenga más información sobre la estructura de directorios de Magento 2 para su examen de certificación → 

Todos los módulos nuevos deben crearse en el directorio / app / code o en el directorio de proveedores al usar Composer.

Por ejemplo: Puede crear un módulo de cliente (Ejemplo CompanyName) en la ruta / aplicación / código / CompanyName / Ejemplo

A pesar de los archivos ejecutables (archivos de base de datos y archivos de interfaz), el directorio contiene las configuraciones del módulo, así como el archivo etc/module.xml . Este archivo incluye la información sobre el nombre y la versión del módulo y todas las dependencias del módulo.

Cada módulo debe nombrarse y declararse en el archivo module.xml , que se puede encontrar aquí: / app / code / <Vendor> / <ModuleName> / etc / . Al dar un nombre a un módulo, debe tener en cuenta el esquema Namespace_Module . Donde el «Espacio de nombres» es el nombre del desarrollador del módulo (proveedor) y «Módulo» es el nombre dado a la extensión por el desarrollador (proveedor). Debe describir el nombre completo y las dependencias:

Dependencias y limitaciones del módulo

La minimización de las dependencias de software es un principio básico del concepto de dependencia de Magento 2. Los módulos normalmente se diseñan para estar vagamente interrelacionados con otros. Así, cada módulo es responsable de una característica única. En este caso, los módulos realizan sus tareas con poco o ningún conocimiento de los demás. En esto, deshabilitar o eliminar un módulo no debe conducir a la desconexión o eliminación de otros módulos. Sin embargo, no olvide que todas las dependencias deben declararse correctamente.

Un módulo puede tener las siguientes relaciones con otros:

  • usos : el módulo A utiliza el módulo B;
  • reacciona a : el módulo A reacciona al módulo B si su comportamiento se desencadena por un evento en el módulo B (sin el conocimiento del módulo B sobre el módulo A);
  • personaliza : el módulo A personaliza el módulo B en caso de que cambie el comportamiento del módulo B;
  • implementa : el módulo A implementa el módulo B si implementa cualquier parte de comportamiento definida en el módulo B;
  • reemplaza : el módulo A reemplaza al módulo B si proporciona su propia versión de API, que el módulo B abre e implementa.

Todos los módulos dependen de un conjunto de lógica central: código PHP, bibliotecas y funciones básicas. Los componentes son heredados por los módulos.

Para administrar las dependencias de los módulos, debe conocer estos 3 pasos principales:

  • nombrar y declarar el módulo en el archivo module.xml ;
  • declarar las dependencias del módulo en el archivo composer.json del módulo;
  • decidir sobre el orden de carga de config y css. archivos en el archivo module.xml (si es necesario).

Por ejemplo: el módulo “Magento_Email” declara una dependencia del módulo “Magento_Cms”. Entonces, en el archivo module.xml del módulo “Magento_Email”, el módulo “Magento_Cms” aparecerá en la lista <secuencia>. Por lo tanto, los archivos «Magento_Cms» se cargan antes que los archivos «Magento_Email». Además, debe declarar una dependencia del módulo “Magento_Cms” en el archivo composer.json del módulo “Magento_Email”:

Todas las dependencias de Magento 2 están formadas por admin en el archivo composer.json de cada módulo:

Tipos de dependencia del módulo

En Magento 2 hay 2 tipos de dependencias de módulos: (1) dependencias duras y (2) dependencias blandas .

Los módulos con una dependencia estricta no pueden funcionar sin los módulos de los que dependen. Donde los módulos con dependencia suave pueden funcionar de forma independiente.

Si su módulo usa código de otro, claramente debe inyectar la dependencia de Magento 2.

¿Cómo cargar dependencias?

La lista <sequence> es un elemento opcional y se aplica solo en caso de que otros módulos estén involucrados y necesite indicar las dependencias de carga de archivos. La lista no se utiliza para otros tipos de componentes.

Por ejemplo: Sintaxis básica:

Orden de instalación de los módulos de Magento

En primer lugar, instale el módulo que sirve como dependencia para otro; en segundo lugar, instale el módulo dependiente de él.

Evite las siguientes dependencias en Magento 2:

  • circular (tanto directa como indirecta)
  • no declarado
  • incorrecto

Limitaciones del módulo principal

  • Cuantas más dependencias tenga un módulo, más difícil le resultará transferirlo a otro proyecto;
  • Debe mantener un orden de instalación estricto;
  • Las dependencias de múltiples módulos violan el principio de modularidad de Magento;
  • Complica la depuración de módulos y la lógica de dichos módulos.   

¡Esperamos que haya sido útil! Escríbanos si todavía tiene preguntas sobre el tema.

PD ¡No olvide estar atento y consultar nuestras próximas publicaciones en preparación para el examen de certificación Magento 2!