<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thiago Henrique Domingues</title>
    <description>The latest articles on DEV Community by Thiago Henrique Domingues (@thenriquedb).</description>
    <link>https://dev.to/thenriquedb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F494538%2F944bb043-d746-483c-9184-4ee1554c1a61.jpeg</url>
      <title>DEV Community: Thiago Henrique Domingues</title>
      <link>https://dev.to/thenriquedb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thenriquedb"/>
    <language>en</language>
    <item>
      <title>Pare de ignorar as janelas quebradas do seu código! Veja por que pequenos descuidos viram grandes problemas</title>
      <dc:creator>Thiago Henrique Domingues</dc:creator>
      <pubDate>Thu, 03 Jul 2025 23:23:10 +0000</pubDate>
      <link>https://dev.to/thenriquedb/pare-de-ignorar-as-janelas-quebradas-do-seu-codigo-veja-por-que-pequenos-descuidos-viram-grandes-4eb5</link>
      <guid>https://dev.to/thenriquedb/pare-de-ignorar-as-janelas-quebradas-do-seu-codigo-veja-por-que-pequenos-descuidos-viram-grandes-4eb5</guid>
      <description>&lt;p&gt;Você conhece o paradoxo da janela quebrada? Esta é uma metáfora usada na criminologia que diz que, se uma janela de um edifício for quebrada e não receber reparo logo, a tendência é que as pessoas passem a vandalizar as demais janelas, até que todo o edifício esteja destruído. Apesar de a teoria ter nascido na criminologia, ela pode ser aplicada a várias áreas, inclusive o desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;Se você trabalha em um projeto com decisões de design ruins, a tendência é continuar replicando os mesmos erros. A cada novo commit, o sistema não muda muito individualmente, mas com o tempo, a tendência é que o design do código vai se desgastando cada vez mais até erodir completamente.&lt;/p&gt;

&lt;p&gt;Por isso, é importante policiar os detalhes e dedicar tempo e esforço para manter a alta qualidade do design de código. Isso inclui refatorações constantes, escrever uma boa documentação, escrever bons testes automatizados e mais. Eu entendo que, com a correria do dia a dia, nem sempre isso é possível, mas, como desenvolvedor, é o nosso dever de "consertar as janelas quebradas" do projeto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;Coding Horror. The Broken Window Theory. Disponível em: &lt;a href="https://blog.codinghorror.com/the-broken-window-theory/" rel="noopener noreferrer"&gt;https://blog.codinghorror.com/the-broken-window-theory/&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Mat Ryer. Broken Windows Theory: Why Code Quality and Simplistic Design Are Non-Negotiable. Medium, 2017. Disponível em: &lt;a href="https://medium.com/@matryer/broken-windows-theory-why-code-quality-and-simplistic-design-are-non-negotiable-e37f8ce23dab" rel="noopener noreferrer"&gt;https://medium.com/@matryer/broken-windows-theory-why-code-quality-and-simplistic-design-are-non-negotiable-e37f8ce23dab&lt;/a&gt;. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Problems details: A importância de mensagens de erro claras e estruturadas na sua API REST</title>
      <dc:creator>Thiago Henrique Domingues</dc:creator>
      <pubDate>Wed, 02 Jul 2025 12:51:17 +0000</pubDate>
      <link>https://dev.to/thenriquedb/problems-details-a-importancia-de-mensagens-de-erro-claras-e-estruturadas-na-sua-api-rest-177h</link>
      <guid>https://dev.to/thenriquedb/problems-details-a-importancia-de-mensagens-de-erro-claras-e-estruturadas-na-sua-api-rest-177h</guid>
      <description>&lt;p&gt;Se você já precisou integrar sua aplicação com APIs externas, com certeza enfrentou a dificuldade de lidar com diferentes formatos de erros. Ter mensagens de erro bem estruturadas é tão importante quanto ou até mais do que retornar respostas de sucesso bem definidas.&lt;/p&gt;

