{"id":229503,"date":"2022-11-03T09:39:00","date_gmt":"2022-11-03T06:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229503"},"modified":"2022-11-09T08:21:38","modified_gmt":"2022-11-09T05:21:38","slug":"prototipagem-rapida-com-wordpress-analise-de-conceito","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-com-wordpress-analise-de-conceito\/","title":{"rendered":"Prototipagem R\u00e1pida com WordPress: An\u00e1lise de Conceito"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-com-wordpress-do-conceito-ao-plugin\/\" title=\"No post anterior\" >No post anterior<\/a>, comecei a percorrer o processo de levar a ideia de um plugin que o prototipa rapidamente em algo que funcione dentro do WordPress. E, embora funcione, n\u00e3o segue necessariamente nenhum princ\u00edpio orientado a objetos, nem est\u00e1 em um lugar em que podemos continuar adicionando recursos facilmente.<\/p>\n<p>N\u00e3o, isso n\u00e3o \u00e9 um argumento para explicar por que a orienta\u00e7\u00e3o a objetos \u00e9 melhor. Acontece que \u00e9 minha maneira preferida de escrever c\u00f3digo, ent\u00e3o estou abordando dessa maneira.<\/p>\n<p>Eu sei que o c\u00f3digo de exemplo que estou dando \u00e9 simples e sei que pode ser feito um caso de que algo assim pode ser deixado como est\u00e1. Mas o objetivo disso \u00e9 mostrar como pegar um conceito, prototip\u00e1-lo e depois mov\u00ea-lo para algo que siga os princ\u00edpios orientados a objetos.<\/p>\n<p>E, na minha experi\u00eancia, \u00e9 muito mais dif\u00edcil fazer isso com um exemplo complexo desde o in\u00edcio. se voc\u00ea perde leitores desde o in\u00edcio, ent\u00e3o que esperan\u00e7a h\u00e1 para eles entenderem o que est\u00e1 por vir?<\/p>\n<p>Dito isso, vamos dar uma olhada no c\u00f3digo do post anterior e fazer uma an\u00e1lise de conceito para ver o que pode funcionar bem dentro de uma classe e como podemos come\u00e7ar a organiz\u00e1-lo usando classes, <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/namespaces-e-carregamento-automatico-no-wordpress\/\" title=\"namespaces\" >namespaces<\/a> e assim por diante.<\/p>\n<h2>An\u00e1lise de conceito<\/h2>\n<p>Sempre que se trata de programa\u00e7\u00e3o, \u00e9 t\u00e3o f\u00e1cil querer pular imediatamente para escrever c\u00f3digo e, em seguida, envi\u00e1-lo at\u00e9 que ele fa\u00e7a algo que queremos.<\/p>\n<p>E uma vez que funciona, parece que terminamos e podemos passar para a pr\u00f3xima tarefa. Mas para projetos maiores, isso nem sempre \u00e9 o caso. Na verdade, muitas vezes \u00e9 melhor fazer um pouco de an\u00e1lise de conceito de an\u00e1lise orientada a objetos em seu projeto antes de avan\u00e7ar.<\/p>\n<p>Simplesmente pular para a codifica\u00e7\u00e3o nem sempre \u00e9 a melhor abordagem.<\/p>\n<h3>Um caso para an\u00e1lise<\/h3>\n<p>Caso em quest\u00e3o: no momento da reda\u00e7\u00e3o deste artigo, um dos meus colegas de equipe e eu estamos discutindo se devemos estender uma classe ou escrever uma nova classe para lidar com informa\u00e7\u00f5es de geolocaliza\u00e7\u00e3o para dados extra\u00eddos da API do Google Maps.<\/p>\n<p>Posso improvisar e escrever algo que funcione? Claro. Mas ser\u00e1 que se integrar\u00e1 bem com o aplicativo? N\u00e3o sem an\u00e1lise de conceito, planejamento e coordena\u00e7\u00e3o com o resto do sistema.<\/p>\n<p>E esse \u00e9 o prop\u00f3sito da an\u00e1lise.<\/p>\n<h3>Analisando nosso trabalho<\/h3>\n<p>Ent\u00e3o, o que isso significa para o plugin que vimos ontem? Neste momento, temos o seguinte:<\/p>\n<ul>\n<li>uma fun\u00e7\u00e3o respons\u00e1vel por criar uma meta box e exibir o conte\u00fado dentro dela,<\/li>\n<li>uma fun\u00e7\u00e3o para consultar o banco de dados e recuperar as \u00faltimas postagens mais recentes,<\/li>\n<li>uma fun\u00e7\u00e3o para exibir os resultados na caixa meta<\/li>\n<li>uma fun\u00e7\u00e3o para exibir uma mensagem quando n\u00e3o h\u00e1 resultados na meta box<\/li>\n<\/ul>\n<p>Al\u00e9m disso, v\u00e1rias dessas fun\u00e7\u00f5es est\u00e3o relacionadas a ganchos que fazem parte da API do WordPress. Ou seja, a fun\u00e7\u00e3o para criar a meta box est\u00e1 ligada ao WordPress e sua fun\u00e7\u00e3o complementar para renderizar a exibi\u00e7\u00e3o faz parte do mesmo componente.<\/p>\n<p>Ent\u00e3o temos a funcionalidade de consultar o banco de dados e temos fun\u00e7\u00f5es diretamente relacionadas \u00e0s visualiza\u00e7\u00f5es.<\/p>\n<p>Ent\u00e3o, como isso ficaria se f\u00f4ssemos diagramar isso em v\u00e1rias classes e arquivos que ajudariam a criar isso de uma maneira mais orientada a objetos?<\/p>\n<h3>Nenhuma solu\u00e7\u00e3o \u00fanica<\/h3>\n<p>N\u00e3o existe uma solu\u00e7\u00e3o \u00fanica e algumas solu\u00e7\u00f5es s\u00e3o muito mais avan\u00e7adas do que outras. Mas como estou tentando encontrar um equil\u00edbrio aqui, vou abordar isso de uma maneira mais simples do que trabalhar muito com abstra\u00e7\u00e3o, heran\u00e7a, interfaces e tudo mais.<\/p>\n<h3>Foco no que temos<\/h3>\n<p>Por enquanto, vamos nos concentrar nas classes individuais e nas responsabilidades que elas podem ter. Por exemplo:<\/p>\n<ul>\n<li>Acho que vamos precisar de uma classe que represente a caixa meta. Este deve ser respons\u00e1vel por criar a meta box.<\/li>\n<li>Tamb\u00e9m precisaremos de uma classe respons\u00e1vel por exibir o conte\u00fado da meta box. Voc\u00ea pode pensar que incluir uma fun\u00e7\u00e3o na classe para a meta box funciona bem. Ele faz; no entanto, se voc\u00ea quiser pensar em cada classe como tendo uma \u00fanica responsabilidade, podemos criar uma classe especificamente para a exibi\u00e7\u00e3o e especificamente para a caixa meta e injetar a exibi\u00e7\u00e3o na caixa meta durante a instancia\u00e7\u00e3o. Falaremos mais sobre isso mais tarde.<\/li>\n<\/ul>\n<p>Neste ponto, nosso diagrama pode ser algo assim:<\/p>\n<p>Quebrando a caixa meta.<\/p>\n<p>Em seguida, precisamos considerar a outra funcionalidade. Ou seja, a funcionalidade para exibir os resultados na caixa meta e a funcionalidade para exibir os resultados quando n\u00e3o houver nenhum.<\/p>\n<p>Para exibir qualquer coisa na caixa meta, precisamos ter uma maneira de consultar o banco de dados para recuperar os resultados. A partir da\u00ed, precisamos ser capazes de determinar se h\u00e1 resultados, se n\u00e3o houver, e ent\u00e3o injetar esses resultados na visualiza\u00e7\u00e3o.<\/p>\n<p>Dadas essas informa\u00e7\u00f5es, parece que precisamos de uma classe para consultar o banco de dados e, em seguida, precisamos de uma classe para ampliar uma mensagem na exibi\u00e7\u00e3o da caixa meta.<\/p>\n<p>Talvez uma maneira de organizar as aulas seria assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166719-61e79938d88c8.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-166719-61e79938d88c8.png\" alt=\"Prototipagem R\u00e1pida com WordPress: An\u00e1lise de Conceito\" ><\/a><\/p>\n<p>Consultando o banco de dados e preparando mensagens.<\/p>\n<p>A vers\u00e3o final do diagrama pode ser um pouco apertada, mas estamos vendo algo assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166719-61e7993eaf874.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-166719-61e7993eaf874.png\" alt=\"Prototipagem R\u00e1pida com WordPress: An\u00e1lise de Conceito\" ><\/a><\/p>\n<p>A organiza\u00e7\u00e3o final para nossas aulas.<\/p>\n<p>Para efeito de explica\u00e7\u00e3o:<\/p>\n<ul>\n<li>O post retriever pede ao banco de dados os \u00faltimos tr\u00eas posts mais recentes.<\/li>\n<li>O mensageiro posterior determinar\u00e1 qual mensagem injetar na tela.<\/li>\n<li>A tela renderizar\u00e1 a mensagem que foi definida.<\/li>\n<li>A meta box renderizar\u00e1 sua exibi\u00e7\u00e3o no navegador da web.<\/li>\n<\/ul>\n<p>Ent\u00e3o, basicamente pegamos algumas fun\u00e7\u00f5es que foram conectadas ao WordPress e as dividimos em componentes que podem se comunicar uns com os outros, cada um dos quais \u00e9 relativamente f\u00e1cil de trabalhar e n\u00e3o faz mais do que um \u00fanico trabalho.<\/p>\n<h2>Convertendo em c\u00f3digo<\/h2>\n<p>Agora que temos uma ideia de como podemos converter o conceito anterior em c\u00f3digo, veremos como fazer isso nos pr\u00f3ximos artigos.<\/p>\n<p>Observe que como voc\u00ea opta por implementar seu c\u00f3digo ou projetar suas classes pode ser um pouco diferente do que eu tenho acima e voc\u00ea pode ter sugest\u00f5es de como organizar melhor o que est\u00e1 acima. Se for o caso, deixe um coment\u00e1rio.<\/p>\n<p>Na pr\u00f3xima postagem, veremos como converter isso em c\u00f3digo funcional e, depois disso, veremos como organizar isso em namespaces e organiza\u00e7\u00e3o de arquivos adequados.<\/p>\n<h2>Postagens da s\u00e9rie<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-com-wordpress-do-conceito-ao-plugin\/\" title=\"Prototipagem R\u00e1pida com WordPress: Do Conceito ao Plugin\" >Prototipagem R\u00e1pida com WordPress: Do Conceito ao Plugin<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/concept-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Prototipagem R\u00e1pida com WordPress: An\u00e1lise de Conceito<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-prototipo-para-codigo-parte-1\/\" title=\"Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 1\">Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-prototipo-para-codigo-parte-2\/\" title=\"Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 2\">Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-apresentando-o-autoloading\/\" title=\"Prototipagem R\u00e1pida: Apresentando o Autoloading\">Prototipagem R\u00e1pida: Apresentando o Autoloading<\/a><\/li>\n<\/ol>\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>Muitas vezes, \u00e9 melhor fazer um pouco de an\u00e1lise de conceito de an\u00e1lise orientada a objetos em seu projeto antes de avan\u00e7ar.<\/p>\n","protected":false},"author":1,"featured_media":223990,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,920,846],"tags":[1170],"class_list":["post-229503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-outro","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229503","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=229503"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229503\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223990"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}