Los creadores de Zend Framework 3 son grandes fanáticos de varios patrones de diseño. Aunque no tenemos que saber sobre patrones para leer este libro esta sección se propone darnos una idea sobre los patrones de diseño en los que está basado ZF3.
El patrón Modelo-Vista-Controlador (MVC). El patrón Modelo-Vista-Controlador se usa en todos los frameworks modernos de PHP. En una aplicación MVC separamos el código en tres categorías: modelos (nuestra lógica de negocio va aquí), vistas (nuestra presentación va aquí) y los controladores (el código reusable para interactuar con los usuarios va aquí). A esto además se le llama separación de conceptos. Con MVC, podemos reusar nuestros componentes. Además, es fácil substituir cualquier parte de esta tríada. Por ejemplo, podemos fácilmente reemplazar una vista por otra sin cambiar la lógica de negocio.
El patrón de Diseño Guiado por Dominio (DDD). En Zend Framework 3, por convención, tendremos la capa de modelo dividida en entidades (clases que representan tablas de base de datos), repositories (clases usadas para recuperar entidades de la base de datos), objetos con valor (clases de modelo que no tienen identidad), servicios (clases responsables de la lógica de negocio).
El patrón de Diseño Orientado a Aspectos. En ZF3 todo está manejado por un
evento. Cuando un usuario del sitio pide una página, un evento es generado
(lanzado). Un oyente (u observador) puede capturar el evento y hacer algo
con el. Por ejemplo, el componente Zend\Router
analiza la URL y determina a que
clase controlador llamar. Cuando el evento finalmente llega al punto de generar
la página, una respuesta HTTP se genera y el usuario ve la página.
Patrón de Instancia Única. En ZF3 existe una objeto administrador de servicios que es el contenedor centralizado de todos los servicios disponibles en la aplicación. Cada servicio existe en una instancia única.
El Patrón Estrategia. Una estrategia es solo una clase que encapsula algún algoritmo. Podemos usar diferentes algoritmos basados en alguna condición. Por ejemplo, la página que se imprime tiene varias estrategias de impresión que hace posible imprimir páginas de manera diferente (el proceso de impresión puede generar una página HTML, una respuesta JSON, un RSS, etc.)
El Patrón Adaptador. Los adaptadores permiten adaptar una clase genérica a
un caso de uso concreto. Por ejemplo, el componente Zend\Db
provee acceso
a la base de datos de una forma genérica. Internamente, se usan adaptadores
para cada base de datos soportada (SQLite, MySQL, PostgreSQL, etc.)
El Patrón Fábrica. Podemos crear una instancia de una clase usando el
operador new
. O podemos crearla con una fábrica. Una fábrica es solo una
clase que encapsula la creación de otros objetos. Las fábricas son útiles
porque ellas simplifican la inyección de dependencias. Además, usar fábricas
simplifica las pruebas de nuestro modelo y de las clases controladores.