&lt;p&gt;É bastante comum cada projeto definir seu próprio padrão de retorno de erros. Em sistemas pequenos, isso pode funcionar bem, mas à medida que o número de integrações cresce, a complexidade no tratamento de exceções cresce junto. Imagine um projeto que precisa integrar com diversas APIs diferentes, e cada uma delas possui um padrão de erro diferente. Agora pense no tempo que os desenvolvedores vão gastar apenas para entender e tratar cada formato antes de resolver o problema real.&lt;/p&gt;

&lt;p&gt;Como forma de resolver esse problema, a Internet Engineering Task Force (IETF) propôs o padrão &lt;strong&gt;Problem Details&lt;/strong&gt; para retorno de erros em APIs. Ele define uma estrutura padronizada e consistente para respostas de erro, garantindo que os consumidores consigam entender e tratar falhas de forma mais simples e clara. Em vez de cada desenvolvedor ter que reinventar a roda, eles podem usar esse padrão para definir os detalhes de cada solicitação.&lt;/p&gt;

&lt;p&gt;A estrutura do objeto Problem Details encapsula informações de erro de uma forma que pode ser universalmente compreendida em diferentes sistemas e tecnologias.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt;: URI que identifica o tipo de problema;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;: Código HTTP;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;title&lt;/code&gt;: resumo legível do erro;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;detail&lt;/code&gt;: explicação detalhada;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;instance&lt;/code&gt;: URI específica do erro ocorrido (opcional);&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;extensions&lt;/code&gt;: qualquer campo que adiciona informações adicionais ou contexto para o cliente que está consumindo;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Segue um exemplo de um objeto resposta que contém a propriedade de extensão &lt;code&gt;errors&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://myapi.com/errors/invalid-input"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid input data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"One or more fields have invalid data."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"instance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"The email field must be a valid email address."&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"The password must be at least 8 characters long."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"The password must contain at least one number."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Problemas são inevitáveis em qualquer sistema, mas retornar erros bem estruturados pode facilitar a vida de quem está consumindo seu serviço mais fácil!&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Zuplo. &lt;em&gt;The Power of Problem Details&lt;/em&gt;. Disponível em: &lt;a href="https://zuplo.com/blog/2023/04/11/the-power-of-problem-details" rel="noopener noreferrer"&gt;https://zuplo.com/blog/2023/04/11/the-power-of-problem-details&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Swagger. &lt;em&gt;Problem Details RFC9457: Doing API Errors Well&lt;/em&gt;. Disponível em: &lt;a href="https://swagger.io/blog/problem-details-rfc9457-doing-api-errors-well/#references" rel="noopener noreferrer"&gt;https://swagger.io/blog/problem-details-rfc9457-doing-api-errors-well/#references&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IETF. &lt;em&gt;RFC 7807 - Problem Details for HTTP APIs&lt;/em&gt;. Disponível em: &lt;a href="https://datatracker.ietf.org/doc/html/rfc7807" rel="noopener noreferrer"&gt;https://datatracker.ietf.org/doc/html/rfc7807&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Sem clareza nos requisitos, nem o melhor código salva o projeto</title>
      <dc:creator>Thiago Henrique Domingues</dc:creator>
      <pubDate>Wed, 11 Jun 2025 15:08:54 +0000</pubDate>
      <link>https://dev.to/thenriquedb/sem-clareza-nos-requisitos-nem-o-melhor-codigo-salva-o-projeto-2jp5</link>
      <guid>https://dev.to/thenriquedb/sem-clareza-nos-requisitos-nem-o-melhor-codigo-salva-o-projeto-2jp5</guid>
      <description>&lt;p&gt;É muito comum, especialmente no início da carreira, focarmos exclusivamente na escrita de código e acabarmos negligenciando uma das etapas mais críticas de um projeto: entender o que realmente precisa ser construído.&lt;/p&gt;

&lt;p&gt;Não adianta nada ter um sistema com a melhor arquitetura, escrito na linguagem mais moderna, com alta cobertura de testes, se ele não atender às necessidades reais de seus usuários, de nada vale.&lt;/p&gt;

&lt;p&gt;A engenharia de requisitos existe justamente para isso, trazer clareza, alinhamento e previsibilidade ao desenvolvimento. Ignorar essa fase pode comprometer completamente o resultado final.&lt;/p&gt;

