Blog
Capas Arquitectónicas de Magento
- enero 19, 2024
- Publicado por: admin
- Categoría: Magento 2
Es importante saber este concepto, si bien eres un desarrollador avanzado en Magento y no te guste la teoría probablemente este concepto técnico lo pases por alto y al final que puede importar si eres un experto en Magento creo que no requieres de este conocimiento técnico para seguir desarrollando componentes sofisticados y avanzados en Magento, pero sabes una cosa el que aprende las bases teóricas y técnicas de Magento cuando se piensa que ya lo sabe todo no ha entendido que Magento no solo es sentarse al computador y realizar códigos de programación por eso la gran mayoría de proyectos desarrollados en Magento no son del todo de una calidad buena, que deberían ser de una calidad Excelente por que desarrollar para Magento hoy día en el mercado de los programadores es una gran demanda y las empresas están pagando muy bien por ello, creo que nosotros como desarrolladores lo mejor que podemos hacer es un productos final de calidad.
Bien cuando entiendas que son las capas arquitectónicas en Magento te darás cuenta que no es nada complejo e incluso la mayoría que ya programamos módulos personalizados ya hemos utilizado estos conceptos técnicos, lo que quiero es que aprendas el origen y el lugar correcto de cada clases y componente que se desarrolla, porque he visto que casi el 90% de programadores inicia desarrollando sus clases en donde le plazca al final el código hace lo que tiene que hacer, pero eso no está del todo bien ya que a futuro esa pieza de código no podrá ser reutilizada como se esperaría o bien las dependencias que requiere no funcionaran como debería, creo que acá en esto último hay más de uno que se siente identificado, y está claro porque lo que queremos al iniciarnos en Magento es ver que nuestro código pueda dar un resultado sin importar como fue realizado.
Que son las capas arquitectónicas.
Hablando en conceptos teóricos Magento se divide en 4 capas, esto es básico de entender y estas cuatro capas serian PRESENTACIÓN, SERVICIO, DOMINIO Y PERSISTENCIA, apropósito las he colocado en mayúsculas porque psicológicamente eso es lo que puedo grabar en mi cabeza una vez que empiece la explicación las tendrás más en cuenta, cuando finalice por la ultima entenderás cada una y probablemente con el tiempo y la práctica, tus desarrollos serán mejor que al principio.
Cuando alguien nos pide desarrollar un módulo personalizado que es lo que inmediatamente pensamos hacer, probablemente copiar una estructura de un modelo ya existente u utilizar una herramienta que nos cree la estructura base de un modelo, ¿Pero realmente eso es lo que necesitamos? , pues podría funcionar es correcto pero no sabemos aun si eso se adapte a lo que estamos buscando, al final terminaremos adecuando esa estructura base a lo que necesitemos, y aquí es donde entrara toda esta información técnica si entendemos esas cuatro capas arquitectónicas podremos saber dónde colocar una clase cuál es su función y objetivo y la pieza final de código que tengamos como resultado será una de mejor calidad.
Creo que la mayoría ya sabemos desarrollar pero siento que no en el orden correcto y las formas correctas así que esto será muy viable para entenderlo y conseguir que las piezas se puedan comunicar de la forma correcta porque aquí está la primer clave y es eso cada clase o pieza de código que se desarrolla su existencia es más que todo para que se pueda comunicar con otra pieza o clase de código, bien podemos adaptarlas y hacer que se consiga el mismo fin con atajos y nuestras propias técnicas pero si no sigues los lineamientos y ordenes que establece Magento no hay que quejarse en el futuro por la frustración que ocasiona desarrollar libremente sin lineamientos.
PRESENTACIÓN
La capa de presentación dice técnicamente que es con la que interactúan directamente los usuarios que navegan en nuestro ecommerce, y que contiene el diseño los bloques, plantillas e incluso las propias clase de Controlador así como todo el CSS, JS, Jquery, RequireJs y LESS y como punto final dice que solo tres usuarios son los que interactúan con esta capa, Los visitantes de nuestra tienda, los administradores del BackEnd y aquellos que se conectan a la página web por medio de la API web, pues si leemos esto creo que da claro no pero a todo esto solo agregare mis propias palabras.
La capa de presentación es la página web que puedes ver cuando entras a un sitio, y lo que hace que se vea de esa forma bonita como los estilos en cascada, si esta tiene animaciones o bloques que nos permiten dejar información como los formularios y demás son los que forman parte todos en conjunto de esta capa que como su nombre lo dice es la presentación que tendrá nuestro sitio web de primera vista, sencillo no.
SERVICIO
La capa de servicio dice técnicamente que es el puente entre la capa de PRESENTACIÓN y la capa de DOMINIO, esta contiene los contratos de servicio que definen el comportamiento de la implementación, es de igual forma que es en esta capa en donde se pueden encontrar las llamadas a API REST/SOAP.
Creo que dé primera vez no se podría entender claramente por qué es muy técnico, si el desarrollador no sabe que es un contrato de servicio o peor aún no conoce de webservices, pero voy a comentarlo como de costumbre en mis propias palabras, ya sabemos que todo la presentación de una página web es la capa de PRESENTACIÓN, pues una página web como tal estática no representaría mucho en el mundo digital, lo que realmente nos interesa al final es poder hacer que los visitantes interactúen con la página web, ya sea mediante interacciones en la pantalla o formularios que recaben información y al final estas trabajen por detrás y le den un resultado satisfactorio a un cliente, pues aquí está la respuesta la capa de SERVICIO es la que se encargara de tomar esa información o esa interacción con el cliente y la comunicara a la programación interna de Magento, y aquí me pregunto por qué no simplemente envió una petición al servidor y listo que me resuelva, pues no es tan sencillo más bien se ha pensado en un excelente modelo de comunicación para que este pueda ser flexible, escalable y seguro, así que la capa de SERVICIO requiere de una implementación bien definida que tomara lo que deja el usuario o lo que quiere comunicar al interno de Magento y lo asegurara lo llevara por un camino viable para comunicárselo a una capa que está más interna en Magento la capa de DOMINIO.
Y de que me sirve todo esto!!! Pensemos en un ejemplo de película, si alguien ya ha visto la película de la Red social de la creación de Facebook en la escena en donde a Mark Zuckerberg le dan una idea del estado sentimental de las personas, el correr rápidamente a su apartamento llega a su computadora abre su código y coloca el estado sentimental de las personas, al parecer lo hace muy rápido y muy fácil y con eso dice ya está listo, genial no!!! Pues que podríamos pensar que ha sucedido, como que sonó absurdo no pero en realidad hablando de cuestiones técnicas de que depende agregar un nuevo campo a una tabla de una base de datos de tipo string cadena de caracteres y que esta pueda tomar toda la capacidad CRUD de eliminar, agregar actualizar, pues es todo una serie de instrucciones no.
Pues en realidad parecerá absurdo pero en la buena programación eso se puede conseguir con unas simples líneas de código, y a esto me refiero a la definición de Contratos de Servicio, pero eso suena muy técnico no, te diré de que va esto es simplemente una clase para ser exactos una interface un simple código en PHP definido como interface que define la estructura de una tabla de la base de datos aquí es donde defines los campos que tendrá tu tabla así como los métodos que podrán darle toda la interactividad con todo el sistema con un par de líneas de código, sé que podemos desarrollar un modelo de tablas en Magento sin usar los Contratos de Servicio pero que elegante seria que en el futuro si requerimos de agregar un solo campo más que almacenara un valor a nuestro código de programación y esto dependa de solo 2 líneas de código es genial no.
Pues en general es a lo que se refiere esta capa de SERVICIO aquí se crean las clases u interfaces bien estructuradas que serán la comunicación entre lo que un usuario deja en un formulario de la vista del cliente pasar por un Controlador va a un modelo de una tabla de datos y sabrá como realizar una inserción de un registro en Magento y si todo está organizado de esta forma en el futuro esto podrá ser flexible para ampliar el modulo e incluso para poder hacer que se comuniquen desde el exterior mediante una sencilla petición por API REST porque ya tendrá las bases bien definidas solo faltaría darle permisos de seguridad para que se logre el fin.
DOMINIO
La capa de servicio dice técnicamente que es la lógica de negocio de Magento, y esto creo que muchos ya lo han escuchado en este y muchos otros lenguajes de programación, siguiendo con la definición también se dice que esta capa tiene que ver con los objetos de datos genéricos así como los modelos que componen la lógica empresarial y finaliza con que estos modelos no contribuyen a la persistencia de los datos pero que si tienen una referencia a un modelo de recurso que se utiliza para recuperar y conservar los datos en una base de datos MySQL, pero esto lo pueden realizar de forma transparente dependen de componentes de Observer, complemento en definiciones de configuración mediante di.xml
Creo que tanta información no queda muy claro y más porque aquí interactúan un poco más de conocimiento que hay que conocer ya de Magento como los eventos Observer, las configuraciones de clases mediante archivo XMl di.xml así como de los complementos de tipo.
Pero vamos a mis propias palabras, aquí en esta capa es muy similar a la anterior a la capa de SERVICO, pero a diferencia aquí no son interfaces de programación que se requieren, aquí hablamos de la Clases de los modelos de datos que contiene una estructura básica para poder definir la comunicación con una tabla nativa o una tabla personalizada, si aún no sabes cómo estructurar las clases de modelos para tablas personalizadas te invito revises un artículo que ya tengo y entenderás un poco más, pero a lo que se refiere esta clase es que si ya tienes las estructuras definidas en clases de interface como la capa de SERVICO ahora lo que falta sencillamente es comunicarte con una tabla leer datos de la misma y estas clases de Modelo son las encargadas de definir la estructura de comunicación con tablas de datos.
PERSISTENCIA
La capa de persistencia dice técnicamente, que está a cargo de todas las solicitudes CRUD, en donde Magento utiliza una estrategia de patrón de registro activo para la capa de PERSISTENCIA, aquí habla específicamente del patrón CRUD abreviatura de créate, read, update y delete, esto bien puede ser para modelos Simples o Modelos EAV.
Bueno creo que para terminar estas secciones solo comentare de que va esta capa, y es la encargada de la interacción de los datos con las tablas ya sean de modelos simples o modelos de entidad atributo, en síntesis es la que se encarga de comunicarse con las clases del modelo para lograr su fin de registrar, eliminar y actualizar un dato de alguna tabla.
RESUMEN
Para finalizar con este artículo comentare lo siguiente a modo de ejercicio para entender en que momento entra cada capa y cuál sería el fin.
Hablemos de un componente básico del proyecto supongamos que necesitamos generar un formulario para que se registre los visitantes que estarán a un sistema de compra de un producto promocional en donde vean un simple producto y dejen un precio calculado aproximado del producto, algo muy básico no.
Pues bien lo que necesitamos es de una simple tabla que registre los datos del usuario así como del precio que calcula lo que vale el artículo.
Lo primero a desarrollar será la página que vera el cliente una landing page bonita y agradable formada por estilos y algún par de animaciones jQuery que le hagan más atractivo el registrarse y participar en la dinámica, pues bien aquí tenemos ya la primer implicación la capa de PRESENTACIÓN, construir dentro de un .phtml toda la semántica HTML5 y mediante un archivo LESS dará la mejor vista.
Pasemos a desarrollar una estructura de lo que definirá nuestra tabla básica en clases de interfaz en donde definiremos los datos del registrante así como un campo más para registrar el precio calculado, estas clases de interfaz definirán cada uno de los campos así como cada uno de los métodos que debería tener cada campo de la tabla para poder realizar sus futuras operaciones de registro y lectura, y aquí es donde ya hemos entrado a la capa de SERVICIO el simple hecho de estructurar en clases de Interfaz nuestro modelo de tabla ya hablamos de esta capa.
Ahora bien como funcionara nuestra tabla de registro de usuarios así como su cálculo de precio, pues para lo cual necesitamos crear las clases del Modelo de datos que una vez tendiendo la clase del modelo principal que se encargara de definir las reglas de negocio para acceder a los datos de nuestra tabla simple. Aquí también definiríamos nuestras clases de Instalación de la tabla ya que de otra forma el modelo no podría funcionar sin saber cuál es la tabla origen a la cual debe consultar, Y A todo lo anterior se define como la capa de DOMINIO.
Finalmente para hacer que el modelo de datos funcione necesitamos agregar clase al modelo que son las encargadas de almacenar los datos en la tabla recién creada y a esto se le llama como la capa de PERSISTENCIA las clases del modelo que se encargaran de la funcionalidad CRUD.
Hay más cuestiones técnicas que aprenden e intervienen en la integración del conjunto de capas arquitectónicas de Magento pero lo esencial es lo que he comentado entiende esta parte y lo demás sabrás en donde es su lugar , por decir un ejemplo si hablas de requireJS estamos hablando de la capa de PRESENTACIÓN ya que esta es la que se comunica y configura dentro de los .phtml las vistas que muestran la página web al cliente, una clase de bloque de igual forma, un controlador estaría en la capa de SERVICO ya que es la que comunica los datos que deja el cliente con los modelos de datos y así sucesivamente.