OOP Avanzado para WordPress Parte 8: Desarrollo de nuevas funciones para complementos extensibles de WordPress utilizando el desarrollo basado en la prueba

En mi última publicación de esta serie sobre la programación avanzada de objetos orientados a PHP para el desarrollo de WordPress, pasé por la restauración del bajo nivel de un complemento, utilizando pruebas para guiar el proceso y asegurarme de que todo funcione correctamente. Digo “agua de bajo nivel” porque se centró en la parte interna de cómo funcionará el sistema. No cubrí demasiado sobre el cableado de cosas juntas. En este artículo, esta publicación aparece aquí. El siguiente paso fue crear una fábrica que asuma una serie de argumentos para que la API REST agregue una serie de tipos de publicaciones, para conectar automáticamente esos filtros.
El desarrollo basado en pruebas (TDD) es la práctica de escribir pruebas para una modificación en una base de código antes de escribir la modificación. Al hacerlo, la prueba se convierte en la especificación que define si la nueva característica/ remediación de errores/ lo que sea que funcione o no. La prueba existente define si la nueva característica/ remediación de errores/ lo que sea que cree errores de regresión o no. Cambiar a TDD por código existente no es fácil. Usemos este complemento existente para ver cómo puede funcionar. Evaluación de las pruebas existentes En primer lugar, es importante ver qué hacen las pruebas existentes. En este momento, tenemos pruebas que cubren la forma de los resultados de interrogación, principalmente que son una serie de wp_posts . Una prueba similar asegura que la respuesta API REST tenga la forma correcta.
Todos estos son buenos, pero ninguno de ellos cubre el contenido de esos wp_posts. Así que ahora hemos identificado lo que falta en nuestra suite de prueba. Ahora estamos listos para escribir pruebas. A partir de las entradas simuladas, comencé creando una serie de lo que quería ingresar a esta clase de fábrica. Escribí esa matriz en una prueba de fábrica. Ahora, crearé una versión no funcional de la fábrica y crearé una prueba que verifica su funcionalidad básica. Aquí hay un boceto de la clase de búsqueda que consume las dos interfaces y tiene funciones para obtener:
Que creará mi fábrica. Comencemos la fábrica con un método que se hace cargo de los argumentos para agregar y los tipos de publicaciones para agregar y emitir una búsqueda:
Ahora hemos escrito lo suficiente para cubrir el tipo de retorno de cada uno de los métodos públicos definidos:
Esto aún no pasará: es el llamado a los métodos para los que aún no he escrito los cuerpos. Una vez que agregamos un cuerpo a estos métodos, tenemos una forma de cuantificar si ya funciona. Pero eso pasa ante nosotros. En primer lugar, debemos hacer que la clase de búsqueda configure todo. Antes de que esto suceda, necesitamos saber qué está haciendo. La búsqueda tiene la responsabilidad de pegar el sistema. Por lo tanto, realiza varias tareas, pero mientras actúe como controlador que envía otros sistemas, en función de la lógica definida en esos otros sistemas, todavía tiene solo una responsabilidad.
Enumeremos esas tareas para enviar:
Debe consumir un objeto que implementa la interfaz modifyschecontract para cambiar el esquema de ciertas rutas API y saber qué rutas modificar.
Debe consumir un objeto que implementa la interfaz <codifyQueryargContract para cambiar la lista blanca de argumentos de consulta. Debe conectarse a los complementos de WordPress (ganchos) para realizar estos cambios.
Comencemos con la última conexión a la API de los complementos. Esto es lo que tenemos menos control y dictado con lo que tenemos que trabajar. Gran parte de mi preocupación sobre cómo obtener todos los derechos de los objetos dependientes: WP_Query y WP_REST_REQUEST ha dejado la potencia del complemento.
La búsqueda tendrá que agregar ganchos, que queremos eliminar. Agregué una interfaz para formalizar un modelo para esto, porque es probable que se reutilice.
Como mi objetivo, con el último conjunto de interfaces, era hacer que FiltersChema () y FilterQueryargs () desaparezcan, agregaré esos métodos a la búsqueda. Debería poder usar los métodos de esas dos interfaces que definen cuáles son los argumentos que se proporcionarán en el filtro y si aplicar el filtro para tener un lugar que realice esta tarea para cada implementación. Aquí hay una clase que podría hacer esto, excepto que ninguno de los métodos tiene cuerpos:
Pero, podemos escribir pruebas para mostrar cómo deberían funcionar esos métodos. Además de la prueba que ya tengo, la agregaré a la prueba si se establecen las propiedades para el modificador de consulta ARI y el esquema Arg. Esto cubre esos métodos y se asegura de usar en otros métodos:
No cubre si esos ganchos funcionan y si funciona correctamente. Hay dos requisitos clave, cuatro de hecho, ya que tenemos que aferrarnos. Aquí están las pruebas para demostrar que para el cambio de la lista de consultas White FRA: también debemos tener pruebas para cambiar el argumento del esquema. Esta es una gran oportunidad para jugar juntos en casa e intentar lo que has aprendido. Ingrese una solicitud de dibujo, participe activamente para un beneficio educativo máximo.
Diseñando una fábrica OK, ahora comencemos a armar esto en nuestra fábrica. Las fábricas son el lugar donde se ensamblan los objetos. La abstracción hace que las fábricas sean más eficientes, porque la misma herramienta puede crear productos diferentes pero similares, debido al uso de una interfaz común. Por lo tanto, he visto aquí una oportunidad para mover una gran parte de la implementación de las clases de las clases de consulta Arg y el esquema ARG en clases abstractas que heredé, para que puedan reutilizar esa lógica dentro de la fábrica. Sin eso, debería usar corte y pegado o tal vez una característica para reutilizar esa lógica. La herencia, sin embargo, es la solución más simple. Tiene sentido, quiero una o más clases que implementen la misma interfaz y que prácticamente hagan lo mismo con diferentes detalles de implementación. Esta es la herencia de clase.
Aquí está mi clase de Modificador de Argumento Resumen:
Y aquí está la clase abstracta del modificador de esquema arg:
Probablemente haya notado que la clase solo implementa la interfaz. Tanto que podría hacer reutilizable en esta etapa, así que eso es lo que. Las clases abstractas vacías tienden a acumular métodos reutilizables con el tiempo. Ahora que tenemos estas dos clases, podemos extenderlas dentro de nuestra fábrica. Elegí usar clases anónimas que extiendan estas dos clases. Esto me permitió mantener toda la lógica de fábrica en la fábrica. Las clases anónimas son como funciones anónimas, no tienen nombres y se definen como necesarios. Las abrazaderas anónimas pueden extender otras clases, implementar interfaces y usar funciones. Representan su dominio en una variable especial $ esto y pueden tomar argumentos a través de un método mágico __construct (). Al igual que en las clases. Por ejemplo, esta clase anónima expande WP_QUEY y redefine el método de consulta:

