Modelos básicos de diseño PHP para desarrolladores de WordPress

El desarrollo del software significa repetirse de manera inteligente, utilizando funciones para encapsular el código repetitivo, eximiéndolo de la paliza para escribirlo cada vez. Esto no solo significa encontrar un modelo repetible e ir con él, es importante encontrar el modelo correcto. Aquí los modelos de diseño PHP ingresan al juego. Aunque a menudo pensamos en esto en términos de elegir una función o clase o importación de una biblioteca, este enfoque también se extiende a la arquitectura de la aplicación. La arquitectura de un marco, CMS, complemento, tema, clase o sistema a menudo se describe como que cumple con un modelo.
Ser consciente de los modelos y arquitectos de diseño PHP clásicos, así como los modelos comunes utilizados en WordPress pueden ser muy esenciales para ayudarnos a escribir un mejor código. Conductor de eventos vs. Model View Controller WordPress utiliza una arquitectura basada en eventos, donde hay ganchos en el software y complementos y temas básicos que actúan como eventos. Cuando WordPress se encuentra con un gancho, ejecuta todo el código “conectado” en ese evento. Esto cumple con el modelo de editor/suscriptor en el que WordPress o un complemento o un tema “público” con Apply_Filters () o do_Action () que puede “suscribirse a:” con add_filter () o add_action ().
JavaScript se ejecuta en el navegador utilizando un enfoque similar basado en el evento. En JavaScript, agregamos a los oyentes de eventos que tendrán lugar en ciertos eventos que se activan por la carga de la página, como Window.Onload () o basada en la interacción del usuario con un navegador, como un evento de clic. La arquitectura basada en el evento que WordPress y JavaScript en el uso del navegador es bastante lineal, lo que hace que sea fácil de entender. Se puede resumir como “cuando esto sucede, haz estas cosas”. El modelo de controlador de vista (MVC) no es tan fácil de entender porque describe una relación circular de tiempo real entre el usuario y la aplicación. Hay muchas variaciones en el modelo MVC, pero en general, hay tres partes: visualización, controlador y modelo. El recipiente o plantilla define la representación visual de los datos, en función del estado actual del modelo y puede modificarse de acuerdo con la entrada del usuario.
El controlador es el intermediario entre visualización y fuente de datos o API remota. También actualiza el modelo en función de sus interacciones con la vista remota y la API.
El modelo es el conjunto actual de datos, definido por el controlador y mostrado por la vista.
En general, una aplicación, marco o lenguaje que utiliza la arquitectura MVC es más difícil de entender que una que usa la arquitectura basada en eventos. Ninguno es “mejor” o “más fuerte”, pero son diferentes y adecuados para diferentes usos.
Hay varios cuadros que se han creado en WordPress que implementan el modelo MVC. Es genial cuando se ajustan a una necesidad específica, sin embargo, es importante tener en cuenta que soy MVC sobre una arquitectura basada en el evento. Modelos de diseño PHP La arquitectura útil de WordPress basada en eventos en sí no es un modelo de software. Pero se implementa utilizando la variante editor/suscriptor del modelo Observer. No siempre es una combinación perfecta para la definición manual de esos modelos, pero no importa. Aprender o usar modelos de diseño de software PHP no significa obtener puntos para su impresionante conocimiento sobre el tema o aplicar este conocimiento. En cambio, comprender estos patrones significa ayudarlo a usarlos cuando sea apropiado y saber si son la solución adecuada para un problema. También ayuda a leer el código de otras personas, lo que es importante mejorar sus habilidades y habilidades para ayudarlo a integrar o solucionar problemas. eso. Identificar un modelo de diseño PHP común lo ayuda a comprender el código que observa. No cubriré todos los modelos de diseño de software. En cambio, quiero mirar dos modelos formales que son importantes para los desarrolladores de WordPress. Quiero hablar sobre algunos modelos que no son formales, pero se usan mucho en WordPress. Singleton El modelo Singleton es muy común en el desarrollo del software y en el desarrollo de complementos de WordPress; sin embargo, puede usarse súper en el desarrollo de complementos de WordPress.
El propósito del modelo Singleton es asegurarse de que solo haya una instancia de la clase que lo implementa. En PHP, por defecto, cualquier clase se puede institar cualquier número de veces. En su mayor parte, esto es excelente porque permite el uso de clases para crear más objetos con la misma estructura que representan datos diferentes. Pero, ¿qué pasa con una clase diseñada para cargar un complemento o aplicación? ¿Por qué le gustaría que se ejecute dos veces? Probablemente solo quieras una instancia en esa clase. ¿O qué pasa con una clase que construye un objeto que contenga la configuración de un complemento o aplicación? Nuevamente, solo tiene sentido una instancia de esa clase. Vea solo una instancia de la clase, por lo que el nombre. Singleton trabaja declarando al constructor de clases como privado o protegido. En este modelo, se utiliza una variable estática privada o protegida para mantener el tribunal de clase. Luego se utiliza un método público estático para hacerse cargo de esa variable. Antes de hacer esto, verifique que esa variable sea nula y, de ser así, instale la clase y almacene la corte en esa variable. Aquí hay un ejemplo: <? Php
Clase Singleton_example {
/**
* Posee el tribunal de clase
*
* @Access Private
*
* @Var Singleton_example
*/
Instancia privada estática $;
/**
* Constructor privado para evitar nuevos tribunales.
*/
Función privada __construct () {
// Siéntase libre de hacer cosas que deberían suceder una vez aquí.
}
/**
* Obtenga una instancia de clase
*
* @return senceo_example
*/
Función pública pública get_instance () {
if (null === self :: $ instancia) {
self :: $ instance = self new ();
}
devolver self :: $ instancia;}
} Debido al constructor privado, no puede acceder a esta clase usando la nueva palabra clave de la siguiente manera:
$ objeto = nuevo singleton_example (); Esto haría que PHP llame a un método privado, que es ilegal. En su lugar, obtendrá una sola instancia utilizando el método get_instance (): $ objeto = sencillo_example :: get_instance (); Ahora la variable $ objeto contiene el tribunal de clase y puede usarlo para llamar a métodos no estatales de esa clase. El ejemplo anterior es típico para WordPress porque acepta PHP 5.2. En algunos casos, es posible que desee subcallar una clase que implementa el singleton. No hay muchos casos en los que le gustaría hacer esto, pero puede usar conexiones estáticas tardías:
<? Php
Clase Singleton_example_two {
/**
* Posee el tribunal de clase
*
* @Access protegido
*
* @Var Singleton_example_Two
*/
$ Tribunal estático protegido;
/**
* Constructor protegido para evitar nuevos tribunales.
*/
La función __construct () protegida {
// Siéntase libre de hacer cosas que deberían suceder una vez aquí.
}
/**
* Obtenga una instancia de clase
*
* @return senceo_example
*/
Función pública pública get_instance () {
if (null === static :: $ instancia) {
static :: $ instancia = new static ();
}
Regreso static :: $ Court;
}
} Este ejemplo es similar, pero usa la variable de la corte protegida. También reemplaza la palabra clave, con la palabra clave estática para garantizar que el PHP se refiera al tribunal actual, no al tribunal matriz al submarlo.
Tenga en cuenta que Singleton tiene muchas desventajas y se usa súper en WordPress. Eso no lo hace daño, pero ten cuidado. Un solo -Sington tiene significado para la clase de un complemento responsable de cargar un complemento. Su placa puede necesitar una sola instancia de una clase, pero otros que se integran con su complemento o suplementos para su complemento pueden necesitar sus propios tribunales. A menudo, los complementos de WordPress tienen una clase principal con un sencillo que agrega una instancia de muchas otras clases como sus propiedades. Esto les permite evitar más solteros, al tiempo que tiene el beneficio de un fácil acceso a una determinada instancia de ciertas clases. Otro caso en el que los singles se usan mal son clases que no tienen razón funcional para ser instantáneas varias veces, pero no está mal al hacerlo. A menudo, estas son clases que realmente no representan un objeto de datos, pero son una colección de funciones relacionadas. La declaración estática de todos los métodos de estas clases puede simplificar las cosas dramáticamente. El modelo de fábrica de fábrica El modelo de fábrica no se usa mucho en WordPress, pero vale la pena comprenderlo, porque explica los sistemas complejos que involucran muchas clases separadas. Una clase que implementa el modelo de fábrica está diseñado para construir un objeto u objeto a partir de otras clases. Es por eso que lo llamamos fábrica, creamos otros objetos. Aquí hay un ejemplo simple, por ejemplo, como una fábrica que muestra cómo funciona. Esta fábrica básica se usa para construir instancias de la clase WP_POST por una variedad de medios: Post_fabric Clase {
/**
* @var wp_post
*/
protegido $ post;

Función pública __construct ($ post = null) {
if (is_a ($ post, ‘wp_post’)) {$ this-> post = $ post;
} Elseif (is_numeric ($ post) || is_a ($ post, ‘stdclass’)) {
$ _post = get_post ($ post);
if (is_obiect ($ _post)) {
$ this-> post = $ _post;
}
}de lo contrario{
$ this-> post = get_post ();
}
}
Función pública get_post () {
devuelve $ this-> post;
}
} Este es un ejemplo muy simple y podría ser una forma demasiado complicada de asegurarse de que una variable sea realmente un wp_post. Dicho esto, limita la necesidad de repetir el código de validación en todas partes, al mismo tiempo asegurando un objeto WP_Post, una identificación de publicación o los argumentos WP_QUEY son realmente el objeto WP_Post. Nuevamente, es demasiado simple para ser realmente útil y muestra una desventaja del modelo de fábrica. Los gastos adicionales que pueden no merecer. Pero, como en este ejemplo, se puede usar para introducir la validación de entradas, lo que podría valer la pena. Carl Alexander tiene un excelente artículo sobre el diseño de una clase para administrar publicaciones de WordPress que vale la pena leer cuando piensas en una fábrica como esta. Pero hay muchos casos en los que podría valer la pena y es una excelente manera de crear un sistema que cree varias partes de la aplicación en una sola configuración. Por ejemplo, cuando agregamos una API de punto final o un conjunto de rutas, normalmente definimos los campos para esos puntos finales en la clase que se ocupa de la ruta de la cual pertenecen esos puntos finales. ¿Qué pasa si necesitábamos esta configuración en otro lugar? ¿Qué sucede si nos gustaría inyectar esa configuración en un generador de puntos final, así como en otros generadores?
Luego usamos una fábrica u otras fábricas. Recientemente publiqué un generador de terminal API REST de WordPress que implementa un modelo de fábrica. Aunque es útil por mi cuenta, también trabajo en una biblioteca para consumir la misma configuración, pero crearé una interfaz generada por Backbone que usa esos puntos finales. Debido a que la configuración está relacionada con el código, espero que sea adaptable a generar la interfaz de usuario en Angular y también la adopción de la especificación API Fields una vez completada. Otro lugar donde las fábricas podrían ser útiles son los suplementos de complementos. A menudo, los complementos tienen suplementos similares que usan los mismos ganchos y usan mucho código repetitivo. Uno de los usos de un modelo de fábrica sería la configuración automática de todos esos ganchos. WordPress Core Globals Una de las razones para usar un modelo de diseño PHP Singleton es que evita el uso de una variable global para almacenar una instancia de una clase. Un singleton presenta una condición que es como un global en una aplicación, sin usar una variable global. Las variables PHP globales son completamente mutables. Se pueden deshabilitar o redefinir en cualquier momento. Todos aceptamos nunca cambiar la variable $ post global en WordPress en una matriz, pero podemos.
No hay nada ilegal en cambiar $ post en una matriz aleatoria o cancelar su propiedad post_title. La próxima vez que se accede, los problemas se manifestará, posiblemente como un error fatal. El núcleo de WordPress no usa Singleton. Ciertamente no puedo decir, pero probablemente sea un artefacto de WordPress y su predecesor B2/cafetero que viene antes de que las propiedades estáticas se introduzcan en el PHP. En cambio, WordPress pone muchas instancias de clase en una variable global. Estas clases tienden a tener un constructor público. En el caso de wp_rewrite, que está estrechamente relacionado con las reglas de reescritura rescatadas, probablemente no haya posibilidad de querer una instancia de wp_rewrite, aparte del $ wp_rewrite global. Si WordPress hubiera escrito hoy, wp_rewrite probablemente implementaría el modelo Singleton. En lugar de: global $ wp_rewrites; $ wp_rewrite-> flush_rules (); Probablemente usamos: wp_rewrite :: get_instance ()-> flush_rules ();
Pero, esto podría ser un sobrecargador del modelo de diseño PHP Singleton, puede haber una clase principal de WordPress, que tenía un singleton y contiene un WP_REWrite, WPDB, WP_REST_SERVER. $ Wp_rewrite Global es una deuda técnica pura que aparece cuando un proyecto tiene más de diez años y se compromete a no romper la comparación inversa. Y déjame ser claro, ser más “técnicamente correcto”, no vale la pena, en mi mente, romper casi todos los sitios de WordPress. El uso de globales en WordPress para clases que tienen un “tribunal principal”, pero que se puede reutilizar tiene mucho sentido. Por ejemplo, hay un objeto global $ WP_Query que contiene la consulta principal basada en la demanda actual. Esto nos permite llamar al tribunal WP_QUEY para la demanda actual y también hacer nuestros propios tribunales WP_Query para otras consultas. Si WP_QUEY usara un sencillo, deberíamos escribir nuestras propias consultas SQL siempre que necesite hacer más consultas para publicaciones en la misma solicitud, lo que sería terrible. Sí, hay mejores formas de almacenar esa consulta principal, si su marco no tiene más de 10 años para almacenar, lo que llamamos la consulta principal. Mi idea no es renunciar a WordPress. Mi idea es identificar un modelo que debemos olvidar porque nos ayuda a comprender WordPress. También nos ayuda a ver cómo podríamos hacerlo mejor en nuestro propio trabajo. ¿Por qué?

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *