{"id":118042,"date":"2023-01-04T08:02:00","date_gmt":"2023-01-04T11:02:00","guid":{"rendered":"https:\/\/fluency.io\/br\/blog\/?p=14532"},"modified":"2023-07-24T11:31:04","modified_gmt":"2023-07-24T14:31:04","slug":"solid-kiss-dry-yagni","status":"publish","type":"post","link":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/","title":{"rendered":"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo"},"content":{"rendered":"\n<p>Ser um bom<a rel=\"noreferrer noopener\" href=\"https:\/\/fluency.io\/br\/blog\/guia-back-end\/?utm_source=blog\" target=\"_blank\"> programador<\/a> vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 muitas vezes utilizando <a rel=\"noreferrer noopener\" href=\"https:\/\/fluency.io\/br\/blog\/algoritmos-de-classificacao\/?utm_source=blog\" target=\"_blank\">algoritmos<\/a>, <strong>testes de unidade<\/strong> e <strong>an\u00e1lise de complexidade de espa\u00e7o-tempo<\/strong>.\u00a0<\/p>\n\n\n\n<p>No entanto, h\u00e1 tamb\u00e9m um <strong>conjunto de princ\u00edpios<\/strong>, testados e comprovados, desenvolvidos para refinar a arte e a ci\u00eancia do <a href=\"https:\/\/fluency.io\/br\/blog\/desenvolvimento-de-software\/?utm_source=blog\" target=\"_blank\" rel=\"noreferrer noopener\">desenvolvimento de aplicativos de software<\/a>. Tais princ\u00edpios, provenientes da <strong>engenharia de software<\/strong>, consistem em abordagens que norteiam a escrita de um<strong> c\u00f3digo limpo<\/strong>, f\u00e1cil de depurar e de ser entendido.\u00a0<\/p>\n\n\n\n<p>Populares entre <a rel=\"noreferrer noopener\" href=\"https:\/\/fluency.io\/br\/blog\/desenvolvedor-de-software\/?utm_source=blog\" target=\"_blank\">desenvolvedores e engenheiros de software<\/a>,<strong> SOLID<\/strong>, <strong>DRY KISS<\/strong> e <strong>YAGNI<\/strong> s\u00e3o princ\u00edpios b\u00e1sicos que regem a<strong> engenharia de software<\/strong>. De maneira geral, eles buscam ajudar a projetar <strong>estruturas de desenvolvimento<\/strong>, assim como nortear opera\u00e7\u00f5es p\u00f3s-lan\u00e7amento e suporte de manuten\u00e7\u00e3o.\u00a0<\/p>\n\n\n\n<p>Neste artigo, explicaremos cada um desses m\u00e9todos, assim como por que eles s\u00e3o considerados elementos cruciais para um<strong> processo de desenvolvimento<\/strong> confi\u00e1vel e \u00e1gil.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 Solid<\/strong><\/h2>\n\n\n\n<p><strong>SOLID<\/strong> \u00e9 um acr\u00f4nimo mnem\u00f4nico para <strong>cinco princ\u00edpios <\/strong>destinados a tornar os projetos de software mais compreens\u00edveis, flex\u00edveis e de f\u00e1cil manuten\u00e7\u00e3o. Esse <strong>princ\u00edpio da programa\u00e7\u00e3o<\/strong> foi criado por <a href=\"https:\/\/pt.wikipedia.org\/wiki\/Robert_Cecil_Martin\" target=\"_blank\" rel=\"noreferrer noopener\">Robert C. Martin<\/a> (ou simplesmente \u201cUncle Bob\u201d) e representa cinco conven\u00e7\u00f5es diferentes de codifica\u00e7\u00e3o.<\/p>\n\n\n\n<p>Ao seguir esses princ\u00edpios, poder\u00e1 melhorar a confiabilidade do seu c\u00f3digo trabalhando em sua estrutura e <strong>consist\u00eancia l\u00f3gica<\/strong>. Em outras palavras, o <strong>SOLID<\/strong> trata\u2013se na verdade de um subconjunto de princ\u00edpios que inclui:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>S<\/strong>ingle Responsibility principle (princ\u00edpio da responsabilidade \u00fanica);<\/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 interface);<\/li>\n\n\n\n<li><strong>D<\/strong>ependency Inversion principle (princ\u00edpio de invers\u00e3o de depend\u00eancia).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Single-responsibility principle (princ\u00edpio da responsabilidade \u00fanica)<\/strong><a href=\"https:\/\/hackernoon.com\/you-dont-understand-the-single-responsibility-principle-abfdd005b137?source=rss----3a8144eabfe3---4\"><\/a><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"800\" height=\"230\" src=\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png\" alt=\"diagrama exemplificando o Single-responsibility principle (princ\u00edpio da responsabilidade \u00fanica)\" class=\"wp-image-14533\" srcset=\"https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/O-que-e-Solid.png 800w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/O-que-e-Solid-768x221.png 768w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/O-que-e-Solid-515x148.png 515w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/O-que-e-Solid-150x43.png 150w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Imagem: <a rel=\"noreferrer noopener\" href=\"https:\/\/hackernoon.com\/you-dont-understand-the-single-responsibility-principle-abfdd005b137?source=rss----3a8144eabfe3---4\" target=\"_blank\">hackernoon.com<\/a><\/figcaption><\/figure>\n\n\n\n<p>Considerado um princ\u00edpio-chave da engenharia de software, o<strong> Princ\u00edpio da Responsabilidade \u00danica<\/strong> determina como o c\u00f3digo deve ser modularizado na programa\u00e7\u00e3o orientada a objetos.\u00a0<\/p>\n\n\n\n<p>Dessa forma, cada m\u00f3dulo deve ser projetado para cumprir somente a sua responsabilidade sobre uma \u00fanica parte da funcionalidade fornecida pelo software;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Open-closed principle (princ\u00edpio do aberto\/fechado)<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"660\" height=\"266\" src=\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/Open-closed-principle.png\" alt=\"diagrama exemplificando o Open-closed principle (princ\u00edpio do aberto\/fechado)\" class=\"wp-image-14534\" srcset=\"https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Open-closed-principle.png 660w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Open-closed-principle-515x208.png 515w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Open-closed-principle-150x60.png 150w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><figcaption class=\"wp-element-caption\">Imagem:<a href=\"https:\/\/hackernoon.com\/why-the-open-closed-principle-is-the-one-you-need-to-know-but-dont-176f7e4416d\" target=\"_blank\" rel=\"noreferrer noopener\"> <\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/hackernoon.com\/why-the-open-closed-principle-is-the-one-you-need-to-know-but-dont-176f7e4416d\" target=\"_blank\">hackernoon.com<\/a><\/figcaption><\/figure>\n\n\n\n<p>O <strong>Princ\u00edpio Aberto-Fechado (OCP)<\/strong> afirma que as entidades de software (classes, m\u00f3dulos, m\u00e9todos, etc.) devem ser abertas para extens\u00e3o, mas fechadas para modifica\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Na pr\u00e1tica, isso significa criar <strong>entidades de software<\/strong> cujo comportamento possa ser alterado sem a necessidade de editar e recompilar o pr\u00f3prio c\u00f3digo. Sendo assim, qualquer parte do software deve estar dispon\u00edvel e ser facilmente estendida para outros recursos, mas n\u00e3o deve ser modificada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Liskov substitution principle (princ\u00edpio da substitui\u00e7\u00e3o de Liskov)<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"474\" height=\"176\" src=\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/Liskov-substitution-principle.png\" alt=\"diagrama exemplificando o Liskov substitution principle\" class=\"wp-image-14535\" srcset=\"https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Liskov-substitution-principle.png 474w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Liskov-substitution-principle-150x56.png 150w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><figcaption class=\"wp-element-caption\">Imagem: <a href=\"https:\/\/overcoded.dev\/posts\/BC-9\" target=\"_blank\" rel=\"noreferrer noopener\">overcoded.dev<\/a><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/-AGQk3t1dlwR9AM0NgOOWDqUhSeX7hyq-Hg6mYqTvhJFdXTudgFF7bftt2uDbp7Y5xIOfFbrMxBj0Ll2Gg1QNrlsfU5FiltSXLKeSq7VKWbne3m4PbXAjsclgB9ifKvrbbzoJcdjuv6QzpPxUMams5-d3dfL0NLMKb6DSxsLEHZPKHNxZrwPYO5222o78j8j1qO5QqCN\" alt=\"diagrama exemplificando o Liskov substitution principle\"\/><figcaption class=\"wp-element-caption\">Imagem: <a href=\"https:\/\/overcoded.dev\/posts\/BC-9\" target=\"_blank\" rel=\"noreferrer noopener\">overcoded.dev<\/a><\/figcaption><\/figure>\n\n\n\n<p>Esse princ\u00edpio define que objetos de uma superclasse devem ser substitu\u00edveis por objetos de suas subclasses sem quebrar a aplica\u00e7\u00e3o. Isso requer que os objetos de suas subclasses se comportem da mesma maneira que os objetos de sua superclasse. Em outras palavras, os objetos dentro de um programa podem ser substitu\u00eddos por inst\u00e2ncias de seus tipos de subcategoria sem alterar a precis\u00e3o daquele programa espec\u00edfico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Interface segregation principle (princ\u00edpio da segrega\u00e7\u00e3o de interface)<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"870\" height=\"416\" src=\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/Interface-segregation-principle.png\" alt=\"diagrama exemplificando o Interface segregation principle (princ\u00edpio da segrega\u00e7\u00e3o de interface)\" class=\"wp-image-14536\" srcset=\"https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Interface-segregation-principle.png 870w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Interface-segregation-principle-768x367.png 768w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Interface-segregation-principle-515x246.png 515w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Interface-segregation-principle-150x72.png 150w\" sizes=\"(max-width: 870px) 100vw, 870px\" \/><figcaption class=\"wp-element-caption\">Imagem: <a href=\"https:\/\/medium.com\/@jim_ej\/the-interface-segregation-principle-its-confused-aa856de97d36\" target=\"_blank\" rel=\"noreferrer noopener\">medium.com\/@jim_ej<\/a><\/figcaption><\/figure>\n\n\n\n<p>Segundo o <strong>Princ\u00edpio da Segrega\u00e7\u00e3o de Interface<\/strong>, \u00e9 melhor evitar adicionar novas funcionalidades ou m\u00e9todos a uma interface existente. Em vez disso, \u00e9 recomend\u00e1vel incorporar uma nova interface e permitir que as classes implementem interfaces diferentes com base na necessidade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dependency inversion principle (princ\u00edpio de invers\u00e3o de depend\u00eancia)<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"716\" height=\"281\" src=\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/Dependency-inversion-principle.png\" alt=\"diagrama exemplificando o Dependency inversion principle (princ\u00edpio de invers\u00e3o de depend\u00eancia)\" class=\"wp-image-14537\" srcset=\"https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Dependency-inversion-principle.png 716w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Dependency-inversion-principle-515x202.png 515w, https:\/\/homolog.fluency.io\/br\/wp-content\/uploads\/sites\/3\/2023\/01\/Dependency-inversion-principle-150x59.png 150w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><figcaption class=\"wp-element-caption\">Imagem: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dependency_inversion_principle\" target=\"_blank\" rel=\"noreferrer noopener\">Wikipedia<\/a><\/figcaption><\/figure>\n\n\n\n<p>O <strong>Princ\u00edpio de Invers\u00e3o de Depend\u00eancia (DIP) <\/strong>afirma que m\u00f3dulos de alto n\u00edvel n\u00e3o devem depender dos m\u00f3dulos de baixo n\u00edvel; ambos devem depender de abstra\u00e7\u00f5es. Estas, por sua vez, n\u00e3o devem depender de detalhes e vice-versa.&nbsp;<\/p>\n\n\n\n<p>Ao <a href=\"https:\/\/fluency.io\/br\/blog\/portfolio-de-programador\/?utm_source=blog\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>programador ou desenvolver o software<\/strong><\/a>, \u00e9 comum implement\u00e1-lo de forma que cada m\u00f3dulo ou m\u00e9todo se refira especificamente aos seus colaboradores, que fazem o mesmo.\u00a0<\/p>\n\n\n\n<p>Entretanto, esse <strong>tipo de programa\u00e7\u00e3o<\/strong> normalmente n\u00e3o possui camadas suficientes de abstra\u00e7\u00e3o, o que resulta em um sistema fortemente acoplado, j\u00e1 que cada m\u00f3dulo faz refer\u00eancia direta aos m\u00f3dulos de n\u00edvel inferior.&nbsp;<\/p>\n\n\n\n<p>Nesse sentido, \u00e9 preciso utilizar um <strong>padr\u00e3o de design <\/strong>conhecido como <strong>\u201cpadr\u00e3o de invers\u00e3o de depend\u00eancia\u201d<\/strong>, resolvido pelo uso de inje\u00e7\u00e3o de depend\u00eancia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 DRY&nbsp;<\/strong><\/h2>\n\n\n\n<p>Formulado por Andy Hunt e Dave Thomas no livro <a href=\"https:\/\/www.amazon.com.br\/Pragmatic-Programmer-Journeyman-Master\/dp\/020161622X\" target=\"_blank\" rel=\"noreferrer noopener\">The Pragmatic Programmer<\/a>, <strong>Don\u2019t Repeat Yourself (DRY) <\/strong>\u00e9 um dos <strong>princ\u00edpios de programa\u00e7\u00e3o<\/strong> mais fundamentais entre todos.\u00a0<\/p>\n\n\n\n<p>Ele prega que todo programador deve reduzir ao m\u00e1ximo a<strong> repeti\u00e7\u00e3o de informa\u00e7\u00f5es<\/strong> ou m\u00e9todos, e com isso evitar redund\u00e2ncias.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Duplica\u00e7\u00e3o \u00e9 desperd\u00edcio<\/strong><\/h3>\n\n\n\n<p>Cada <strong>linha de c\u00f3digo<\/strong> que entra em um aplicativo, e \u00e9 mantida, se torna uma fonte potencial de<strong> bugs futuros<\/strong>. Isso porque, dentre outros fatores, a duplica\u00e7\u00e3o \u201cincha\u201d a base de c\u00f3digo desnecessariamente, resultando em mais oportunidades para bugs, al\u00e9m de adicionar <strong>complexidade acidental <\/strong>ao sistema.&nbsp;<\/p>\n\n\n\n<p>O <strong>programador<\/strong> que aprende a reconhecer a duplica\u00e7\u00e3o e entende como elimin\u00e1-la \u00e9 capaz de produzir um c\u00f3digo muito mais limpo. Sendo assim, \u00e9 recomend\u00e1vel, por exemplo, <strong>dividir o c\u00f3digo<\/strong> em segmentos menores para conseguir gerenci\u00e1-lo e utilizar um \u00fanico segmento em qualquer ponto, chamando-o sempre que necess\u00e1rio.<\/p>\n\n\n\n<p>O <strong>princ\u00edpio DRY <\/strong>garante que qualquer modifica\u00e7\u00e3o de um \u00fanico elemento de um sistema n\u00e3o requer uma mudan\u00e7a em outros elementos logicamente n\u00e3o relacionados. Al\u00e9m disso, elementos logicamente relacionados mudam de maneira previs\u00edvel e uniforme, o que os mant\u00e9m sincronizados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 KISS&nbsp;<\/strong><\/h2>\n\n\n\n<p>O princ\u00edpio <strong>KISS (Keep It Simple, Stupid)<\/strong> lembra que todo o <a rel=\"noreferrer noopener\" href=\"https:\/\/fluency.io\/br\/blog\/o-que-e-designops\/?utm_source=blog\" target=\"_blank\"><strong>design e implanta\u00e7\u00e3o de software<\/strong><\/a> deve prezar pela simplicidade \u2014\u00a0 seja no desenvolvimento de um site, aplicativo ou simplesmente ao projetar um <strong>bloco de c\u00f3digo<\/strong>.<\/p>\n\n\n\n<p>O <strong>KISS<\/strong> tamb\u00e9m afirma que n\u00e3o h\u00e1 valor em uma solu\u00e7\u00e3o ser \u201cinteligente\u201d, mas sim em ela ser facilmente compreens\u00edvel. Isso porque, muitas vezes, os <a rel=\"noreferrer noopener\" href=\"http:\/\/awari.com.br\/curso\/front-end-react\/?utm_source=blog&amp;utm_medium=post\" target=\"_blank\">desenvolvedores<\/a> se sentem tentados a escrever solu\u00e7\u00f5es \u201cinteligentes\u201d que utilizam recursos complexos. Nesse caso, uma solu\u00e7\u00e3o \u00e9 melhor quando se usa menos heran\u00e7a, menos polimorfismo, menos classes, etc.<\/p>\n\n\n\n<p>Mas isso n\u00e3o quer dizer que esses recursos n\u00e3o podem ser usados. Em vez disso, eles s\u00f3 devem ser empregados quando necess\u00e1rios ou quando houver alguma vantagem substancial. Como resultado, \u00e9 poss\u00edvel obter um c\u00f3digo-fonte f\u00e1cil de depurar, cuja manuten\u00e7\u00e3o futura por outro <a href=\"http:\/\/awari.com.br\/curso\/back-end-javascript\/?utm_source=blog&amp;utm_medium=post\" target=\"_blank\" rel=\"noreferrer noopener\">desenvolvedor<\/a> ser\u00e1 menos trabalhosa.<\/p>\n\n\n\n<p>Esse princ\u00edpio foi cunhado pelo engenheiro americano <a href=\"https:\/\/en.wikipedia.org\/wiki\/Kelly_Johnson_(engineer)\" target=\"_blank\" rel=\"noreferrer noopener\">Kelly Johnson <\/a>ao se referir \u00e0 exig\u00eancia de que uma aeronave militar deve ser repar\u00e1vel com um conjunto limitado de ferramentas em condi\u00e7\u00f5es de combate.<\/p>\n\n\n\n<p>No contexto de <a href=\"https:\/\/fluency.io\/br\/blog\/produtos-digitais\/?utm_source=blog\" target=\"_blank\" rel=\"noreferrer noopener\">desenvolvimento de produtos digitais<\/a>, o <strong>princ\u00edpio KISS<\/strong> tem um grande impacto no sucesso geral do produto. Algumas das vantagens da sua aplica\u00e7\u00e3o incluem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Otimiza\u00e7\u00e3o de tempo: <\/strong>os usu\u00e1rios n\u00e3o querem perder tempo. Eles esperam uma experi\u00eancia sem atrito com fluxos de usu\u00e1rio diretos e intuitivos, nomenclatura sem jarg\u00f5es e resultados r\u00e1pidos;<\/li>\n\n\n\n<li><strong>Simplifica\u00e7\u00e3o:<\/strong> uma estrutura de software mais simples torna os testes, incluindo testes automatizados, mais f\u00e1ceis e eficazes;<\/li>\n\n\n\n<li><strong>Baixa complexidade:<\/strong> a complexidade reduzida da base de c\u00f3digo facilita e agiliza a manuten\u00e7\u00e3o e a integra\u00e7\u00e3o de novos membros da equipe no meio do projeto.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 Yagni&nbsp;<\/strong><\/h2>\n\n\n\n<p>O <strong>YAGNI (You Aren&#8217;t Gonna Need It) <\/strong>\u00e9 outro princ\u00edpio muito adotado do <strong>desenvolvimento software <\/strong>que afirma que os recursos s\u00f3 devem ser adicionados quando necess\u00e1rios. Como parte da filosofia de <strong>programa\u00e7\u00e3o extrema (XP)<\/strong>, o YAGNI elimina o excesso e a inefici\u00eancia no desenvolvimento para facilitar o aumento desejado da frequ\u00eancia de lan\u00e7amentos.<\/p>\n\n\n\n<p>Trata-se de um dos princ\u00edpios mais conhecidos do XP, surgido do livro <a href=\"https:\/\/www.amazon.com.br\/Extreme-Programming-Installed-Ron-Jeffries\/dp\/0201708426\/ref=asc_df_0201708426\/?tag=googleshopp00-20&amp;linkCode=df0&amp;hvadid=379726160779&amp;hvpos=&amp;hvnetw=g&amp;hvrand=11579257359306534219&amp;hvpone=&amp;hvptwo=&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=9100439&amp;hvtargid=pla-528823197113&amp;psc=1\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Extreme Programming Installed<\/strong><\/a> , de autoria de Ronald Jeffries, Ann Anderson e Chet Henderson.<\/p>\n\n\n\n<p>Esse princ\u00edpio ajuda tanto desenvolvedores quanto programadores a evitar esfor\u00e7os desperdi\u00e7ados em recursos que s\u00e3o considerados necess\u00e1rios em algum momento.&nbsp;<\/p>\n\n\n\n<p>A ideia \u00e9 que essa suposi\u00e7\u00e3o muitas vezes acaba sendo incorreta. Mesmo que um recurso acabe sendo desejado, ainda pode acontecer que a implementa\u00e7\u00e3o n\u00e3o seja necess\u00e1ria.&nbsp;<\/p>\n\n\n\n<p>O argumento \u00e9 que os desenvolvedores n\u00e3o percam tempo criando elementos estranhos que podem n\u00e3o ser necess\u00e1rios e podem atrapalhar ou retardar o <strong>processo de desenvolvimento<\/strong>.<\/p>\n\n\n\n<p>Como o YAGNI ajuda a evitar gastar tempo com recursos que n\u00e3o podem ser usados, os <strong>recursos principais<\/strong> de um programa s\u00e3o melhor desenvolvidos e menos tempo total \u00e9 gasto em cada lan\u00e7amento.&nbsp;<\/p>\n\n\n\n<p>Muito parecido com o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Worse_is_better\" target=\"_blank\" rel=\"noreferrer noopener\">princ\u00edpio Worse is Better<\/a>, o YAGNI \u00e9 contra o desenvolvimento de recursos extras e ajuda a evitar o aumento de recursos.\u00a0<\/p>\n\n\n\n<p>Entre v\u00e1rias coisas, esse princ\u00edpio ajuda a otimizar todo o processo de desenvolvimento de software, incluindo a diminui\u00e7\u00e3o de custos. Isso ocorre devido a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Melhora no desempenho do desenvolvedor\/programador: <\/strong>a equipe se concentra em entregar os requisitos atuais de forma eficaz. Eles n\u00e3o gastam tempo e esfor\u00e7o em suposi\u00e7\u00f5es;<\/li>\n\n\n\n<li><strong>Base de c\u00f3digo mais flex\u00edvel:<\/strong> voc\u00ea n\u00e3o precisa encontrar maneiras de usar solu\u00e7\u00f5es abaixo do ideal que voc\u00ea j\u00e1 desenvolveu antes de ter a imagem completa.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quer se tornar um programador? Conhe\u00e7a a Awari!<\/strong><\/h2>\n\n\n\n<p>A Awari \u00e9 uma plataforma de ensino completa que conta com <strong>mentorias individuais<\/strong>, cursos com aulas ao vivo e suporte de carreira para voc\u00ea dar seu pr\u00f3ximo passo profissional.Conhe\u00e7a nossa <a href=\"https:\/\/fluency.io\/br\/blog\/trilha-de-programacao\/?utm_source=blog&amp;utm_medium=post\" target=\"_blank\" rel=\"noreferrer noopener\">Trilha de Programa\u00e7\u00e3o<\/a> e confira os nossos cursos de <strong>Front-end <\/strong>e<strong> Back-end<\/strong> com<strong> jornadapersonalizada<\/strong> e materiais complementares desenvolvidos por especialistas no mercado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 muitas vezes utilizando algoritmos, testes de unidade e an\u00e1lise de complexidade de espa\u00e7o-tempo.\u00a0 No entanto, h\u00e1 tamb\u00e9m um conjunto de princ\u00edpios, testados e comprovados, desenvolvidos para refinar a arte [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":[186],"meta":{"inline_featured_image":false,"footnotes":""},"categories":[229],"tags":[],"trilha":[],"class_list":["post-118042","post","type-post","status-publish","format-standard","hentry","category-skills","format-artigos"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo - Fluency.io Brasil<\/title>\n<meta name=\"description\" content=\"Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 m...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo - Fluency.io Brasil\" \/>\n<meta property=\"og:description\" content=\"Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 m...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/\" \/>\n<meta property=\"og:site_name\" content=\"Fluency.io Brasil\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-04T11:02:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-24T14:31:04+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"kaue\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/\",\"url\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/\",\"name\":\"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo - Fluency.io Brasil\",\"isPartOf\":{\"@id\":\"https:\/\/fluency.io\/br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png\",\"datePublished\":\"2023-01-04T11:02:00+00:00\",\"dateModified\":\"2023-07-24T14:31:04+00:00\",\"author\":{\"@id\":\"https:\/\/fluency.io\/br\/#\/schema\/person\/7b3b2b50ba17b7f2ad0cce0a40bfa00a\"},\"description\":\"Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 m...\",\"breadcrumb\":{\"@id\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#primaryimage\",\"url\":\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png\",\"contentUrl\":\"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/homolog.fluency.io\/br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fluency.io\/br\/#website\",\"url\":\"https:\/\/fluency.io\/br\/\",\"name\":\"Fluency.io Brasil\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fluency.io\/br\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/fluency.io\/br\/#\/schema\/person\/7b3b2b50ba17b7f2ad0cce0a40bfa00a\",\"name\":\"kaue\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/fluency.io\/br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bdd3958fa53019cfd8f789c0a49a730e7ba40a1d20cb42c9ced7646285842479?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bdd3958fa53019cfd8f789c0a49a730e7ba40a1d20cb42c9ced7646285842479?s=96&d=mm&r=g\",\"caption\":\"kaue\"},\"url\":\"https:\/\/homolog.fluency.io\/br\/author\/kaue\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo - Fluency.io Brasil","description":"Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 m...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/","og_locale":"pt_BR","og_type":"article","og_title":"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo - Fluency.io Brasil","og_description":"Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 m...","og_url":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/","og_site_name":"Fluency.io Brasil","article_published_time":"2023-01-04T11:02:00+00:00","article_modified_time":"2023-07-24T14:31:04+00:00","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"kaue","Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/","url":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/","name":"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo - Fluency.io Brasil","isPartOf":{"@id":"https:\/\/fluency.io\/br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#primaryimage"},"image":{"@id":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#primaryimage"},"thumbnailUrl":"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png","datePublished":"2023-01-04T11:02:00+00:00","dateModified":"2023-07-24T14:31:04+00:00","author":{"@id":"https:\/\/fluency.io\/br\/#\/schema\/person\/7b3b2b50ba17b7f2ad0cce0a40bfa00a"},"description":"Ser um bom programador vai muito al\u00e9m de programar. \u00c9 algo que exige que voc\u00ea seja capaz, sobretudo, de resolver problemas complexos de forma eficiente \u2014 m...","breadcrumb":{"@id":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#primaryimage","url":"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png","contentUrl":"https:\/\/fluency.io\/br\/blog\/wp-content\/uploads\/2023\/01\/O-que-e-Solid.png"},{"@type":"BreadcrumbList","@id":"https:\/\/homolog.fluency.io\/br\/blog\/solid-kiss-dry-yagni\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/homolog.fluency.io\/br\/"},{"@type":"ListItem","position":2,"name":"SOLID, KISS, DRY, YAGNI: Desvendando esses princ\u00edpios de c\u00f3digo"}]},{"@type":"WebSite","@id":"https:\/\/fluency.io\/br\/#website","url":"https:\/\/fluency.io\/br\/","name":"Fluency.io Brasil","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fluency.io\/br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/fluency.io\/br\/#\/schema\/person\/7b3b2b50ba17b7f2ad0cce0a40bfa00a","name":"kaue","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/fluency.io\/br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/bdd3958fa53019cfd8f789c0a49a730e7ba40a1d20cb42c9ced7646285842479?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bdd3958fa53019cfd8f789c0a49a730e7ba40a1d20cb42c9ced7646285842479?s=96&d=mm&r=g","caption":"kaue"},"url":"https:\/\/homolog.fluency.io\/br\/author\/kaue\/"}]}},"_links":{"self":[{"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/posts\/118042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/comments?post=118042"}],"version-history":[{"count":0,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/posts\/118042\/revisions"}],"wp:attachment":[{"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/media?parent=118042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/categories?post=118042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/tags?post=118042"},{"taxonomy":"format","embeddable":true,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/format?post=118042"},{"taxonomy":"trilha","embeddable":true,"href":"https:\/\/homolog.fluency.io\/br\/wp-json\/wp\/v2\/trilha?post=118042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}