¿Cuántos patrones de diseño tiene Magento 2?
¿Cuántos patrones de diseño tiene Magento 2?
Patrones de diseño Magento 1/2
Parte 1: MVC
Magento utiliza un patrón MVC único, utilizando una capa de configuración basada en DOM. Aprovecha xml para impulsar la configuración y las acciones de la aplicación sobre la arquitectura normal de Modelo-Vista-Controlador.
Parte 2: controlador frontal
Magento utiliza el patrón del controlador frontal para implementar flujos de trabajo para su aplicación. Tiene un único punto de entrada (index.php) para todas sus solicitudes. Veamos cómo funciona todo.
Parte 3: Fábrica
El método Factory se usa para crear instancias de clases en Magento. Instancia una clase en Magento llamando a un método apropiado que pasa un nombre abstracto que representa un grupo de clase seguido de un nombre de clase. Los grupos de clase y sus abstracciones apropiadas se declaran en los archivos XML de configuración en la carpeta / etc / de su módulo.
Parte 4: Singleton
Al igual que la abstracción de clase de fábrica y los grupos de clase en Magento, el patrón Singleton se instancia para bloques y clases de la misma manera.
Parte 5: Registro
El patrón de registro es básicamente un patrón que permite que cualquier objeto o dato esté disponible en un ámbito público global para que cualquier recurso lo use.
Parte 6: prototipo
El patrón Prototype en Magento se usa como una extensión del patrón Abstract Factory. Asegura que se crea una instancia de una subclase apropiada mediante los tipos apropiados que se asignan a un objeto. ¿Qué significa esto? Básicamente, significa que siempre que necesite obtener una clase específica que se define a través de su tipo principal, el patrón prototipo asegura que obtenga la clase correcta que puede manejar lo que necesita.
Parte 7: grupo de objetos
El patrón de agrupación de objetos mantiene los objetos listos para su uso una y otra vez en lugar de volver a crear instancias y destruirlos una vez finalizados. Es una excelente manera de ahorrar en consumo de memoria y ciclos de cómputo.
Parte 8: iterador
El patrón iterador es un patrón de diseño que permite que un objeto atraviese los elementos de otra clase. Esto le permite especificar un iterador y permitir que se pasen múltiples conjuntos de datos diferentes sin cambiar la estructura subyacente que permite la iteración.
Parte 9: Carga perezosa
La carga diferida es un patrón de diseño que retrasa la carga de un objeto hasta el momento en que se llama al objeto. Con Magento, no utilizan esto con objetos, sino con datos.
Parte 10: Localizador de servicios
El localizador de servicios es un patrón de diseño que permite al usuario obtener un servicio encapsulando el proceso dentro de una capa de abstracción. Esto le permite al usuario recuperar el mejor servicio apropiado sin saber cuál es ese servicio en tiempo de ejecución.
Parte 11: Módulo
El patrón de diseño del módulo es una forma de programación modular que enfatiza la agrupación de la funcionalidad de un programa en módulos independientes e intercambiables.
Parte 12: Observador
El patrón de observador es donde se establece un detector de eventos en un determinado punto durante la ejecución de una aplicación. Otros componentes de la aplicación pueden "conectarse" a este detector de eventos y ejecutar su código durante este punto.
Parte 13: registro activo
Los objetos son una representación de una fila en la tabla de la base de datos. Estos objetos deben tener propiedades que reflejen las columnas que representan la estructura de la tabla y métodos para permitir modificaciones de estas propiedades en la base de datos.
El uso del patrón por Magento
Las clases que heredan después de la clase Mage_Core_Model_Abstract tienen acceso a los métodos load (), save () y delete () que permiten cargar, modificar, crear o eliminar registros en una tabla con la que está conectada la clase. Además, la clase Mage_Core_Model_Abstract hereda de Varien_Object, lo que nos da acceso a métodos verdaderamente mágicos __set () y __get () que son responsables de la asignación automática de columnas en una tabla de base de datos con las propiedades de un objeto dado.
Adición Magento 2
PATRÓN DE DISEÑO DE CONTRATO DE SERVICIO
Magento es un sistema modular o basado en extensiones, que permite a un desarrollador externo personalizar y sobrescribir partes centrales de su marco. Estas personalizaciones pueden dar lugar a varios problemas, por ejemplo, los desarrolladores tendrán que realizar un seguimiento de la personalización realizada por extensiones externas. Por lo tanto, para superar esto, Magento presenta un patrón de contrato de servicio. Un contrato de servicio es un conjunto de interfaces que actúan como una capa entre un usuario final y la capa empresarial. Por lo tanto, en lugar de exponer directamente la lógica empresarial para la personalización al usuario final, se interpone una capa llamada contrato de servicio.
Los contratos de servicio mejoran la modularidad de Magento. Ayuda a los comerciantes a actualizar fácilmente Magento Garantice una API bien definida y duradera que implementen otros módulos externos y Magento. Proporcione una manera fácil de exponer la lógica empresarial a través de las interfaces REST o SOAP.
GERENTE DE OBJETOS
Consiste en varios patrones como: - Inyección de dependencia, Singleton, Fábrica, Fábrica abstracta, Compuesto, estrategia, CQRS, Decorador y muchos más. Discutiremos algunos de los patrones más utilizados entre estos. El administrador de objetos tiene un papel muy importante que desempeñar, Magento prohíbe su uso directo. El administrador de objetos es responsable de implementar patrones de fábrica, singleton y proxy. Instancia automáticamente parámetros en constructores de clases. Antes de avanzar en el futuro, comprendamos acerca de los objetos inyectables y no inyectables:
OBJETOS INYECTABLES
No tienen su propia identidad, como EventManager, CustomerAccountManagementService.
OBJETOS NO INYECTABLES
Como cliente, producto, etc. Estas entidades generalmente tienen sus identidades y estado, ya que tienen sus identidades, es importante saber en qué instancia exacta de la entidad tenemos que trabajar.
INYECCIÓN DE DEPENDENCIA
Es una alternativa a Mage en magento 1. Es un concepto de inyectar el objeto dependiente a través de un entorno externo en lugar de crearlo internamente. Por lo tanto, solicitaremos recursos cuando se cree nuestro objeto en lugar de crear recursos cuando sea necesario. Esto ayuda en futuras modificaciones y las pruebas se vuelven muy fáciles al burlarse de los objetos requeridos.
PATRÓN DE FÁBRICA O CLASES DE FÁBRICA:
En las clases de Magento 2 Factory, crea una capa entre el administrador de objetos y el código comercial. Las clases de fábrica no necesitan definirse explícitamente ya que se generan automáticamente. Deberíamos crear clases de fábrica para objetos no inyectables.
PATRÓN DE PROXY
Las clases de proxy se utilizan para trabajar en lugar de otra clase y en Magento 2 a veces se utilizan en lugar de clases que consumen recursos. Para comprender qué hacen las clases proxy, veamos la razón que lleva a la aparición de las clases proxy. Como sabemos, Magento usa la inyección del constructor para la creación de objetos y cuando instanciamos un objeto, todas las clases en su constructor también crearán una instancia, lo que conducirá a una cadena de instanciación a través de un constructor, esto realmente puede ralentizar el proceso e impactar el rendimiento de una aplicación , por lo que para detener la creación de instancias en cadena, Magento utiliza clases proxy.
Veamos el siguiente código: -
Magento\Catalog\Model\Product\Attribute\Source\Status\Proxy
Magento\Catalog\Model\Product\Link\Proxy
Entonces, en el código anterior, estamos usando clases proxy para catalogProductStatus y productLink. Cuando corremos
php bin/magento setup:di:compile
Magento crea clases de proxy sobre la marcha usando di.xml con algunas convenciones fijas, reemplazando así el objeto original con un objeto de clase de proxy. Ahora veamos nuestra clase proxy para entender cómo está funcionando
Algunas convenciones comunes que Magento sigue mientras se crea el proxy:
Complementos (interceptores)
Visión general
Un complemento, o interceptor, es una clase que modifica el comportamiento de las funciones de clase pública interceptando una llamada de función y ejecutando código antes, después o alrededor de esa llamada de función. Esto le permite sustituir o ampliar el comportamiento de los métodos públicos originales para cualquier clase o interfaz.
Las extensiones que desean interceptar y cambiar el comportamiento de un método público pueden crear una clase de complemento que se conoce como complementos.
Este enfoque de intercepción reduce los conflictos entre extensiones que cambian el comportamiento de la misma clase o método. La implementación de la clase Plugin cambia el comportamiento de una función de clase, pero no cambia la clase en sí. Debido a que pueden llamarse secuencialmente de acuerdo con un orden de clasificación configurado, estos interceptores no entran en conflicto entre sí.
Limitaciones
Los complementos no se pueden usar con ninguno de los siguientes:
ObjectManager
Visión general
Las aplicaciones grandes, como la aplicación Magento, usan un administrador de objetos para evitar el código repetitivo al componer objetos durante la creación de instancias.
En el marco de Magento, la implementación de ObjectManagerInterface realiza las tareas de un administrador de objetos.
Responsabilidades
El administrador de objetos tiene las siguientes responsabilidades:
Creación de objetos en fábricas y proxies. Implementar el patrón singleton devolviendo la misma instancia compartida de una clase cuando se solicite. Gestión de dependencias instanciando la clase preferida cuando un constructor solicita su interfaz. Parámetros de instancia automática en constructores de clase. https://devdocs.magento.com/guides/v2.0/extension-dev-guide/object-manager.html