{"id":231373,"date":"2022-12-19T15:24:00","date_gmt":"2022-12-19T12:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231373"},"modified":"2022-12-07T10:05:12","modified_gmt":"2022-12-07T07:05:12","slug":"programacao-wordpress-separando-preocupacoes","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/programacao-wordpress-separando-preocupacoes\/","title":{"rendered":"Programa\u00e7\u00e3o WordPress: Separando Preocupa\u00e7\u00f5es"},"content":{"rendered":"\n<p>Quando se trata de criar classes para plugins do WordPress, me perguntaram por que me incomodo em separar a funcionalidade em assinantes e em outras classes.<\/p>\n<p>Acho que essa \u00e9 uma boa pergunta porque ajuda a entender duas coisas:<\/p>\n<ol>\n<li>o papel de um assinante no que se refere \u00e0 arquitetura do WordPress,<\/li>\n<li>o papel das outras classes no que se refere ao que voc\u00ea est\u00e1 construindo (e como isso pode ajudar com outras coisas, como testes de unidade e assim por diante).<\/li>\n<\/ol>\n<p>Ent\u00e3o pensei por que n\u00e3o responder na forma de um post curto? Ele documentar\u00e1 o porqu\u00ea por tr\u00e1s do qu\u00ea [e me dar\u00e1 um lugar para atualizar se as coisas mudarem no futuro].<\/p>\n<h2>Programa\u00e7\u00e3o WordPress: Assinantes e Objetos de Dom\u00ednio<\/h2>\n<p>Considero as classes que n\u00e3o s\u00e3o objetos de dom\u00ednio de assinantes que v\u00eam da abordagem de desenvolvimento de software de design orientado a dom\u00ednio.<\/p>\n<p>Isso est\u00e1 fora do escopo deste post, mas vale a pena mencionar se, por nenhuma outra raz\u00e3o, fornecer algum contexto ao que de outra forma seria considerado jarg\u00e3o.<\/p>\n<h3>1 assinantes<\/h3>\n<p>Mas primeiro, assinantes.<\/p>\n<p>Como o WordPress \u00e9 baseado em um sistema de gancho \u2013 um sistema baseado no padr\u00e3o de design orientado a eventos \u2013 \u00e9 \u00fatil ter uma classe que responda sempre que um evento \u00e9 gerado.<\/p>\n<p>Isso pode ser para qualquer gancho predefinido do WordPress ou qualquer gancho personalizado. Isso n\u00e3o importa.<\/p>\n<p>E eu n\u00e3o quero tornar a aula mais complicada do que o necess\u00e1rio, ent\u00e3o eu costumo pensar assim:<\/p>\n<p>Um assinante responde sempre que um evento espec\u00edfico acontece.<\/p>\n<p>E \u00e9 isso. Este evento pode 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> ou <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> ou at\u00e9 mesmo <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. N\u00e3o importa.<\/p>\n<p>Ele espera que um evento aconte\u00e7a e ent\u00e3o responde o que decidirmos atrav\u00e9s do uso de outro c\u00f3digo (que \u00e9 onde os objetos de dom\u00ednio entram em jogo).<\/p>\n<h3>2 Objetos de Dom\u00ednio<\/h3>\n<p>Eles tamb\u00e9m podem ser chamados de objetos de neg\u00f3cios ou algo semelhante. A ideia por tr\u00e1s deles \u00e9 a seguinte:<\/p>\n<p>Tudo o que fazemos na programa\u00e7\u00e3o orientada a objetos tem como objetivo resolver um problema espec\u00edfico e \u00e9 feito atrav\u00e9s de algum tipo de objeto que representa um objeto do mundo real ou pelo menos uma ideia concreta.<\/p>\n<p>Ent\u00e3o, sempre que voc\u00ea est\u00e1 trabalhando para fornecer uma solu\u00e7\u00e3o para algu\u00e9m, as classes que voc\u00ea est\u00e1 escrevendo \u2013 os objetos que eles se tornar\u00e3o quando instanciados \u2013 s\u00e3o os objetos de dom\u00ednio.<\/p>\n<p>Essas tamb\u00e9m s\u00e3o as classes que fazem o trabalho real. Ent\u00e3o voc\u00ea pode pensar nisso em tr\u00eas componentes:<\/p>\n<ol>\n<li><strong>WordPress<\/strong>. O aplicativo principal, \u00e9 claro, que gera o evento ao qual os assinantes respondem.<\/li>\n<li><strong>Assinantes<\/strong>. O conjunto de classes respons\u00e1vel por escutar um evento espec\u00edfico e ent\u00e3o instanciar o objeto apropriado para manipular o c\u00f3digo.<\/li>\n<li><strong>Objetos de Dom\u00ednio<\/strong>. O c\u00f3digo que realmente faz o trabalho de pegar um conjunto de dados, operar nele e potencialmente retornar um valor.<\/li>\n<\/ol>\n<p>Os objetos de dom\u00ednio s\u00e3o onde reside o c\u00f3digo para realmente fazer algo. Os assinantes s\u00e3o como a conex\u00e3o entre o WordPress e a referida funcionalidade.<\/p>\n<p>Os assinantes dizem &#8220;Este evento aconteceu e esta classe \u00e9 capaz e respons\u00e1vel por lidar com os resultados dele&quot;.<\/p>\n<h2>E quanto ao teste e assim por diante?<\/h2>\n<p>Anteriormente no post, falei sobre como os objetos de dom\u00ednio est\u00e3o relacionados ao teste de unidade e outras t\u00e9cnicas de programa\u00e7\u00e3o relacionadas ao controle de qualidade.<\/p>\n<p>Embora este n\u00e3o seja o post para os detalhes, vale a pena mencionar que manter objetos de dom\u00ednio e assinantes desacoplados um do outro (e, por sua vez, do WordPress) nos permite instanciar, testar e trabalhar com objetos que s\u00e3o invocados por assinantes sem precisar trazer o WordPress para o nosso trabalho.<\/p>\n<p>E isso \u00e9 algo que pode ser imensamente \u00fatil ao construir solu\u00e7\u00f5es maiores. Mas a ess\u00eancia de como fazer isso \u00e9 conte\u00fado para outro post.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando se trata de programa\u00e7\u00e3o WordPress, especialmente com plugins, por que se preocupar em separar a funcionalidade em assinantes e em outras classes?<\/p>\n","protected":false},"author":1,"featured_media":234941,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,837,867],"tags":[1170],"class_list":["post-231373","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-guia-para-iniciantes","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231373"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/234941"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}