DEV Community

Cover image for Archetype Spring Boot
Kleber Nunes
Kleber Nunes

Posted on

Archetype Spring Boot

Olá #devs, conheci o site recentemente através de um amigo, 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.
Bem recentemente estava conversando com meu amigo Pedro 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. =)
Bom, começando pela estruturas das pastas dentro do projeto eu gosto de organizá-las da seguinte maneira, ao menos as principais.

  • api
  • configuration
  • domain
    • bean
    • dto
    • enumerable
    • orm
  • exception
  • interception
    • implementation
  • repository
    • implementation
  • service
    • implementation

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.

  • API
    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.

  • Configuration
    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.

  • Domain
    Esse pacote é inclui em si alguns outros pacotes, vou explicar um de cada vez para ser mais didático.

  • Bean
    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.

  • DTO
    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.

  • Enumerable
    Aqui ficam os enums da aplicação, não tem nenhum segredo nisso. =D

  • ORM
    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.

  • Exception
    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.

  • Integration
    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.

  • Interception
    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.

  • Service
    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.

  • Repository
    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.

Agradeço a atenção de todos que leram até aqui.

Me sigam
Github: https://github.com/MrSpock182
LinkedIn: https://www.linkedin.com/in/kleber-nunes-699089ab/

Top comments (0)