{"id":229160,"date":"2022-10-25T10:13:00","date_gmt":"2022-10-25T07:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229160"},"modified":"2022-11-09T05:53:58","modified_gmt":"2022-11-09T02:53:58","slug":"varios-objetos-gravando-dados-como-evitar-isso","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/varios-objetos-gravando-dados-como-evitar-isso\/","title":{"rendered":"V\u00e1rios objetos gravando dados: como evitar isso"},"content":{"rendered":"\n<p>Voc\u00ea conhece aqueles momentos em que est\u00e1 trabalhando em um programa, e existem alguns lugares no seu c\u00f3digo que, dependendo dos requisitos ou de um bug que se manifesta de alguma forma, est\u00e1 diretamente relacionado ao fato de voc\u00ea ter v\u00e1rios objetos gravando dados para o mesmo armazenamento de dados? Isso n\u00e3o \u00e9 uma coisa boa.<\/p>\n<p>Essa \u00e9 uma maneira terr\u00edvel de come\u00e7ar um post. Deixe-me tentar novamente.<\/p>\n<h2>V\u00e1rios objetos gravando dados<\/h2>\n<p>Digamos que voc\u00ea esteja trabalhando em um programa e uma das coisas que o c\u00f3digo faz \u00e9 atualizar um contador em algum lugar do banco de dados para rastrear quantas altera\u00e7\u00f5es ocorreram em um pequeno per\u00edodo de tempo.<\/p>\n<p>O problema: voc\u00ea tem v\u00e1rios lugares no c\u00f3digo que est\u00e3o atualizando esse contador.<\/p>\n<p>Dados de Escrita de M\u00faltiplos Objetos (Caso minha caligrafia seja t\u00e3o ileg\u00edvel quanto parece).<\/p>\n<p>Eu n\u00e3o acho que muitos de n\u00f3s come\u00e7aram a escrever c\u00f3digo assim, mas acontece, e quando isso acontece, acaba tendo todos esses efeitos colaterais que apenas geram todos os tipos de comportamento estranho. (Eu n\u00e3o conhe\u00e7o o termo acad\u00eamico oficial para isso \u2013 e n\u00e3o me refiro a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">DRY<\/a> \u2013 mas estou bem com &#8220;comportamento estranho&quot; para este post.)<\/p>\n<p>Sabemos intuitivamente que dever\u00edamos ter um \u00fanico lugar em que tudo isso est\u00e1 acontecendo, fatores externos \u2013 seja flu\u00eancia de escopo, um mal-entendido de nossa parte para entender os requisitos, ou qualquer outra coisa \u2013 gera uma codifica\u00e7\u00e3o ruim.<\/p>\n<p>Ent\u00e3o, temos todas essas <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/tipos-de-postagem-do-wordpress-uma-abstracao-para-entidades\/\" title=\"entidades\">entidades<\/a> em todo o nosso sistema, cada uma delas falando com um \u00fanico ponto em nosso banco de dados (ou qualquer armazenamento de dados que voc\u00ea quiser), mas nenhuma delas est\u00e1 ciente de que outras est\u00e3o falando com elas.<\/p>\n<h2>Configurar limites<\/h2>\n<p>Podemos tentar combater isso com condicionais e outras coisas, mas s\u00f3 estamos piorando. ent\u00e3o o que devemos fazer?<\/p>\n<p>Eu sei que, como acontece com muitas coisas na programa\u00e7\u00e3o, existem v\u00e1rias maneiras de resolver isso, mas talvez um dos primeiros passos da refatora\u00e7\u00e3o seja ter uma classe respons\u00e1vel por emitir atualiza\u00e7\u00f5es para o armazenamento de dados.<\/p>\n<p>Dessa forma, podemos ir da ilustra\u00e7\u00e3o acima para algo assim:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167733-61e7a7cc3a1aa.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-167733-61e7a7cc3a1aa.png\" alt=\"V\u00e1rios objetos gravando dados: como evitar isso\" ><\/a><\/p>\n<p>V\u00e1rios objetos escrevendo dados: envie-os para um mediador.<\/p>\n<p>Ou seja, todas as entidades da comunidade com este objeto e este objeto \u2013 e somente este objeto pode ler e gravar dados no banco de dados.<\/p>\n<p>Existem alguns <a href=\"https:\/\/sourcemaking.com\/design_patterns\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">padr\u00f5es de design<\/a> que se encaixam nesse problema espec\u00edfico, mas isso est\u00e1 fora do escopo deste post. Em vez disso, o ponto que estou tentando mostrar \u00e9 que, se voc\u00ea se deparar com um problema de:<\/p>\n<ul>\n<li>As entidades est\u00e3o gravando dados no armazenamento de dados,<\/li>\n<li>V\u00e1rias entidades est\u00e3o fazendo isso,<\/li>\n<li>E est\u00e1 gerando consequ\u00eancias n\u00e3o intencionais,<\/li>\n<\/ul>\n<p>Em seguida, tente criar uma classe ou conjunto de classes estritamente respons\u00e1vel pela leitura e escrita de dados. Permita apenas que as informa\u00e7\u00f5es passem por essas classes, em vez de v\u00e1rias classes fazerem a manipula\u00e7\u00e3o de dados.<\/p>\n<p>Isso facilita o teste, facilita a depura\u00e7\u00e3o e, em \u00faltima an\u00e1lise, facilita a leitura.<\/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>Ter v\u00e1rios objetos gravando dados em um \u00fanico armazenamento de dados em v\u00e1rios locais tem efeitos colaterais negativos. Aqui est\u00e1 uma maneira de corrigir isso.<\/p>\n","protected":false},"author":1,"featured_media":221243,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722],"tags":[1170],"class_list":["post-229160","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229160","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=229160"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229160\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/221243"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}