{"id":805,"date":"2024-08-19T12:07:35","date_gmt":"2024-08-19T15:07:35","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/?p=805"},"modified":"2024-08-26T15:39:26","modified_gmt":"2024-08-26T18:39:26","slug":"codigo-limpo-parte-10-solid","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/codigo-limpo-parte-10-solid\/","title":{"rendered":"C\u00f3digo-Limpo Parte 10: SOLID"},"content":{"rendered":"\n<p>O desenvolvimento de software exige um equil\u00edbrio constante entre funcionalidade, efici\u00eancia e clareza. \u00c0 medida que projetos crescem em complexidade, a import\u00e2ncia de manter um c\u00f3digo que seja n\u00e3o apenas funcional, mas tamb\u00e9m limpo, se torna cada vez mais evidente. C\u00f3digo-limpo n\u00e3o \u00e9 apenas um ideal est\u00e9tico; \u00e9 uma pr\u00e1tica fundamental que impacta diretamente a manuten\u00e7\u00e3o, escalabilidade e sustentabilidade de um sistema ao longo do tempo.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Um c\u00f3digo-limpo facilita a compreens\u00e3o, reduz a introdu\u00e7\u00e3o de erros e simplifica a adapta\u00e7\u00e3o a novos requisitos. Em um ambiente de desenvolvimento colaborativo, a clareza do c\u00f3digo \u00e9 vital para que todos os membros da equipe possam contribuir de forma eficaz e sem obst\u00e1culos. O c\u00f3digo confuso ou desorganizado tende a aumentar o tempo de desenvolvimento e a probabilidade de falhas, al\u00e9m de dificultar futuras extens\u00f5es ou refatora\u00e7\u00f5es.<\/p>\n\n\n\n<p>Robert C. Martin, um dos maiores defensores do c\u00f3digo-limpo, consolidou v\u00e1rias pr\u00e1ticas e princ\u00edpios que orientam os desenvolvedores na cria\u00e7\u00e3o de um c\u00f3digo de qualidade. Esses princ\u00edpios n\u00e3o s\u00e3o regras r\u00edgidas, mas diretrizes flex\u00edveis que podem ser adaptadas a diferentes contextos e linguagens de programa\u00e7\u00e3o. Eles servem como uma base s\u00f3lida para garantir que o c\u00f3digo n\u00e3o apenas funcione, mas funcione bem a longo prazo, mantendo-se leg\u00edvel e eficiente \u00e0 medida que o sistema evolui.<\/p>\n\n\n\n<p>Nos \u00faltimos dez artigos, exploramos cada um dos pilares do c\u00f3digo-limpo, detalhando como essas pr\u00e1ticas podem ser aplicadas no desenvolvimento com Delphi. Desde a escolha de nomes significativos at\u00e9 a implementa\u00e7\u00e3o dos princ\u00edpios SOLID, cada pilar contribui para um objetivo comum: criar software de alta qualidade que seja f\u00e1cil de entender, manter e expandir.<\/p>\n\n\n\n<p>A seguir, apresentamos um resumo detalhado de cada um dos pilares que abordamos, refor\u00e7ando a import\u00e2ncia de cada pr\u00e1tica na constru\u00e7\u00e3o de um c\u00f3digo que n\u00e3o s\u00f3 resolve os problemas de hoje, mas tamb\u00e9m est\u00e1 preparado para os desafios de amanh\u00e3.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">O que s\u00e3o os Princ\u00edpios SOLID?<\/h4>\n\n\n\n<p>Os princ\u00edpios SOLID s\u00e3o cinco regras b\u00e1sicas que orientam o design de software orientado a objetos. Eles s\u00e3o:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S<\/strong>ingle Responsibility Principle (Princ\u00edpio da Responsabilidade \u00danica)<\/li>\n\n\n\n<li><strong>O<\/strong>pen\/Closed Principle (Princ\u00edpio do Aberto\/Fechado)<\/li>\n\n\n\n<li><strong>L<\/strong>iskov Substitution Principle (Princ\u00edpio da Substitui\u00e7\u00e3o de Liskov)<\/li>\n\n\n\n<li><strong>I<\/strong>nterface Segregation Principle (Princ\u00edpio da Segrega\u00e7\u00e3o de Interfaces)<\/li>\n\n\n\n<li><strong>D<\/strong>ependency Inversion Principle (Princ\u00edpio da Invers\u00e3o de Depend\u00eancia)<\/li>\n<\/ol>\n\n\n\n<p>Cada um desses princ\u00edpios visa resolver um conjunto espec\u00edfico de problemas de design e, quando aplicados em conjunto, ajudam a criar sistemas de software que s\u00e3o mais f\u00e1ceis de entender, manter e escalar.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Single Responsibility Principle (Princ\u00edpio da Responsabilidade \u00danica)<\/h4>\n\n\n\n<p>O Princ\u00edpio da Responsabilidade \u00danica estabelece que uma classe deve ter apenas uma raz\u00e3o para mudar, ou seja, ela deve ter apenas uma responsabilidade. Isso significa que cada classe deve ser respons\u00e1vel por uma \u00fanica parte da funcionalidade fornecida pelo software e deve encapsular essa funcionalidade de forma clara e espec\u00edfica.<\/p>\n\n\n\n<p><strong>Exemplo em Delphi:<\/strong><\/p>\n\n\n\n<p><strong>Antes:<\/strong> Uma classe que gerencia tanto a l\u00f3gica de neg\u00f3cios quanto a persist\u00eancia de dados.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TClienteManager = class\n  public\n    procedure AdicionarCliente(Cliente: TCliente);\n    procedure SalvarCliente(Cliente: TCliente);\n    procedure EnviarEmailConfirmacao(Cliente: TCliente);\n  end;\n<\/pre><\/div>\n\n\n\n<p><strong>Depois:<\/strong> Separar as responsabilidades em classes distintas.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TClienteManager = class\n  public\n    procedure AdicionarCliente(Cliente: TCliente);\n  end;\n\n  TClienteRepositorio = class\n  public\n    procedure SalvarCliente(Cliente: TCliente);\n  end;\n\n  TEmailService = class\n  public\n    procedure EnviarEmailConfirmacao(Cliente: TCliente);\n  end;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Open\/Closed Principle (Princ\u00edpio do Aberto\/Fechado)<\/h4>\n\n\n\n<p>O Princ\u00edpio do Aberto\/Fechado afirma que uma classe deve estar aberta para extens\u00e3o, mas fechada para modifica\u00e7\u00e3o. Isso significa que o comportamento de uma classe deve poder ser estendido sem alterar o c\u00f3digo existente, geralmente atrav\u00e9s do uso de heran\u00e7a ou composi\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>Exemplo em Delphi:<\/strong><\/p>\n\n\n\n<p><strong>Antes:<\/strong> Modificar diretamente uma classe existente para adicionar nova funcionalidade.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TCalculadora = class\n  public\n    function CalcularImposto(Venda: TVenda): Double;\n  end;\n<\/pre><\/div>\n\n\n\n<p><strong>Depois:<\/strong> Usar heran\u00e7a ou interfaces para estender a funcionalidade.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TCalculadoraImposto = class\n  public\n    function Calcular(Venda: TVenda): Double; virtual;\n  end;\n\n  TCalculadoraImpostoICMS = class(TCalculadoraImposto)\n  public\n    function Calcular(Venda: TVenda): Double; override;\n  end;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Liskov Substitution Principle (Princ\u00edpio da Substitui\u00e7\u00e3o de Liskov)<\/h4>\n\n\n\n<p>O Princ\u00edpio da Substitui\u00e7\u00e3o de Liskov estabelece que objetos de uma superclasse devem poder ser substitu\u00eddos por objetos de uma subclasse sem afetar a corretude do programa. Em outras palavras, uma subclasse deve ser substitu\u00edvel por sua superclasse sem que o c\u00f3digo que usa a superclasse precise saber da diferen\u00e7a.<\/p>\n\n\n\n<p><strong>Exemplo em Delphi:<\/strong><\/p>\n\n\n\n<p><strong>Antes:<\/strong> Uma subclasse que n\u00e3o mant\u00e9m o comportamento esperado da superclasse.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TQuadrado = class(TRetangulo)\n  public\n    procedure SetLargura(L: Double); override;\n    procedure SetAltura(A: Double); override;\n  end;\n<\/pre><\/div>\n\n\n\n<p><strong>Depois:<\/strong> Design que respeita o comportamento da superclasse.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TForma = class\n  public\n    procedure SetTamanho(T: Double); virtual; abstract;\n  end;\n\n  TQuadrado = class(TForma)\n  public\n    procedure SetTamanho(T: Double); override;\n  end;\n\n  TRetangulo = class(TForma)\n  public\n    procedure SetTamanho(T: Double); override;\n  end;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Interface Segregation Principle (Princ\u00edpio da Segrega\u00e7\u00e3o de Interfaces)<\/h4>\n\n\n\n<p>O Princ\u00edpio da Segrega\u00e7\u00e3o de Interfaces sugere que os clientes n\u00e3o devem ser for\u00e7ados a depender de interfaces que n\u00e3o utilizam. Em outras palavras, \u00e9 melhor ter v\u00e1rias interfaces espec\u00edficas do que uma interface gen\u00e9rica e ampla.<\/p>\n\n\n\n<p><strong>Exemplo em Delphi:<\/strong><\/p>\n\n\n\n<p><strong>Antes:<\/strong> Uma interface grande e gen\u00e9rica.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  IRelatorio = interface\n    procedure GerarPDF;\n    procedure GerarExcel;\n    procedure EnviarEmail;\n  end;\n<\/pre><\/div>\n\n\n\n<p><strong>Depois:<\/strong> Dividir em interfaces menores e mais espec\u00edficas.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  IPDFRelatorio = interface\n    procedure GerarPDF;\n  end;\n\n  IExcelRelatorio = interface\n    procedure GerarExcel;\n  end;\n\n  IEmailRelatorio = interface\n    procedure EnviarEmail;\n  end;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Dependency Inversion Principle (Princ\u00edpio da Invers\u00e3o de Depend\u00eancia)<\/h4>\n\n\n\n<p>O Princ\u00edpio da Invers\u00e3o de Depend\u00eancia afirma que os m\u00f3dulos de alto n\u00edvel n\u00e3o devem depender de m\u00f3dulos de baixo n\u00edvel. Ambos devem depender de abstra\u00e7\u00f5es. Al\u00e9m disso, as abstra\u00e7\u00f5es n\u00e3o devem depender de detalhes, mas os detalhes devem depender de abstra\u00e7\u00f5es. Isso geralmente \u00e9 implementado usando inje\u00e7\u00e3o de depend\u00eancia.<\/p>\n\n\n\n<p><strong>Exemplo em Delphi:<\/strong><\/p>\n\n\n\n<p><strong>Antes:<\/strong> Uma classe que depende diretamente de uma implementa\u00e7\u00e3o concreta.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  TPedidoService = class\n  private\n    FEmailService: TEmailService;\n  public\n    constructor Create;\n    procedure ProcessarPedido(Pedido: TPedido);\n  end;\n<\/pre><\/div>\n\n\n\n<p><strong>Depois:<\/strong> Usar interfaces para abstrair depend\u00eancias.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">type\n  IEmailService = interface\n    procedure EnviarEmail(Pedido: TPedido);\n  end;\n\n  TPedidoService = class\n  private\n    FEmailService: IEmailService;\n  public\n    constructor Create(AEmailService: IEmailService);\n    procedure ProcessarPedido(Pedido: TPedido);\n  end;\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Conclus\u00e3o<\/h3>\n\n\n\n<p>Ao longo dos \u00faltimos dez artigos, exploramos profundamente os pilares fundamentais do c\u00f3digo-limpo, um conjunto de pr\u00e1ticas que s\u00e3o essenciais para garantir que o software desenvolvido seja de alta qualidade, sustent\u00e1vel e f\u00e1cil de manter. Cada pilar abordado representa um aspecto crucial na constru\u00e7\u00e3o de um c\u00f3digo que n\u00e3o apenas atende aos requisitos funcionais, mas tamb\u00e9m promove a longevidade e a efici\u00eancia do software.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>Nomes Significativos<\/strong>:<\/h4>\n\n\n\n<p>O primeiro pilar enfatiza a import\u00e2ncia de escolher nomes claros e descritivos para vari\u00e1veis, fun\u00e7\u00f5es, m\u00e9todos e classes. A clareza nos nomes facilita a compreens\u00e3o do c\u00f3digo por qualquer desenvolvedor, independentemente de sua familiaridade com o projeto. Nomes significativos atuam como uma forma de documenta\u00e7\u00e3o impl\u00edcita, tornando o c\u00f3digo autoexplicativo e reduzindo a necessidade de coment\u00e1rios extensivos.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. <strong>Fun\u00e7\u00f5es Pequenas<\/strong>:<\/h4>\n\n\n\n<p>Exploramos a necessidade de manter fun\u00e7\u00f5es curtas e focadas em uma \u00fanica responsabilidade. Fun\u00e7\u00f5es pequenas s\u00e3o mais f\u00e1ceis de entender, testar e manter, al\u00e9m de promoverem a reutiliza\u00e7\u00e3o de c\u00f3digo. Quando as fun\u00e7\u00f5es s\u00e3o pequenas e coesas, o c\u00f3digo se torna modular, facilitando sua extens\u00e3o e refatora\u00e7\u00e3o conforme o projeto evolui.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. <strong>Coment\u00e1rios Eficientes<\/strong>:<\/h4>\n\n\n\n<p>Abordamos como os coment\u00e1rios devem ser utilizados para explicar o \u201cporqu\u00ea\u201d do c\u00f3digo, em vez de descrever o \u201ccomo\u201d. Coment\u00e1rios eficientes agregam valor ao entendimento do c\u00f3digo, esclarecendo inten\u00e7\u00f5es ou justificando decis\u00f5es de design que n\u00e3o s\u00e3o imediatamente \u00f3bvias a partir da leitura do c\u00f3digo em si. Coment\u00e1rios redundantes ou mal utilizados podem gerar mais confus\u00e3o do que clareza.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. <strong>Formata\u00e7\u00e3o Consistente<\/strong>:<\/h4>\n\n\n\n<p>A formata\u00e7\u00e3o consistente \u00e9 essencial para a legibilidade do c\u00f3digo. Identa\u00e7\u00e3o adequada, espa\u00e7amento uniforme e uma estrutura coerente de blocos de c\u00f3digo tornam a navega\u00e7\u00e3o e a revis\u00e3o do c\u00f3digo muito mais f\u00e1ceis. Quando todos os membros da equipe seguem as mesmas diretrizes de formata\u00e7\u00e3o, o c\u00f3digo se torna mais coeso e compreens\u00edvel.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5. <strong>Tratamento Adequado de Erros<\/strong>:<\/h4>\n\n\n\n<p>Enfatizamos a import\u00e2ncia de capturar e tratar erros de forma que o c\u00f3digo permane\u00e7a robusto e previs\u00edvel. A utiliza\u00e7\u00e3o de estruturas como <code>try...except<\/code> e <code>try...finally<\/code> ajuda a garantir que os erros sejam gerenciados de maneira consistente, protegendo a integridade do sistema. Al\u00e9m disso, a captura de exce\u00e7\u00f5es espec\u00edficas e a cria\u00e7\u00e3o de classes de erro personalizadas permitem um tratamento mais granular e contextualizado.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6. <strong>Estrutura de Classes e Objetos<\/strong>:<\/h4>\n\n\n\n<p>Discutimos a import\u00e2ncia de uma estrutura de classes e objetos que promova a coes\u00e3o e minimize o acoplamento. Aplicando princ\u00edpios como encapsulamento, heran\u00e7a e polimorfismo de forma criteriosa, conseguimos criar um c\u00f3digo que \u00e9 n\u00e3o apenas modular, mas tamb\u00e9m flex\u00edvel e preparado para futuras extens\u00f5es sem a necessidade de grandes reestrutura\u00e7\u00f5es.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">7. <strong>Testes Automatizados<\/strong>:<\/h4>\n\n\n\n<p>Abordamos como a implementa\u00e7\u00e3o de testes automatizados garante que o software funcione conforme esperado, mesmo ap\u00f3s modifica\u00e7\u00f5es ou adi\u00e7\u00f5es de novas funcionalidades. Testes unit\u00e1rios e de integra\u00e7\u00e3o s\u00e3o ferramentas poderosas para detectar regress\u00f5es e garantir que o c\u00f3digo continue robusto \u00e0 medida que evolui.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">8. <strong>Refatora\u00e7\u00e3o Cont\u00ednua<\/strong>:<\/h4>\n\n\n\n<p>Exploramos a pr\u00e1tica de refatorar o c\u00f3digo regularmente para melhorar sua clareza, efici\u00eancia e facilidade de manuten\u00e7\u00e3o. A refatora\u00e7\u00e3o cont\u00ednua \u00e9 uma estrat\u00e9gia preventiva que evita a deteriora\u00e7\u00e3o do c\u00f3digo ao longo do tempo, mantendo-o sempre em um estado de alta qualidade.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">9. <strong>C\u00f3digo Simples e Direto<\/strong>:<\/h4>\n\n\n\n<p>Discutimos a import\u00e2ncia de escrever c\u00f3digo que seja simples e direto, evitando complexidade desnecess\u00e1ria. C\u00f3digo simples \u00e9 mais f\u00e1cil de manter, menos propenso a erros e promove uma colabora\u00e7\u00e3o mais eficiente entre os membros da equipe. A simplicidade no c\u00f3digo \u00e9 uma caracter\u00edstica que deve ser constantemente buscada.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">10. <strong>Princ\u00edpios SOLID<\/strong>:<\/h4>\n\n\n\n<p>Finalizamos com os princ\u00edpios SOLID, que fornecem diretrizes fundamentais para o design de software orientado a objetos. Cada princ\u00edpio \u2013 Responsabilidade \u00danica, Aberto\/Fechado, Substitui\u00e7\u00e3o de Liskov, Segrega\u00e7\u00e3o de Interfaces e Invers\u00e3o de Depend\u00eancia \u2013 contribui para criar um c\u00f3digo que \u00e9 flex\u00edvel, sustent\u00e1vel e preparado para mudan\u00e7as futuras.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reflex\u00e3o Final<\/h3>\n\n\n\n<p>A ado\u00e7\u00e3o desses dez pilares do c\u00f3digo-limpo n\u00e3o apenas melhora a qualidade t\u00e9cnica do software, mas tamb\u00e9m eleva o n\u00edvel profissional dos desenvolvedores envolvidos. C\u00f3digo-limpo \u00e9, em \u00faltima an\u00e1lise, sobre criar solu\u00e7\u00f5es que sejam compreens\u00edveis, mantidas e melhoradas ao longo do tempo sem comprometer sua integridade. Ao incorporar essas pr\u00e1ticas no dia a dia do desenvolvimento, voc\u00ea garante que seu c\u00f3digo n\u00e3o apenas funcione, mas funcione bem, hoje e no futuro. A jornada para dominar o c\u00f3digo-limpo \u00e9 cont\u00ednua, mas os benef\u00edcios em termos de efici\u00eancia, qualidade e colabora\u00e7\u00e3o tornam essa jornada mais do que recompensadora.<\/p>\n\n\n\n<p>Comunidade no <a href=\"https:\/\/t.me\/AdrianoSantosCommunity\">Telegram<\/a><\/p>\n\n\n\n<p>\ud83d\ude80Comente no campo abaixo \ud83d\udc47\ud83d\udc47\ud83d\udc47 o que achou e qual sua d\u00favida.<\/p>\n\n\n\n<p>Te vejo na pr\u00f3xima<\/p>\n\n\n\n<p>Adriano Santos<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Demais artigos:<br><\/p>\n\n\n\n<p><a href=\"https:\/\/adrianosantos.link\/ArtigoCodigoLimpo-NomesSignificativos\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 1: Nomes Significativos<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoCodigoLimpoFuncoesPequenas\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 2: Fun\u00e7\u00f5es Pequenas<\/a><br><a href=\"https:\/\/adrianosantos.link\/CodigoLimpoParte3-ComentariosEficientes\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 3: Coment\u00e1rios Eficientes<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoFormatacaoConsistente\" target=\"_blank\" rel=\"noreferrer noopener\">Parrte 4: Formata\u00e7\u00e3o Consistente<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoCodigoLimpoTratamentoDeErros\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 5: Tratamento de Erros<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoCodigoLimpoEstruturaDeClasses\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 6: Estrutura de Classes<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoTestesAutomatizados\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 7: Testes Automatizados<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoRefatocaoContinua\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 8: Refatora\u00e7\u00e3o Cont\u00ednua<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoCodigoSimplesDireto\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 9: C\u00f3digo Simples e Direto<\/a><br><a href=\"https:\/\/adrianosantos.link\/ArtigoCodigoLimpoSolid\" target=\"_blank\" rel=\"noreferrer noopener\">Parte 10: SOLID<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O desenvolvimento de software exige um equil\u00edbrio constante entre funcionalidade, efici\u00eancia e clareza. \u00c0 medida que projetos crescem em complexidade, a import\u00e2ncia de manter um c\u00f3digo que seja n\u00e3o apenas funcional, mas tamb\u00e9m limpo, se torna cada vez mais evidente. C\u00f3digo-limpo n\u00e3o \u00e9 apenas um ideal est\u00e9tico; \u00e9 uma pr\u00e1tica fundamental que impacta diretamente a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":808,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-805","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=805"}],"version-history":[{"count":3,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/805\/revisions"}],"predecessor-version":[{"id":811,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/805\/revisions\/811"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/808"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}