{"id":56,"date":"2021-02-28T23:22:45","date_gmt":"2021-02-28T23:22:45","guid":{"rendered":"https:\/\/gerlandiolucena.com.br\/site\/?p=56"},"modified":"2021-02-28T23:35:37","modified_gmt":"2021-02-28T23:35:37","slug":"refatorando-gildedrose","status":"publish","type":"post","link":"https:\/\/gerlandiolucena.com.br\/site\/2021\/02\/28\/refatorando-gildedrose\/","title":{"rendered":"Refatorando GildedRose"},"content":{"rendered":"\n<p>Recentemente tive a oportunidade de estudar um formato de refactoring bem interessante sugerido por <a href=\"http:\/\/iamnotmyself.com\/2011\/02\/14\/refactor-this-the-gilded-rose-kata\/\" data-type=\"URL\" data-id=\"http:\/\/iamnotmyself.com\/2011\/02\/14\/refactor-this-the-gilded-rose-kata\/\">Boddy Johson<\/a> e expandido para mais linguagens por <a href=\"https:\/\/github.com\/emilybache\">Emily Bache<\/a>. O objetivo desse refactoring \u00e9 ajustar um programa existente para que seja poss\u00edvel controlar a qualidade de alguns itens vendidos por um Goblin, ele determina algumas regras pra isso, o repositorio original \u00e9 <a href=\"https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata\">https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata<\/a>.<\/p>\n\n\n\n<p>A descri\u00e7\u00e3o b\u00e1sica do problema pode ser encontrada em diversos idiomas, vamos dar uma breve introdu\u00e7\u00e3o do nosso sistema:<\/p>\n\n\n\n<ul><li><em>Todos os itens (classe&nbsp;<code>Item<\/code>) possuem uma propriedade chamada&nbsp;<code>SellIn<\/code>&nbsp;que informa o n\u00famero de dias que temos para vende-lo<\/em><\/li><li><em>Todos os itens possuem uma propriedade chamada&nbsp;<code>quality<\/code>&nbsp;que informa o qu\u00e3o valioso \u00e9 o item.<\/em><\/li><li><em>No final do dia, nosso sistema decrementa os valores das propriedades&nbsp;<code>SellIn<\/code>&nbsp;e&nbsp;<code>quality<\/code>&nbsp;de cada um dos itens do estoque atrav\u00e9s do m\u00e9todo&nbsp;<code>updateQuality<\/code>.<\/em><\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"598\" height=\"343\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-22.png\" alt=\"\" class=\"wp-image-57\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-22.png 598w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-22-300x172.png 300w\" sizes=\"(max-width: 598px) 100vw, 598px\" \/><\/figure><\/div>\n\n\n\n<p><em>Bastante simples, n\u00e3o \u00e9? Bem, agora que as coisas ficam interessantes:<\/em><\/p>\n\n\n\n<ul><li><em>Quando a data de venda do item tiver passado, a qualidade (<code>quality<\/code>) do item diminui duas vezes mais r\u00e1pido.<\/em><\/li><li><em>A qualidade (<code>quality<\/code>) do item n\u00e3o pode ser negativa<\/em><\/li><li><em>O &#8220;Queijo Brie envelhecido&#8221; (<code>Aged Brie<\/code>), aumenta sua qualidade (<code>quality<\/code>) em&nbsp;<code>1<\/code>&nbsp;unidade a medida que envelhece.<\/em><\/li><li><em>A qualidade (<code>quality<\/code>) de um item n\u00e3o pode ser maior que 50.<\/em><\/li><li><em>O item &#8220;Sulfuras&#8221; (<code>Sulfuras<\/code>), por ser um item lend\u00e1rio, n\u00e3o precisa ter uma data de venda (<code>SellIn<\/code>) e sua qualidade (<code>quality<\/code>) n\u00e3o precisa ser diminuida.<\/em><\/li><li><em>O item &#8220;Entrada para os Bastidores&#8221; (<code>Backstage Passes<\/code>), assim como o &#8220;Queijo Brie envelhecido&#8221;, aumenta sua qualidade (<code>quality<\/code>) a medida que o dia da venda (<code>SellIn<\/code>) se aproxima;<\/em><ul wfd-id=\"402\"><li><em>A qualidade (<code>quality<\/code>) aumenta em&nbsp;<code>2<\/code>&nbsp;unidades quando a data de venda (<code>SellIn<\/code>) \u00e9 igual ou menor que&nbsp;<code>10<\/code>.<\/em><\/li><li><em>A qualidade (<code>quality<\/code>) aumenta em&nbsp;<code>3<\/code>&nbsp;unidades quando a data de venda (<code>SellIn<\/code>) \u00e9 igual ou menor que&nbsp;<code>5<\/code>.<\/em><\/li><li><em>A qualidade (<code>quality<\/code>) do item vai direto \u00e0&nbsp;<code>0<\/code>&nbsp;quando a data de venda (<code>SellIn<\/code>) tiver passado.<\/em><\/li><\/ul><\/li><\/ul>\n\n\n\n<p><em>N\u00f3s recentemente assinamos um suprimento de itens Conjurados Magicamente. Isto requer que n\u00f3s atualizemos nosso sistema:<\/em><\/p>\n\n\n\n<ul><li><em>Os itens &#8220;Conjurados&#8221; (<code>Conjured<\/code>) diminuem a qualidade (<code>quality<\/code>) duas vezes mais r\u00e1pido que os outros itens.<\/em><\/li><\/ul>\n\n\n\n<p><em>Sinta-se livre para fazer qualquer altera\u00e7\u00e3o no m\u00e9todo&nbsp;<code>updateQuality<\/code>&nbsp;e adicionar c\u00f3digo novo contanto que tudo continue funcionando perfeitamente. Entretanto, n\u00e3o altere o c\u00f3digo da classe&nbsp;<code>Item<\/code>&nbsp;ou da propriedade&nbsp;<code>Items<\/code>&nbsp;na classe&nbsp;<code>GildedRose<\/code>&nbsp;pois elas pertencem ao Goblin que ir\u00e1 te matar com um golpe pois ele n\u00e3o acredita na cultura de c\u00f3digo compartilhado.<\/em><\/p>\n\n\n\n<h4><a href=\"https:\/\/github.com\/emilybache\/GildedRose-Refactoring-Kata\/blob\/master\/GildedRoseRequirements_pt-BR.md#notas-finais\"><\/a>Notas Finais<\/h4>\n\n\n\n<p><em>Para esclarecer: Um item n\u00e3o pode ter uma qualidade (<code>quality<\/code>) maior que&nbsp;<code>50<\/code>, entretanto as &#8220;Sulfuras&#8221; por serem um item lend\u00e1rio v\u00e3o ter uma qualidade imutavel de&nbsp;<code>80<\/code>.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>O arquivo que devemos refatorar \u00e9 a execu\u00e7\u00e3o do update da qualidade dos itens:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"707\" height=\"938\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-23.png\" alt=\"\" class=\"wp-image-58\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-23.png 707w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-23-226x300.png 226w\" sizes=\"(max-width: 707px) 100vw, 707px\" \/><figcaption>M\u00e9todo updateQuality, respons\u00e1vel por ajustar a qualidade de a cada um dos itens \u00e0 venda<\/figcaption><\/figure><\/div>\n\n\n\n<p>O <em>GildedRoseApp<\/em> fica respons\u00e1vel por efetuar o update dos itens com os dias definidos na vari\u00e1vel <em>days<\/em>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"563\" height=\"542\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-24.png\" alt=\"\" class=\"wp-image-59\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-24.png 563w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-24-300x289.png 300w\" sizes=\"(max-width: 563px) 100vw, 563px\" \/><figcaption>Ajustando a qualidade dos itens de acordo com dias informados.<\/figcaption><\/figure><\/div>\n\n\n\n<h4>Iniciando o Refactoring<\/h4>\n\n\n\n<p>A primeira an\u00e1lise n\u00e3o me direcionou diretamente para o arquivo de testes, mas esse deveria ser meu primeiro passo, tive ajuda de alguns colegas de profiss\u00e3o ap\u00f3s um r\u00e1pido bate papo, eles me sugeriram que o arquivo de teste deveria ser o principal arquivo para facilitar a compreenss\u00e3o do problema.<\/p>\n\n\n\n<p>Mas o arquivo de testes n\u00e3o me ajudaria muito no inicio da fase de refactoring, minha mente ainda trabalhava numa forma de categorizar os itens que seriam cadastrados no estoque do Goblin, o fato dele n\u00e3o acreditar em c\u00f3digo compartilhado me posicionava como um extensor da funcionalidade pois, eu n\u00e3o poderia alterar o arquivo <em><strong>Item <\/strong><\/em>nem a propriedade <em><strong>items <\/strong><\/em>dentro da classe <strong><em>GildedRose<\/em><\/strong>. Voltando para o arquivo de testes:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"509\" height=\"328\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-25.png\" alt=\"\" class=\"wp-image-60\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-25.png 509w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-25-300x193.png 300w\" sizes=\"(max-width: 509px) 100vw, 509px\" \/><figcaption>Arquivo de testes pr\u00e9 refactoring<\/figcaption><\/figure><\/div>\n\n\n\n<p>Nada no projeto de testes me trouxe ao comportamento esperado, n\u00e3o existiam implementa\u00e7\u00f5es que direcionassem o refactoring ou expusessem de forma clara as regras adotadas. Se me baseasse na t\u00e9cnica de TDD, deveria escrever os testes necess\u00e1rios para garantir a regra de sucesso e para quebrar essa regra. Somente ap\u00f3s esse step eu deveria alterar o restante do projeto. Confesso que esse n\u00e3o foi o caminho que adotei, e ao final do refactoring, escrevendo esse di\u00e1rio me deparei com erros que ajustei durante essa escrita, por justamente subjulgar a import\u00e2ncia dessa t\u00e9cnica.<\/p>\n\n\n\n<h4>Categorias de items<\/h4>\n\n\n\n<p>Tive muitas incertezas relacionadas \u00e0s categorias, e ao final do refactoring ainda continuei com elas, n\u00e3o ficou claro se foi a melhor solu\u00e7\u00e3o, mas conforme o refactoring seguia a estrutura me levou para um modelo que extendia a regra de neg\u00f3cio da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"330\" height=\"652\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-27.png\" alt=\"\" class=\"wp-image-62\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-27.png 330w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-27-152x300.png 152w\" sizes=\"(max-width: 330px) 100vw, 330px\" \/><figcaption>QualityCategory arquivo respons\u00e1vel por determinar limite de qualidade<\/figcaption><\/figure><\/div>\n\n\n\n<p>Pelas regras determinadas, itens comuns n\u00e3o podem ter qualidade superior a 50 nem inferior a 0, minha primeira tentativa foi criar um propertyWrapper, semelhante ao que eu visitei nesse artigo do <a href=\"https:\/\/nshipster.com\/propertywrapper\/\">NSHipster<\/a>. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"555\" height=\"342\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-29.png\" alt=\"\" class=\"wp-image-64\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-29.png 555w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-29-300x185.png 300w\" sizes=\"(max-width: 555px) 100vw, 555px\" \/><figcaption>Primeiro esbo\u00e7o do propertyWrapper<\/figcaption><\/figure><\/div>\n\n\n\n<p>Esse objecto era respons\u00e1vel por limitar a quantidade de qualidade de um item, restringindo \u00e0 um range pr\u00e9 definido. Essa ideia n\u00e3o foi totalmente abandonada, mas ap\u00f3s a primeira heran\u00e7a ficou imposs\u00edvel sobreescrever a propriedade quality com os limites de outros tipos de produto.<\/p>\n\n\n\n<p>A abordagem seguinte foi puxar essa regra para um wrapper computado, que permitiu a sobreescrita do range de qualidade. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"606\" height=\"507\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-31.png\" alt=\"\" class=\"wp-image-66\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-31.png 606w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-31-300x251.png 300w\" sizes=\"(max-width: 606px) 100vw, 606px\" \/><figcaption>Cria\u00e7\u00e3o da propriedade qualityAssure, range e category<\/figcaption><\/figure><\/div>\n\n\n\n<p>A regra do <em><strong>qualityAssure<\/strong><\/em> \u00e9 utilizar a <strong><em>quality<\/em><\/strong> definida na categoria do produto, essa regra seria extendida por mais 4 categorias de produtos <strong><em>LegendaryItem, Aged, Pass e Conjured<\/em><\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"690\" height=\"241\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-33.png\" alt=\"\" class=\"wp-image-68\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-33.png 690w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-33-300x105.png 300w\" sizes=\"(max-width: 690px) 100vw, 690px\" \/><figcaption>Classe LegendaryItem <\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"659\" height=\"128\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-34.png\" alt=\"\" class=\"wp-image-69\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-34.png 659w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-34-300x58.png 300w\" sizes=\"(max-width: 659px) 100vw, 659px\" \/><figcaption>Classe AgedItem<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"661\" height=\"147\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-36.png\" alt=\"\" class=\"wp-image-71\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-36.png 661w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-36-300x67.png 300w\" sizes=\"(max-width: 661px) 100vw, 661px\" \/><figcaption>Classe PassItem<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"681\" height=\"148\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-40.png\" alt=\"\" class=\"wp-image-75\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-40.png 681w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-40-300x65.png 300w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><figcaption>Class ConjuredItem<\/figcaption><\/figure><\/div>\n\n\n\n<p>Esses itens especializados iriam me ajudar a refactorar a classe que para mim tinha alguns problemas:<\/p>\n\n\n\n<ul><li>Compara\u00e7\u00e3o de strings<\/li><li>Complexidade alta nas regras de neg\u00f3cio<\/li><li>Encadeamento de regras<\/li><li>Itens conjurados n\u00e3o funcionavam corretamente<\/li><\/ul>\n\n\n\n<h4>O refactoring<\/h4>\n\n\n\n<p>O processo que adotei foi criar um m\u00e9todo especializado em cada um dos objetos, mas primeiramente vamos retornar \u00e0 um dos requisitos solicitados pelo Goblin, n\u00e3o altere a propriedade items na classe GildedRose, seguindo essa solicita\u00e7\u00e3o e um pouco de SOLID, o pr\u00edncipio de substitui\u00e7\u00e3o de Liskov me permitiu adicionar especializa\u00e7\u00e3o sem alterar a classe GildedRose.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"584\" height=\"240\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-41.png\" alt=\"\" class=\"wp-image-76\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-41.png 584w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-41-300x123.png 300w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><figcaption>Liskov Susbtitution Principle<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-left\"> A lista de <strong><em>Item<\/em><\/strong> n\u00e3o alterou sua origem, o c\u00f3digo funcionaria da mesma forma caso o m\u00e9todo <strong>updateQuality <\/strong>n\u00e3o fosse refatorado. A especializa\u00e7\u00e3o somente me permitiu dar uma vis\u00e3o de uma implementa\u00e7\u00e3o de um pattern no futuro, o <strong>Factory <\/strong>seria utilizado para instanciar a classe de objeto correto baseado na sua categoria. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"449\" height=\"293\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-42.png\" alt=\"\" class=\"wp-image-77\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-42.png 449w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-42-300x196.png 300w\" sizes=\"(max-width: 449px) 100vw, 449px\" \/><figcaption>M\u00e9todo updateQuality<\/figcaption><\/figure><\/div>\n\n\n\n<p>O m\u00e9todo fico bem mais simples e efetua verifica\u00e7\u00f5es simples, caso o item n\u00e3o seja lend\u00e1rio altere a data de venda do item, de acordo com o tipo de item, altere  sua qualidade. Vamos analisar os m\u00e9todos de ajuste de qualidade um pouco mais de perto.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"671\" height=\"547\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-45.png\" alt=\"\" class=\"wp-image-80\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-45.png 671w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-45-300x245.png 300w\" sizes=\"(max-width: 671px) 100vw, 671px\" \/><figcaption>M\u00e9todos de update de qualidade<\/figcaption><\/figure><\/div>\n\n\n\n<p> S\u00e3o bem simples, itens comuns <strong>reduzem sua qualidade em 1<\/strong> conforme os dias passam, quando atingir a data limite de venda, ele <strong>dobra a quantidade de qualidade reduzida<\/strong>. Items conjurados reduzem sua <strong>qualide 2 vezes mais que itens comuns<\/strong>. Itens com<strong> qualidade incremental conforme o tempo passa<\/strong>, acompanham uma regra simples, a mais complexa seria a dos itens do tipo <strong><em>passagem para os bastidores<\/em> <\/strong>essa regra foi ajustada com multiplicadores, caso a data seja menor ou igual a zero ele reduz a qualidade diretamente a zero.<\/p>\n\n\n\n<h4>Os testes<\/h4>\n\n\n\n<p>Teste s\u00e3o as porcentagens de c\u00f3digos mais valiosas que escrevemos durante a carreira, isso garante algumas boas horas de sono quando bem escritos, em conjunto com testes funcionais e regressivos, incrementam a qualidade de um projeto em <strong>200%<\/strong> (n\u00famero baseado nada, s\u00f3 achismo mesmo). Escrever esses testes foram bem simples, mas como mencionei pouco acima, rolou alguns ajustes durante este artigo e aposto que precisaria revisitar mais vezes at\u00e9 chegar na cobertura ideal.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"576\" height=\"165\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-46.png\" alt=\"\" class=\"wp-image-81\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-46.png 576w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-46-300x86.png 300w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><figcaption>Teste de itens comuns<\/figcaption><\/figure><\/div>\n\n\n\n<p>Para itens lend\u00e1rios o teste \u00e9 simples, nada precisa ser alterado, nem qualidade nem data de venda.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"627\" height=\"167\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-47.png\" alt=\"\" class=\"wp-image-82\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-47.png 627w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-47-300x80.png 300w\" sizes=\"(max-width: 627px) 100vw, 627px\" \/><figcaption>Teste de itens lend\u00e1rios<\/figcaption><\/figure><\/div>\n\n\n\n<p>Para os itens que aumentam sua qualidade conforme aumenta sua idade, o importante \u00e9 garantir o limite de 50 na qualidade do item.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"476\" height=\"167\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-48.png\" alt=\"\" class=\"wp-image-83\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-48.png 476w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-48-300x105.png 300w\" sizes=\"(max-width: 476px) 100vw, 476px\" \/><figcaption>Teste de itens envelhecidos<\/figcaption><\/figure><\/div>\n\n\n\n<p>Para os itens do tipo PassItem que aumentam sua qualidade de acordo com a proximidade do evento, mas ap\u00f3s a data do evento sua qualidade reduz a zero.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"675\" height=\"708\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-50.png\" alt=\"\" class=\"wp-image-85\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-50.png 675w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-50-286x300.png 286w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><figcaption>Testes de itens do tipo passe<\/figcaption><\/figure><\/div>\n\n\n\n<p>Para itens do tipo conjurados, o padr\u00e3o de comportamento \u00e9 garantir que sua qualidade reduza 2 vezes mais r\u00e1pido que um item comum.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"551\" height=\"166\" src=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-52.png\" alt=\"\" class=\"wp-image-87\" srcset=\"https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-52.png 551w, https:\/\/gerlandiolucena.com.br\/site\/wp-content\/uploads\/2021\/02\/image-52-300x90.png 300w\" sizes=\"(max-width: 551px) 100vw, 551px\" \/><figcaption>Testes de itens conjurados<\/figcaption><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4>Considera\u00e7\u00f5es finais<\/h4>\n\n\n\n<p>Sou muito grato quando recebo um exerc\u00edcio t\u00e3o delicado e ao mesmo tempo t\u00e3o complexo, isso me garantiu mais algumas horas de estudo em uma dire\u00e7\u00e3o extremamente valorosa. Fiquei feliz com o resultado final, n\u00e3o sei se o Goblin gostou do resultado, mas acredito que com muito esfor\u00e7o um dia poderei chegar no n\u00edvel que desejo, ser especialista n\u00e3o deve ser nada f\u00e1cil, dominar arquitetura, padr\u00f5es de projeto, conhecimento de neg\u00f3cio e lideran\u00e7a de pessoas s\u00e3o itens essenciais para a maioria dos profissionais, mas muito dif\u00edceis de <strong><em>masterizar<\/em><\/strong>, cada minuto de estudo conta e cada dire\u00e7\u00e3o apontada conta ainda mais. Obrigado aos respons\u00e1veis por esse desafio.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recentemente tive a oportunidade de estudar um formato de refactoring bem interessante sugerido por Boddy Johson e expandido para mais linguagens por Emily Bache. O objetivo desse refactoring \u00e9 ajustar um programa existente para que seja poss\u00edvel controlar a qualidade de alguns itens vendidos por um Goblin, ele determina algumas regras pra isso, o repositorio &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gerlandiolucena.com.br\/site\/2021\/02\/28\/refatorando-gildedrose\/\" class=\"more-link\">Continuar a ler <span class=\"screen-reader-text\">&#8220;Refatorando GildedRose&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/posts\/56"}],"collection":[{"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/comments?post=56"}],"version-history":[{"count":2,"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/posts\/56\/revisions"}],"predecessor-version":[{"id":89,"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/posts\/56\/revisions\/89"}],"wp:attachment":[{"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/media?parent=56"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/categories?post=56"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gerlandiolucena.com.br\/site\/wp-json\/wp\/v2\/tags?post=56"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}