<?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: Kleber Nunes</title>
    <description>The latest articles on DEV Community by Kleber Nunes (@mrspock182).</description>
    <link>https://dev.to/mrspock182</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%2F334671%2Fd96ede89-7cde-4573-9f15-a8b27eb73456.jpg</url>
      <title>DEV Community: Kleber Nunes</title>
      <link>https://dev.to/mrspock182</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrspock182"/>
    <language>en</language>
    <item>
      <title>Archetype Spring Boot</title>
      <dc:creator>Kleber Nunes</dc:creator>
      <pubDate>Wed, 19 Feb 2020 01:41:13 +0000</pubDate>
      <link>https://dev.to/mrspock182/archetype-spring-boot-31pk</link>
      <guid>https://dev.to/mrspock182/archetype-spring-boot-31pk</guid>
      <description>&lt;p&gt;Olá #devs, conheci o site recentemente através de um &lt;a href="https://github.com/viniciuslcpereira97"&gt;amigo&lt;/a&gt;, e estou escrevendo aqui um pequeno post sobre archetype no spring boot, esse é um tema pessoal pois existem várias formas e dentre as que existem geralmente cada #dev a adapta as suas necessidades.&lt;br&gt;
Bem recentemente estava conversando com meu amigo &lt;a href="https://github.com/pedrovsn"&gt;Pedro&lt;/a&gt; hoje na HDI Seguros (esse inicio parecendo música do Raul Seixas =D) sobre archetypes do spring, e mostrei a que estava utilizando para ele e achei que renderia um post legal. Vale lembrar que essa é apenas minha interpretação, talvez algo que você veja aqui faça sentido para você, ou talvez algo que esteja aqui você possa colocar nos comentários e faça sentido para mim, então deixe seu comentário. =)&lt;br&gt;
Bom, começando pela estruturas das pastas dentro do projeto eu gosto de organizá-las da seguinte maneira, ao menos as principais. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;api&lt;/li&gt;
&lt;li&gt;configuration&lt;/li&gt;
&lt;li&gt;domain

&lt;ul&gt;
&lt;li&gt;bean&lt;/li&gt;
&lt;li&gt;dto&lt;/li&gt;
&lt;li&gt;enumerable&lt;/li&gt;
&lt;li&gt;orm&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;exception&lt;/li&gt;
&lt;li&gt;interception

&lt;ul&gt;
&lt;li&gt;implementation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;repository

&lt;ul&gt;
&lt;li&gt;implementation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;service

&lt;ul&gt;
&lt;li&gt;implementation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algum dos pacotes só de olhar já pode entender o que são mais gostaria de explicar o porque da presença de cada uma delas na aplicação.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;API&lt;br&gt;
Essa é bem simples de explicar, sendo um serviço a aplicação precisa expor algo para alguém, então nesse pacote criamos as classes que serão expostas a quer for consumir o serviço.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configuration&lt;br&gt;
Classes que precisamos anotar como configuration ficam nesse pacote, tais como os beans do spring, configurações de dependências como Rabbit, Kafka e etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Domain&lt;br&gt;
Esse pacote é inclui em si alguns outros pacotes, vou explicar um de cada vez para ser mais didático. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bean&lt;br&gt;
A pasta bean existe não para colocar as beans do spring, mas as beans do proprio java, classes que podem sofrer maiores alterações sem impactar nenhum contexto externo, como chama a API ou um banco de dados por exemplo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DTO&lt;br&gt;
Esse pacote é para classes que sua mudança causam muito impactos em contexto externo, então sua mudança tem de ser muito bem planejada e devidamente avisada, tais como payload de request e response do serviço.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enumerable&lt;br&gt;
Aqui ficam os enums da aplicação, não tem nenhum segredo nisso. =D&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ORM&lt;br&gt;
Esse pacote é para classes que tem comunicação direta com o banco de dados, nessas classes se encontram as anotações do Spring Data, esse pacote também deve ter um certa cautela na sua mudança.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception&lt;br&gt;
Aqui eu coloco as classes de exceção da aplicação, geralmente utilizo as próprias exceções dos status code para pode interceptar os erros pelos status code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration&lt;br&gt;
Aqui, caso o serviço tenha de usar outro serviço aqui colocamos as classes que vão realizar requisições a outros serviços.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interception&lt;br&gt;
Esse pacote é para interceptar todas as exceções da aplicação com um RestControllerAdvice, o real proposito é para que toda e qualquer exceção que aconteça na aplicação seja devolvida com seu devido status code, além de centralizar em um único lugar todas as exceções.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Service&lt;br&gt;
Essa parte é para regras de negócio do serviço, centralizamos aqui tudo que é importante para nossa aplicação funcionar, é muito importante lembrar que todos os pacotes devem ser totalmente desacoplados, lutamos sempre para que um pacote não dependa do outro, e isso da o gancho para falarmos da repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repository&lt;br&gt;
Nesse pacote colocamos nossas conexões ao banco de dados, vale lembrar que é muito importante utilizamos interfaces para inversão de dependência entre nossos contextos internos e externos, em um próximo post vamos falar mais sobre esse assunto pois é muito interessante também.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agradeço a atenção de todos que leram até aqui.&lt;/p&gt;

&lt;p&gt;Me sigam&lt;br&gt;
Github: &lt;a href="https://github.com/MrSpock182"&gt;https://github.com/MrSpock182&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/kleber-nunes-699089ab/"&gt;https://www.linkedin.com/in/kleber-nunes-699089ab/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>java</category>
    </item>
  </channel>
</rss>
