4 capas de Magento 2
Magento 2 está compuesto por 4 capas: Persistent layer, Domain layer, Service layer y Presentation layer.
Persistent Layer
Esta capa hace interacciones directas mediante queries de sql con la Base de datos (Mysql, Mariadb...). Estas interacciones pueden ser Crear, Actualizar, eliminar o leer datos de la bbdd. Una tabla es un set de entidades. Si queremos sacar una sola fila (un objeto entidad) de la tabla, tenemos que crear ResourceModel. Si queremos sacar más de una entidad (varias filas de una tabla) tenemos que crear Collections.
Domain Layer
Esta capa también es llamada como Business Logic. Nos dice cómo los datos pueden ser creados, leídos , guardados o cambiados en la bbdd. Nos referimos a los Models. Los campos de una tabla se abstraen en api/data/***interface, que contiene los setters y getters a esos campos. Esta interface es implementada por el Model. Podemos definir comportamientos antes de guardar los datos en la bbdd con métodos por ej: beforeSave, afterSave etc. El model se conecta con resourcemodel en el _construct. Después de esa conexión , es posible sacar datos mediante $this->getData('nombre_del_campo'), es por eso que nos permite mapearlos en los getters y setters de la interface.
Services Layer
Esta capa combina ResourceModel y el Model en forma de métodos para facilitar su uso. Esta capa es como un puente entre la capa presentation Layer y Domain Layer. Por ejemplo un controlador quiere sacar una lista de productos en una página. entonces acude a alguna clase Repository e invoca un método, por ejemplo, getList(). Es tan sencillo como inyectar la clase repository en el constructor del controlador e invocar el método getList(). Esta es la manera correcta de hacer este tipo de operaciones pero en la práctica se invoca el collection, o resourcemodel y el model directamente en el controlador o viewmodel para este tipo de operaciones. Pero deberíamos intentar hacer las cosas siguiendo las buenas prácticas.
Presentation Layer
Esta capa es todo aquello que puede interacturar directamente con el cliente(navegador). Por ejemplo: blocks, javascript, less, css, layouts , controlador etc.
Referencias
- Magento 2: 4 capas