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. =DORM
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)