&lt;p&gt;Problemas na definição de requisitos têm um alto custo e podem gerar uma série de consequências, como retrabalho constante, entregas incompletas e até implementação de funcionalidades desnecessárias. Que no fim têm o risco de entregar um sistema que vai ser rejeitado pelos usuários, uma vez que não resolve seus problemas.&lt;/p&gt;

&lt;p&gt;Investir tempo em entender bem o problema antes de pensar na solução não é perda de tempo. Pelo contrário: é uma das formas mais eficazes de garantir que o projeto siga na direção certa desde o início!&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>requirement</category>
    </item>
    <item>
      <title>Brag Document: o hábito que pode transformar sua carreira</title>
      <dc:creator>Thiago Henrique Domingues</dc:creator>
      <pubDate>Fri, 30 May 2025 21:00:52 +0000</pubDate>
      <link>https://dev.to/thenriquedb/brag-document-o-habito-que-pode-transformar-sua-carreira-1eoa</link>
      <guid>https://dev.to/thenriquedb/brag-document-o-habito-que-pode-transformar-sua-carreira-1eoa</guid>
      <description>&lt;p&gt;A gente cresce ouvindo que, se fizermos um bom trabalho as pessoas vão perceber e recompensar por isso. Mas a real é que o ambiente corporativo é um pouco mais complexo que isso. &lt;/p&gt;

&lt;p&gt;Quantas vezes você já entregou algo incrível, ajudou o time, resolveu um problema... e nada aconteceu? Muitas vezes, nossas entregas acabam passando despercebidas por nossa liderança, não por maldade, mas porque todo mundo está ocupado demais com suas próprias entregas. &lt;/p&gt;

&lt;p&gt;A melhor forma de evitar que seu trabalho passe despercebido é mantendo um registro das suas contribuições e conquistas. Esse é justamente o propósito do &lt;strong&gt;Brag Document&lt;/strong&gt;, também conhecido como &lt;strong&gt;Hype Document&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O termo foi popularizado pela engenheira Julia Evans no artigo "&lt;a href="http://jvns.ca/blog/brag-documents/" rel="noopener noreferrer"&gt;Get your work recognized: write a brag document&lt;/a&gt;"&lt;br&gt;
publicado em seu blog. Em tradução livre, “Brag Document” significa algo como “documento de ostentação”. Mas, apesar do nome, a ideia não é se gabar, e sim garantir que o seu trabalho seja reconhecido. Afinal, se nem você acompanha o impacto do que faz, como esperar que os outros percebam?&lt;/p&gt;

&lt;p&gt;À primeira vista, o nome pode soar estranho, mas a ideia por trás do Brag Document é bastante simples: ele nada mais é do que um registro das atividades e conquistas das quais você se orgulha. &lt;/p&gt;

&lt;p&gt;Você pode fazer isso em um documento de texto, uma planilha ou até mesmo um bloco de notas, basicamente o formato não importa. O essencial é manter esse hábito com regularidade. Tenta atualizar semanalmente ou, no máximo a cada quinze dias. Assim, você registra tudo enquanto ainda está fresco na memória e não corre o risco de esquecer nada importante. &lt;/p&gt;

&lt;p&gt;No fim das contas, o Brag Document não é sobre se gabar. É sobre construir uma narrativa clara do seu impacto, e não deixar que suas contribuições se percam no corre do dia a dia. Seu crescimento profissional também depende disso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jvns.ca/blog/brag-documents/" rel="noopener noreferrer"&gt;Get your work recognized: write a brag document&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eltonminetto.dev/post/2022-04-14-brag-document/" rel="noopener noreferrer"&gt;Dica de carreira: crie um brag document
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>carreira</category>
    </item>
    <item>
      <title>Entendendo conceitos da Arquitetura limpa</title>
      <dc:creator>Thiago Henrique Domingues</dc:creator>
      <pubDate>Wed, 11 Oct 2023 02:14:27 +0000</pubDate>
      <link>https://dev.to/thenriquedb/entendendo-conceitos-da-arquitetura-limpa-d7</link>
      <guid>https://dev.to/thenriquedb/entendendo-conceitos-da-arquitetura-limpa-d7</guid>
      <description>&lt;h2&gt;
  
  
  Tabela de Conteúdo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prólogo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Camadas&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Entidades&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Casos de uso&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adaptadores de interface&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Framework e drivers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Referências&lt;/strong&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prólogo
