{"id":230951,"date":"2022-12-09T17:43:00","date_gmt":"2022-12-09T14:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230951"},"modified":"2022-12-09T18:41:17","modified_gmt":"2022-12-09T15:41:17","slug":"nao-exagere-na-engenharia-da-solucao","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/nao-exagere-na-engenharia-da-solucao\/","title":{"rendered":"N\u00e3o exagere na engenharia da solu\u00e7\u00e3o"},"content":{"rendered":"\n<p>Se voc\u00ea vem de um background orientado a objetos ou tenta construir todas as suas solu\u00e7\u00f5es para WordPress usando t\u00e9cnicas orientadas a objetos, haver\u00e1 momentos em que pode parecer que voc\u00ea est\u00e1 acertando um prego com uma marreta.<\/p>\n<p>Por exemplo, digamos que algu\u00e9m venha at\u00e9 voc\u00ea e precise de um plugin personalizado desenvolvido que funcione com um plugin de terceiros, mas ele s\u00f3 precisa fazer uma coisa.<\/p>\n<p>Vale a pena dedicar um tempo para criar uma <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/classes-abstratas-parte-2-classes-abstratas-e-interfaces\/\" title=\"interface\">interface<\/a><\/strong>, implementar a referida interface em uma classe concreta, configurar <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/organizando-tipos-visualizacoes-e-assinantes-do-wordpress\/\" title=\"assinantes\">assinantes<\/a><\/strong>, <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/uma-nota-rapida-sobre-o-codigo-de-teste-de-unidade-em-projetos-do-wordpress\/\" title=\"escrever testes\">escrever testes<\/a><\/strong> de unidade e assim por diante?<\/p>\n<p>Eu posso ver o apelo, mas geralmente digo n\u00e3o. Se a ess\u00eancia do que voc\u00ea precisa fazer deve incluir estilos ou arquivos JavaScript ou ambos, por que n\u00e3o confiar nas APIs nativas do WordPress e na programa\u00e7\u00e3o processual?<\/p>\n<h2>N\u00e3o exagere na engenharia<\/h2>\n<p>Digamos que um cliente em potencial venha at\u00e9 voc\u00ea que:<\/p>\n<ul>\n<li>est\u00e1 trabalhando com um or\u00e7amento muito apertado,<\/li>\n<li>tem um plugin de terceiros que n\u00e3o se encaixa bem com o tema,<\/li>\n<li>precisa apenas de um estilo leve,<\/li>\n<li>e tem os fundos para contrat\u00e1-lo para o trabalho.<\/li>\n<\/ul>\n<p>Supondo que todos os itens acima sejam verdadeiros, ent\u00e3o eu diria que trabalhar com a solu\u00e7\u00e3o parece bastante simples, certo? Precisamos auditar o site para que possamos:<\/p>\n<ul>\n<li>determinar o esquema de cores,<\/li>\n<li>encontre os seletores necess\u00e1rios para o CSS,<\/li>\n<li>ent\u00e3o comece a construir o plugin.<\/li>\n<\/ul>\n<p>Agora, quando se trata de fazer isso, ainda tento empregar um punhado de pr\u00e1ticas recomendadas. Mesmo tendo tend\u00eancia para a programa\u00e7\u00e3o orientada a objetos, nem sempre a uso nem sempre a recomendo.<\/p>\n<p>Em vez disso, acho que usar uma fun\u00e7\u00e3o simples ou um conjunto de fun\u00e7\u00f5es conectadas \u00e0 API do WordPress de maneira processual funciona bem. No entanto, isso n\u00e3o significa que n\u00e3o devemos ter como objetivo criar uma estrutura s\u00f3lida de organiza\u00e7\u00e3o de arquivos porque voc\u00ea nunca sabe quando pode ter que voltar para manter o projeto.<\/p>\n<p>Para esse fim, aqui est\u00e1 o que eu normalmente fa\u00e7o:<\/p>\n<ul>\n<li>crie um diret\u00f3rio de ativos para folhas de estilo e JavaScript (para ambos ou um dos outros &#8211; o que for necess\u00e1rio),<\/li>\n<li>crie um diret\u00f3rio <strong>src<\/strong> para o c\u00f3digo que ser\u00e1 respons\u00e1vel por se conectar ao WordPress,<\/li>\n<li>adicione o arquivo de bootstrap de <strong>LICENSE, README<\/strong> e plugin usual.<\/li>\n<\/ul>\n<p>O diret\u00f3rio resultante pode ser algo assim:<\/p>\n<p>A partir da\u00ed, nem me incomodo com um carregador autom\u00e1tico. Em vez disso, incluo os arquivos no diret\u00f3rio de origem. Voc\u00ea pode percorrer esses arquivos versus fazer algo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8d4e8a93a673d86f44d39c6e2893530e#file-00-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Acme Plugin Example\n *\n * @author    Tom McFarlin &lt;tom@pressware.co&gt;\n * @license   GPL-3.0+\n * @link      https:\/\/pressware.co\n * @since     1.0.0\n * @copyright 2018 Tom McFarlin\n *\n * @wordpress-plugin\n * Plugin Name: Acme Plugin Example\n * Description: Provides consistent styling across the site for certain elements.\n * Version:     1.0.0\n * Author:      Tom McFarlin\n * Author URI:  https:\/\/tommcfarlin.com\n * License:     GPL-3.0+\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\ninclude_once plugin_dir_path(__FILE__).'src\/AddStyles.php';\ninclude_once plugin_dir_path(__FILE__).'src\/AddScripts.php';\n<\/code><\/pre>\n<p>Mas isso pode depender de quando e o que voc\u00ea est\u00e1 fazendo.<\/p>\n<h2>Isso \u00e9 muito simples<\/h2>\n<p>Pode ser. Aqui est\u00e1 a coisa: sempre que uma pessoa se enra\u00edza no uso de um determinado paradigma de programa\u00e7\u00e3o, essa pessoa tenta aplic\u00e1-lo em todos os lugares e tenta faz\u00ea-lo o tempo todo.<\/p>\n<p>Nem todos, mas muitos. Eu mesmo inclu\u00eddo.<\/p>\n<p>E quando voc\u00ea se encontra arquitetando algo em excesso, por que n\u00e3o dar um passo para tr\u00e1s e tentar tornar sua carga de trabalho um pouco mais simples?<\/p>\n<p>O problema ainda est\u00e1 resolvido, e \u00e9 feito de uma maneira que tem uma sobrecarga significativamente menor.<\/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>Se a ess\u00eancia do que voc\u00ea precisa fazer tem que incluir estilos ou arquivos JavaScript ou ambos, ent\u00e3o n\u00e3o exagere na engenharia de uma solu\u00e7\u00e3o al\u00e9m do necess\u00e1rio.<\/p>\n","protected":false},"author":1,"featured_media":236233,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,806,867],"tags":[1170],"class_list":["post-230951","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230951","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=230951"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230951\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236233"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}