{"id":230994,"date":"2022-12-19T15:00:00","date_gmt":"2022-12-19T12:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230994"},"modified":"2022-12-07T10:05:03","modified_gmt":"2022-12-07T07:05:03","slug":"programacion-de-wordpress-preocupaciones-separadas","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/programacion-de-wordpress-preocupaciones-separadas\/","title":{"rendered":"Programaci\u00f3n de WordPress: preocupaciones separadas"},"content":{"rendered":"\n<p>Cuando se trata de crear clases para complementos de WordPress, me han preguntado por qu\u00e9 me molesto en separar la funcionalidad en suscriptores y en otras clases.<\/p>\n<p>Creo que esta es una buena pregunta porque ayuda a entender dos cosas:<\/p>\n<ol>\n<li>el papel de un suscriptor en relaci\u00f3n con la arquitectura de WordPress,<\/li>\n<li>el papel de las otras clases en lo que se refiere a lo que est\u00e1 construyendo (y c\u00f3mo esto puede ayudar con otras cosas como pruebas unitarias, etc.).<\/li>\n<\/ol>\n<p>Entonces pens\u00e9, \u00bfpor qu\u00e9 no responder en forma de una publicaci\u00f3n breve? Documentar\u00e1 el por qu\u00e9 detr\u00e1s del qu\u00e9 [y me dar\u00e1 un lugar para actualizar si las cosas cambian en el futuro].<\/p>\n<h2>Programaci\u00f3n WordPress: Suscriptores y Objetos de Dominio<\/h2>\n<p>Considero las clases que no son objetos de dominio de suscriptores que provienen del enfoque de desarrollo de software del dise\u00f1o dirigido por dominio.<\/p>\n<p>Eso est\u00e1 fuera del alcance de esta publicaci\u00f3n, pero vale la pena mencionarlo, aunque solo sea por la raz\u00f3n de que brinda algo de contexto a lo que de otro modo se considerar\u00eda una jerga.<\/p>\n<h3>1 Suscriptores<\/h3>\n<p>Pero primero, suscriptores.<\/p>\n<p>Dado que WordPress se basa en un sistema de enlace, un sistema que se basa en el patr\u00f3n de dise\u00f1o basado en eventos, es \u00fatil tener una clase que responda cada vez que se genera un evento.<\/p>\n<p>Esto puede ser para cualquier enlace de WordPress predefinido o cualquier enlace personalizado. No importa.<\/p>\n<p>Y no quiero que la clase sea m\u00e1s complicada de lo necesario, as\u00ed que tiendo a pensar en ellos as\u00ed:<\/p>\n<p>Un suscriptor responde cada vez que ocurre un evento espec\u00edfico.<\/p>\n<p>Y eso es. Este evento puede ser algo como <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/after_setup_theme\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">after_theme_setup<\/a> o <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> o incluso <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. No importa.<\/p>\n<p>Espera a que suceda un evento y luego responde en lo que decidamos mediante el uso de otro c\u00f3digo (que es donde entran en juego los objetos de dominio).<\/p>\n<h3>2 objetos de dominio<\/h3>\n<p>Estos tambi\u00e9n pueden llamarse objetos comerciales o algo similar. La idea detr\u00e1s de ellos es esta:<\/p>\n<p>Todo lo que hacemos en la programaci\u00f3n orientada a objetos est\u00e1 destinado a resolver un problema particular y debe hacerlo a trav\u00e9s de alg\u00fan tipo de objeto que represente un objeto del mundo real o al menos una idea concreta.<\/p>\n<p>Por lo tanto, siempre que est\u00e9 trabajando para proporcionar una soluci\u00f3n a alguien, las clases que est\u00e1 escribiendo, los objetos en los que se convertir\u00e1n cuando se instancian, son los objetos de dominio.<\/p>\n<p>Estas son tambi\u00e9n las clases que hacen el trabajo real. As\u00ed que puedes pensarlo en tres componentes:<\/p>\n<ol>\n<li><strong>WordPress<\/strong> _ La aplicaci\u00f3n principal, por supuesto, que plantea el evento al que responden los suscriptores.<\/li>\n<li><strong>Suscriptores<\/strong> _ El conjunto de clases responsables de escuchar un evento espec\u00edfico y luego instanciar el objeto adecuado para manejar el c\u00f3digo.<\/li>\n<li><strong>Objetos de dominio<\/strong>. El c\u00f3digo que realmente hace el trabajo de tomar un conjunto de datos, operar con ellos y luego potencialmente devolver un valor.<\/li>\n<\/ol>\n<p>Los objetos de dominio son donde vive el c\u00f3digo para hacer algo. Los suscriptores son como la conexi\u00f3n entre WordPress y dicha funcionalidad.<\/p>\n<p>Los suscriptores dicen &quot;Este evento ha sucedido y esta clase es capaz y responsable de manejar los resultados&quot;.<\/p>\n<h2>\u00bfQu\u00e9 pasa con las pruebas y dem\u00e1s?<\/h2>\n<p>Anteriormente en la publicaci\u00f3n, habl\u00e9 sobre c\u00f3mo los objetos de dominio se relacionan con las pruebas unitarias y otras t\u00e9cnicas de programaci\u00f3n relacionadas con el control de calidad.<\/p>\n<p>Aunque esta no es la publicaci\u00f3n para los detalles, vale la pena mencionar que mantener los objetos de dominio y los suscriptores separados entre s\u00ed (y, a su vez, de WordPress) nos permite instanciar, probar y trabajar con objetos que son invocados por suscriptores sin necesidad de traer WordPress a nuestro trabajo.<\/p>\n<p>Y esto es algo que puede ser inmensamente \u00fatil al construir soluciones m\u00e1s grandes. Pero la esencia de c\u00f3mo hacerlo es contenido para otra publicaci\u00f3n.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando se trata de la programaci\u00f3n de WordPress, especialmente con complementos, \u00bfpor qu\u00e9 molestarse en separar la funcionalidad en suscriptores y en otras clases?<\/p>\n","protected":false},"author":1,"featured_media":234942,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,831,861],"tags":[1172],"class_list":["post-230994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-guia-para-principiantes","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230994"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230994\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/234942"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}