&lt;/h2&gt;

&lt;p&gt;Já faz algum tempo que venho me aventurando estudando um pouco mais sobre arquitetura e design de software, e recentemente acabei me esbarrando no conceito de Arquitetura Limpa.&lt;/p&gt;

&lt;p&gt;Esse padrão foi proposto por Robert C. Martin (Uncle Bob) em uma postagem em seu blog em agosto de 2012. Este padrão tem como objetivo separar o software em camadas, onde quanto mais interno, maior é o nível do software.&lt;/p&gt;

&lt;p&gt;Essa arquitetura tem como objetivo produzir sistemas que são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Independência de frameworks&lt;/strong&gt;: a arquitetura não depende da existência de nenhuma biblioteca externa. Isso permite que você use os frameworks como ferramentas em de vez de ser obrigado a adaptar seu sistema a ele;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testabilidade&lt;/strong&gt;: as regras de negócio podem ser testadas sem a UI, banco de dados ou qualquer outro elemento externo;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Independência de UI&lt;/strong&gt;: A UI pode mudar sem afetar o resto do sistema. Uma UI web pode ser substituída, por uma de console por exemplo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Independência de banco de dados&lt;/strong&gt;: Você pode trocar o MySql por Mongo por exemplo sem afetar as regras de negócios;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Independência de fatores externos&lt;/strong&gt;: Suas regras de negócios não sabem nada sobre as interfaces do mundo externo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Camadas
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdl5tsmvm4coswpzh1z6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdl5tsmvm4coswpzh1z6.png" alt="Image description" width="720" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O diagrama acima é uma representação da arquitetura limpa criado pelo próprio autor. Por padrão o autor divide o sistema em quatro camadas: &lt;strong&gt;Entidades&lt;/strong&gt;, &lt;strong&gt;Casos de uso&lt;/strong&gt;, &lt;strong&gt;Adaptadores de interface&lt;/strong&gt; e &lt;strong&gt;Frameworks&lt;/strong&gt; e &lt;strong&gt;drivers&lt;/strong&gt;. Quanto mais interno, maior é o nível do software. Os círculos mais externos são mecanismos. Os círculos mais internos são políticas.&lt;/p&gt;

&lt;p&gt;A principal regra desse padrão é a Regra da Dependência. Essa regra diz que as dependências do código só podem apontar para dentro. Um círculo interno não pode saber qualquer coisa sobre algo em um círculo externo.&lt;/p&gt;

&lt;p&gt;Geralmente resolvemos essa aparente contradição usando o &lt;a href="https://en.wikipedia.org/wiki/Dependency_inversion_principle" rel="noopener noreferrer"&gt;Princípio de Inversão de Dependência&lt;/a&gt;. Em uma linguagem orientada a objetos como o Java, por exemplo.Podemos utilizar interfaces e relacionamentos de herança de modo que as dependências do código-fonte se oponham ao fluxo de controle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entidades
&lt;/h3&gt;

&lt;p&gt;No círculo mais interno temos as entidades. As entidades são responsáveis por manter toda a regra de negócio da aplicação. Mas afinal, o que é uma regra de negócio? Robert Martin define regras de negócio como:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Regras de negócio são regras e procedimentos que geram ou economizam dinheiro para a empresa. [..] Podem gerar ou economizar dinheiro mesmo se forem executadas manualmente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vale destacar o último trecho da explicação no qual o autor menciona que uma regra de negócio pode gerar ou economizar dinheiro mesmo se forem executadas de forma manual. Por exemplo, um banco cobrar N% de juros por um empréstimo é uma regra de negócio, visto que não importa se essa informação é calculada pelo computador ou por uma caixa com um ábaco. Chamaremos essas regras de &lt;strong&gt;Regras Cruciais de Negócio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As regras de negócio normalmente exigem alguns dados para trabalhar. Por exemplo, continuando com o exemplo anterior, para realizar um empréstimo precisamos de um &lt;strong&gt;saldo&lt;/strong&gt;, uma &lt;strong&gt;taxa de juros&lt;/strong&gt; e um &lt;strong&gt;cronograma de pagamentos&lt;/strong&gt;. Chamaremos essas informações de** Dados Cruciais de Negócio**. Esses dados existiriam mesmo se o sistema não fosse automatizado.&lt;/p&gt;

