{"id":9910,"date":"2023-11-29T14:54:21","date_gmt":"2023-11-29T17:54:21","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?post_type=artigos&#038;p=9910"},"modified":"2023-12-26T15:53:25","modified_gmt":"2023-12-26T18:53:25","slug":"quer-refatorar-mas-nao-sabe-por-onde-comecar-padroes-de-projeto-podem-ajudar","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/quer-refatorar-mas-nao-sabe-por-onde-comecar-padroes-de-projeto-podem-ajudar\/","title":{"rendered":"Quer Refatorar mas N\u00e3o Sabe por Onde Come\u00e7ar? Padr\u00f5es de Projeto Podem Ajudar"},"content":{"rendered":"\n<p>Refatorar c\u00f3digo pode ser uma tarefa intimidante, especialmente quando percebemos que o que temos em m\u00e3os est\u00e1 longe do ideal. Voc\u00ea sabe quando seu c\u00f3digo est\u00e1 confuso, dif\u00edcil de entender ou manter. Surge aquela incerteza: &#8220;Por onde eu come\u00e7o a refatora\u00e7\u00e3o?&#8221;. Neste momento, os <em>padr\u00f5es de projeto<\/em> podem ser seus melhores aliados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Padr\u00f5es de Projeto como Ferramentas de Refatora\u00e7\u00e3o<\/h2>\n\n\n\n<p>Padr\u00f5es de projeto s\u00e3o solu\u00e7\u00f5es generalizadas para problemas comuns no design de software. Desde que foram meticulosamente documentados pelos &#8220;Gang of Four&#8221; em seu livro &#8220;Design Patterns: Elements of Reusable Object-Oriented Software&#8221;, servem como ferramentas prediletas para desenvolvedores que buscam a melhoria do seu c\u00f3digo.<\/p>\n\n\n\n<p>Imagine se deparar com uma classe que tem responsabilidades demais \u2014 um claro indicativo da necessidade do padr\u00e3o <em>Single Responsibility Principle<\/em>. Ao identificar esse padr\u00e3o espec\u00edfico, voc\u00ea tem um caminho claro para decompor essa classe em v\u00e1rias outras, promovendo a modularidade e facilitando a manuten\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Antes da refatora\u00e7\u00e3o usando Single Responsibility Principle\npublic class OrderProcessor {\n    public void ProcessOrder(Order order) {\n        \/\/ processa o pedido\n    }\n\n    public void SaveOrder(Order order) {\n        \/\/ salva o pedido no banco de dados\n    }\n\n    public void SendConfirmationEmail(Order order) {\n        \/\/ envia email de confirma\u00e7\u00e3o\n    }\n}\n\n\/\/ Ap\u00f3s a refatora\u00e7\u00e3o usando Single Responsibility Principle\npublic class OrderProcessor {\n    public void ProcessOrder(Order order) {\n        \/\/ processa o pedido\n    }\n}\n\npublic class OrderSaver {\n    public void SaveOrder(Order order) {\n        \/\/ salva o pedido no banco de dados\n    }\n}\n\npublic class OrderConfirmationEmailSender {\n    public void SendConfirmationEmail(Order order) {\n        \/\/ envia email de confirma\u00e7\u00e3o\n    }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Antes da refatora\u00e7\u00e3o usando Single Responsibility Principle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">OrderProcessor<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ProcessOrder<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ processa o pedido<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">SaveOrder<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ salva o pedido no banco de dados<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">SendConfirmationEmail<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ envia email de confirma\u00e7\u00e3o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Ap\u00f3s a refatora\u00e7\u00e3o usando Single Responsibility Principle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">OrderProcessor<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ProcessOrder<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ processa o pedido<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">OrderSaver<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">SaveOrder<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ salva o pedido no banco de dados<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">OrderConfirmationEmailSender<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">SendConfirmationEmail<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ envia email de confirma\u00e7\u00e3o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Observar esse exemplo pr\u00e1tico permite visualizar como um padr\u00e3o pode trazer clareza e melhor estrutura ao c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Levar em conta os Padr\u00f5es de Projeto Durante a An\u00e1lise<\/h2>\n\n\n\n<p>Para refatorar eficientemente, comece por estudar o problema que seu c\u00f3digo tenta resolver e quais padr\u00f5es podem simplificar sua solu\u00e7\u00e3o. Inclua essa an\u00e1lise como parte do seu fluxo de trabalho de refatora\u00e7\u00e3o, permitindo que as solu\u00e7\u00f5es emergem organicamente a partir das necessidades. A pr\u00e1tica cont\u00ednua levar\u00e1 a identifica\u00e7\u00e3o mais r\u00e1pida de padr\u00f5es e a aplica\u00e7\u00f5es mais assertivas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Em resumo, os padr\u00f5es de projeto s\u00e3o aux\u00edlios cruciais no processo de refatora\u00e7\u00e3o. Eles s\u00e3o mais do que simples solu\u00e7\u00f5es; s\u00e3o estrat\u00e9gias que elevam a qualidade do design de software. Quando se deparar com uma base de c\u00f3digo que precisa de melhorias, utilize os padr\u00f5es n\u00e3o s\u00f3 para identificar problemas, mas para iluminar o caminho para as solu\u00e7\u00f5es. E lembre-se, h\u00e1 uma riqueza de recursos \u00e0 sua disposi\u00e7\u00e3o, como a <a href=\"https:\/\/refactoring.guru\/design-patterns\">Refactoring.Guru<\/a>, um excelente ponto de partida para quem deseja aprofundar no tema. E claro, continuamos a explorar esses t\u00f3picos em meus grupos de estudos e mentorias, onde s\u00e3o discutidos com maior profundidade.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Padr\u00f5es de projeto s\u00e3o guias pr\u00e1ticos para refatorar e melhorar o design do seu c\u00f3digo.<\/li>\n\n\n\n<li>Exemplos pr\u00e1ticos, como o uso do <em>Single Responsibility Principle<\/em>, demonstram a efic\u00e1cia desses padr\u00f5es na organiza\u00e7\u00e3o do c\u00f3digo.<\/li>\n\n\n\n<li>Analisar seu c\u00f3digo \u00e0 luz dos padr\u00f5es de projeto eleva n\u00e3o apenas sua capacidade de refatora\u00e7\u00e3o, mas tamb\u00e9m de prever e implementar solu\u00e7\u00f5es de design s\u00f3lidas.<\/li>\n<\/ol>\n","protected":false},"featured_media":9906,"parent":0,"template":"","cursos":[7],"class_list":["post-9910","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-gof"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/9910","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/9906"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=9910"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=9910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}