Nuestras clases anónimas que irán a Factory :: Search () están comenzando a verse así:
Ambos tomarán $ PostyPestosupport que se transmite al método en el que son adictos al constructor. Ese constructor no existe en las clases que heredé, por lo que las clases anónimas deben declarar un constructor.
Debido a que este método se transmite a una serie de argumentos, su tarea es viajar y recopilarlos correctamente dentro de los dos objetos responsables de usar filtros de WordPress para proporcionar esos datos. Aquí está ese bucle:
Ahora que la forma de la ranura en la que deben pegarse las partes es más clara, para comenzar a construir la clase de búsqueda para la cual esta fábrica crea objetos.
Esta no es la implementación completa, pero aumenta las dos llamadas inversas para nuestras azadas.En ambos casos, la búsqueda es capaz de saber si el filtrado debe tener lugar sobre la base de un método, definido en la interfaz que es de un tipo sugerente para devolver un booleano es verdadero o falso.Es capaz de obtener la matriz de datos para agregar a los filtros utilizando un método que se define en la interfaz y el tipo sugerido para devolver una matriz.Esto requiere un segundo referencia a las dos interfaces que mostramos antes y aún diría que tendríamos que ver.Ahora es el momento del segundo referencia.Aquí está la nueva interfaz para filtrar los argumentos de consulta: y aquí está la nueva interfaz para filtrar los argumentos del esquema:
Este referencia elimina lo necesario para que estas clases se conecten de manera efectiva a la API del complemento de WordPress. Todo esto ahora está tratando con la clase de búsqueda. Además, el método shouuldfilter () tiene la misma firma en ambos, que me gusta. Debido a que las interfaces pueden heredar otras interfaces, podríamos mover ese método a su propia interfaz de que ambas interfaces sean heredadas. Esto significaría que cada interfaz ha creado un solo requisito, lo que nos dice el principio de segregación de la interfaz. En cambio, le diré que está mal para que pueda repararlo e ingresar una solicitud de extracción. Escriba una publicación de blog al respecto y @me en Twitter. El uso de la API de los complementos para capturar adicciones Esta fábrica puede configurar el filtrado de cómo las entradas, pero de hecho, el filtro que usamos para cambiar los resultados de la consulta. Anteriormente discutimos cómo Tonya y decidimos que las clases son responsables de crear resultados, deberían conocer al menos WP_Query y posiblemente wp_rest_request. Para hacer esto, necesitaba una referencia a wp_rest_request. Debido a que WordPress no tiene un contenedor de servicio para solicitarlo de mi solución, lo que puede ver en esta comisión es capturar la demanda actual, para que pueda inyectarse en los Contentiers utilizando el filtro REST_RE_SERVE_REQUEST. Hice esto en la clase FilterWpQuery. Necesito wp_rest_request dentro del método getPosts (). Agregué un nuevo método de captureRequest para hacerse cargo de la solicitud, lo puse en una variable estática que podría usar en getPosts ()
Puedo continuar probando esto con pruebas unitarias, reemplazando la API del complemento con mis simulaciones y las otras pruebas aún son válidas. Inicio de extensibilidad El próximo artículo será sobre hacer este sistema extensible. La clase FilterWpQuery actualmente tiene un init () que lo he reenfocado para que sea un método setter con un recibo apropiado. De esta manera, GetPosts () actúa como un despachador que el último contenido establece. Me gustaría que este enrutador sea más abstracto, por ejemplo, implementaciones de diferentes tipos. Así es como se ve la clase en este momento: ahora, todo en nuestro complemento que deberíamos cambiar con otra implementación de búsqueda se puede cambiar y tenemos una fábrica para administrarla. Construiré sobre esto en el próximo artículo. Todo el código en este artículo y el artículo anterior se han agregado al ejemplo del complemento mediante esta solicitud de extracción. Hay más pruebas de las que discutimos en este artículo. Nuevamente, este complemento no tiene cubierta de prueba del 100% y aún no hace lo que debe hacer. Tonya y yo lo mejoraremos mientras escribimos, estás invitado a unirte. Creo que la contribución a este complemento será una buena manera de aplicar lo que aprende.

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 *