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/
暂无评论内容