&lt;p&gt;Juntando as **Regras Cruciais de Negócio **e os **Dados Cruciais de Negócio **conseguimos construir a nossa entidade Empréstimo. Uma entidade é um objeto contido em nosso sistema. Ela incorpora um pequeno conjunto de regras cruciais de negócio que operam em cima dos dados cruciais de negócios.&lt;/p&gt;

&lt;p&gt;Quando criamos esse tipo de classe, estamos reunindo o software que implementa um conceito crucial para o negócio onde estamos separando esse software de todas as outras questões do sistema automatizado que estamos construindo. A entidade é puro negócio e nada mais,&lt;/p&gt;

&lt;p&gt;Importante ressaltar que não é necessário uma linguagem orientada a objetos para se implementar uma entidade. Basta que você reúna os dados e as regras cruciais do negócio em um módulo único e separado do restante do sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Casos de uso
&lt;/h3&gt;

&lt;p&gt;Ao contrário das regras de negócio que são puras e podem ser executadas manualmente, os casos de uso não seriam executadas em um ambiente manual visto que só fazem sentido para sistemas automatizados. Segundo Robert Martin um caso de uso é:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Caso de uso é uma descrição da maneira como um sistema automatizado é usado. Ele especifica a entrada e a a ser fornecida pelo usuário, a saída retornada e os passos de processamento envolvidos na produção dessa saída.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Casos de usos são nada mais nada menos que objetos com métodos que implementam as regras de negócio da aplicação, além de um conjunto de dados que serão manipulados e as referência para as Entidades com as quais interage. Em suma, os casos de uso especifica como e quando as Regras Cruciais de Negócios dentro das entidades serão invocadas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsvczerrcarp1smddkgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsvczerrcarp1smddkgk.png" alt="my alt text" width="516" height="427"&gt;&lt;/a&gt;&lt;br&gt;Exemplo de casos de uso
  &lt;/p&gt;

&lt;p&gt;A figura acima representa um exemplo de caso de uso de uma aplicação usada por bancários para criar um novo empréstimo. Por determinação do banco, para oferecer um empréstimo para um cliente é necessário validar seus dados além que sua pontuação de crédito deve ser superior a 500 pontos. Com isso o banco pode determinar que o sistema não proceda com a tela de estimativa de pagamento até que a tela de informações pessoais seja preenchida e verificada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adaptadores de interface
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqelqyomszrxyezcq2jd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqelqyomszrxyezcq2jd.png" alt="my alt text" width="224" height="225"&gt;&lt;/a&gt;&lt;br&gt;Adaptadores de interface funcionam como adaptadores de tomadas&lt;br&gt;

  &lt;/p&gt;

&lt;p&gt;Esta camada é composta por um conjunto de adaptadores de interface que convertem dados no formato que é mais conveniente para os casos de uso e entidades, para o formato mais conveniente para algum agente externo como a base de dados ou a web.&lt;/p&gt;

&lt;h3&gt;
  
  
  Framework e drivers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec16v4gn3t1swqe579ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec16v4gn3t1swqe579ey.png" alt="my alt text" width="686" height="450"&gt;&lt;/a&gt;&lt;br&gt;Frameworks web estão localizados nesta camada&lt;br&gt;

  &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Ao separar o software em camadas e obedecer a regra da dependência a aplicação criada será altamente testável e de fácil manutenção, visto que quando uma das partes externas se tornar obsoleta, como a base de dados é substituir por outro atualizado com o mínimo de esforço.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blog Clean Coder&lt;/strong&gt;
&lt;a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html" rel="noopener noreferrer"&gt;https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Livro Arquitetura limpa: O guia do artesão para estrutura e design de software&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
