{"id":231445,"date":"2022-12-21T10:46:00","date_gmt":"2022-12-21T07:46:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231445"},"modified":"2022-12-21T10:46:17","modified_gmt":"2022-12-21T07:46:17","slug":"sugestoes-para-organizar-o-codigo-de-procedimento","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/sugestoes-para-organizar-o-codigo-de-procedimento\/","title":{"rendered":"Sugest\u00f5es para organizar o c\u00f3digo de procedimento"},"content":{"rendered":"\n<p>Por mais que eu escreva \u2013 e seja f\u00e3 de \u2013 programa\u00e7\u00e3o orientada a objetos, n\u00e3o escrevo muito sobre os tempos em que estou trabalhando com uma <a href=\"https:\/\/en.wikipedia.org\/wiki\/Procedural_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">base de c\u00f3digo procedural<\/a>.<\/p>\n<blockquote>\n<p>A programa\u00e7\u00e3o procedural \u00e9 um paradigma de programa\u00e7\u00e3o, derivado da programa\u00e7\u00e3o estruturada, baseado no conceito de chamada de procedimento. Os procedimentos, tamb\u00e9m conhecidos como rotinas, sub-rotinas ou fun\u00e7\u00f5es, cont\u00eam simplesmente uma s\u00e9rie de etapas computacionais a serem executadas.<\/p>\n<\/blockquote>\n<p>\u00c0s vezes, eu recebo isso dos requisitos de um projeto, \u00e0s vezes \u00e9 de um projeto que herdei, ou \u00e0s vezes por causa de outra coisa.<\/p>\n<p>Acho importante que, como programadores, n\u00e3o tenhamos um paradigma t\u00e3o alto que evitemos trabalhar com outras formas de escrever c\u00f3digo. Afinal, o ato de escrever c\u00f3digo \u00e9, em sua ess\u00eancia, resolver um problema.<\/p>\n<p>Como o problema \u00e9 resolvido pode ser considerado secund\u00e1rio.<\/p>\n<p>Independentemente disso, sempre que estou trabalhando com uma base de c\u00f3digo; no entanto, est\u00e1 escrito, ainda tento garantir que seja organizado de maneira coesa, o mais f\u00e1cil de seguir poss\u00edvel e capaz de ser mantido ao longo do tempo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160742-61e711c032aea.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160742-61e711c032aea.png\" alt=\"Sugest\u00f5es para organizar o c\u00f3digo de procedimento\"><\/a><\/p>\n<p>Eu pensei em compartilhar como eu abordo a escrita de plugins WordPress usando programa\u00e7\u00e3o procedural versus programa\u00e7\u00e3o orientada a objetos e como eu organizo o c\u00f3digo procedural.<\/p>\n<p>Se nada mais, talvez isso lhe d\u00ea algumas id\u00e9ias para um projeto atual ou futuro.<\/p>\n<h2>Organizando o C\u00f3digo de Procedimento<\/h2>\n<p>Quando se trata de trabalhar com c\u00f3digo procedural, h\u00e1 muito potencial para incluir quase tudo em um \u00fanico arquivo monol\u00edtico.<\/p>\n<p>Eu n\u00e3o sou dessa abordagem porque torna mais dif\u00edcil encontrar onde algo reside no arquivo (pelo menos se voc\u00ea for algu\u00e9m que est\u00e1 entrando em um projeto).<\/p>\n<p>Para esse fim, estas s\u00e3o as coisas que eu costumo fazer.<\/p>\n<ol>\n<li><strong>A\u00e7\u00f5es e Filtros Separados<\/strong>. Normalmente, eu pego todas as a\u00e7\u00f5es e as coloco em um arquivo e eu pego todos os filtros e os coloco em outro arquivo. Tamb\u00e9m \u00e9 poss\u00edvel separar ainda mais esses arquivos em subdiret\u00f3rios (se n\u00e3o em namespaces tamb\u00e9m) com base em suas \u00e1reas de foco. Por exemplo, qualquer a\u00e7\u00e3o relacionada \u00e0 \u00e1rea de administra\u00e7\u00e3o pode ir para um subdiret\u00f3rio <strong>admin .<\/strong><\/li>\n<li><strong>Escreva um arquivo de depura\u00e7\u00e3o<\/strong>. Eu normalmente incluo um script de depura\u00e7\u00e3o simples em um plug-in para que eu possa facilmente renderizar informa\u00e7\u00f5es de depura\u00e7\u00e3o na tela, gravar no arquivo de log de depura\u00e7\u00e3o ou gravar em ambos. Isso pode ser uma conveni\u00eancia, se nada mais, mas ajuda a fornecer uma maneira de ver facilmente o que est\u00e1 acontecendo sem a necessidade de <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-xdebug-com-valet-e-wordpress\/\" title=\"iniciar o Xdebug\">iniciar o Xdebug<\/a> e percorrer o c\u00f3digo (a menos que seja um problema mais complicado).<\/li>\n<li><strong>Carregador autom\u00e1tico<\/strong>. Se voc\u00ea estiver usando c\u00f3digo procedural, talvez n\u00e3o esteja usando <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/namespaces-e-carregamento-automatico-no-wordpress\/\" title=\"namespaces\">namespaces<\/a>, mas, se estiver, tamb\u00e9m incluo um carregador autom\u00e1tico que escrevi para facilitar a inclus\u00e3o de arquivos automaticamente. Isso \u00e9 diferente do autoloader <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/compositor-para-wordpress-parte-1\/\" title=\"que o Composer gera\">que o Composer gera<\/a>, mas ainda faz a mesma coisa.<\/li>\n<\/ol>\n<p>Obviamente, n\u00e3o h\u00e1 nada inerentemente complicado nas recomenda\u00e7\u00f5es acima. Na verdade, eu diria que qualquer uma das op\u00e7\u00f5es acima, especialmente a primeira etapa, pode ajudar bastante a melhorar a capacidade de gerenciamento do c\u00f3digo procedural.<\/p>\n<h2>O arquivo de plug-in principal<\/h2>\n<p>Se voc\u00ea optar por fazer todas as op\u00e7\u00f5es acima, a vers\u00e3o final do arquivo bootstrap do plug-in deve ser muito simples. Na verdade, pode parecer algo t\u00e3o simples <a href=\"https:\/\/gist.github.com\/tommcfarlin\/777bb0180968134a3c40ebecb241d2ad\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como isto<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Plugin Name: Acme Plugin\n * Plugin URI:  https:\/\/acmeplugins.com\/acme\n * Description: This is the plugin description.\n * Version:     1.0.0\n * Author:      Acme Plugins Co.\n * Author URI:  https:\/\/acmeplugins.com\/acme\n * License:     GPL-3.0+\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\n * @since   1.0.0\n * @package Acme\n *\/\n\nnamespace Acme;\n\ndefined( 'WPINC') || die;\n\n\/\/ Include the custom autoloader.\nrequire_once __DIR__. '\/inc\/autoload.php';\n\n\/\/ Include action and filters.\nrequire_once __DIR__. '\/inc\/actions.php';\nrequire_once __DIR__. '\/inc\/filters.php';\n<\/code><\/pre>\n<p>Novamente, isso pressup\u00f5e que voc\u00ea esteja aplicando todas as tr\u00eas recomenda\u00e7\u00f5es. Caso contr\u00e1rio, sua implementa\u00e7\u00e3o pode variar.<\/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>Como escrevo plugins do WordPress usando programa\u00e7\u00e3o procedural versus programa\u00e7\u00e3o orientada a objetos e como organizo o c\u00f3digo procedural.<\/p>\n","protected":false},"author":1,"featured_media":235594,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,920,846,867],"tags":[1170],"class_list":["post-231445","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-outro","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231445","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=231445"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231445\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235594"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}