Arquitetura em Três Camadas
Isso é feito para separar lógicas específicas em diferentes classes/pacotes, ao invés de escrever tudo em uma única classe.
A ordem em que uma requisição é processada é Controller
→ Service
→ Repository
. Após isso, a resposta é retornada na ordem inversa: Repository
-> Service
-> Controller
. Iniciaremos a implementação pela camada Repository
.
Nível Repository
Esta é a camada mais baixa, onde recebemos dados processados da camada Service
e armazenamos no banco de dados.
Essas classes são marcadas com a anotação @Repository
para serem adicionadas ao contexto do Spring.
Main.java
1234@Repository public class RepositoryLevel { // connect DB }
Exemplo de Uso do Repositório
Nível de Serviço
É aqui que ocorre a lógica central da aplicação. Nos serviços, processamos ou modificamos dados antes de repassá-los para a camada de repositório.
Para serviços, utilizamos a anotação @Service
, que declara a classe como um service
que contém a lógica de negócio.
Main.java
1234567@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }
Exemplo de Uso do Serviço
Nível do Controller
Esta camada gerencia a interação inicial entre o cliente e o servidor. Todas as requisições enviadas pelo cliente chegam aqui, sendo responsável por receber os dados fornecidos pelo cliente.
Processa as requisições HTTP recebidas e retorna as respostas HTTP. Os controllers atuam como uma "ponte" entre o cliente e a lógica de negócio.
Neste nível, existem duas anotações utilizadas para designar uma classe como controller:
-
@RestController
: Declara uma classe como um REST controller, que gerencia requisições HTTP e retorna dados em formato JSON; -
@Controller
: Declara uma classe como um MVC controller, que gerencia requisições e retorna views (por exemplo, HTML).
Main.java
12345678@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }
A anotação @GetMapping
especifica a URL para uma determinada requisição. Isso significa que adicionamos o caminho especificado /root
ao domínio e, em retorno, recebemos a página correspondente.
Exemplo de Uso do Controller
A Dependência do Thymeleaf no Vídeo
Aqui está o link para a dependência Thymeleaf no repositório Maven.
Mas o que acontece se você não seguir essa abordagem?
Bem, tecnicamente, nada. Mesmo que toda a lógica de negócio seja escrita no controller, conectando ao banco de dados e retornando a resposta ao cliente do mesmo local, tudo funcionará da mesma forma.
No entanto, é improvável que você se lembre do que escreveu ali após algumas semanas, pois toda a lógica da aplicação estará em um único lugar, o que é extremamente inconveniente.
Resumo
A arquitetura em três camadas proporciona uma separação clara de responsabilidades entre as camadas de controllers
, services
e repositories
, tornando o processo de desenvolvimento mais organizado e fácil de manter.
Cada camada concentra-se em sua tarefa específica, o que simplifica tanto o fluxo de trabalho quanto o gerenciamento do projeto.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.45
Arquitetura em Três Camadas
Deslize para mostrar o menu
Isso é feito para separar lógicas específicas em diferentes classes/pacotes, ao invés de escrever tudo em uma única classe.
A ordem em que uma requisição é processada é Controller
→ Service
→ Repository
. Após isso, a resposta é retornada na ordem inversa: Repository
-> Service
-> Controller
. Iniciaremos a implementação pela camada Repository
.
Nível Repository
Esta é a camada mais baixa, onde recebemos dados processados da camada Service
e armazenamos no banco de dados.
Essas classes são marcadas com a anotação @Repository
para serem adicionadas ao contexto do Spring.
Main.java
1234@Repository public class RepositoryLevel { // connect DB }
Exemplo de Uso do Repositório
Nível de Serviço
É aqui que ocorre a lógica central da aplicação. Nos serviços, processamos ou modificamos dados antes de repassá-los para a camada de repositório.
Para serviços, utilizamos a anotação @Service
, que declara a classe como um service
que contém a lógica de negócio.
Main.java
1234567@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }
Exemplo de Uso do Serviço
Nível do Controller
Esta camada gerencia a interação inicial entre o cliente e o servidor. Todas as requisições enviadas pelo cliente chegam aqui, sendo responsável por receber os dados fornecidos pelo cliente.
Processa as requisições HTTP recebidas e retorna as respostas HTTP. Os controllers atuam como uma "ponte" entre o cliente e a lógica de negócio.
Neste nível, existem duas anotações utilizadas para designar uma classe como controller:
-
@RestController
: Declara uma classe como um REST controller, que gerencia requisições HTTP e retorna dados em formato JSON; -
@Controller
: Declara uma classe como um MVC controller, que gerencia requisições e retorna views (por exemplo, HTML).
Main.java
12345678@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }
A anotação @GetMapping
especifica a URL para uma determinada requisição. Isso significa que adicionamos o caminho especificado /root
ao domínio e, em retorno, recebemos a página correspondente.
Exemplo de Uso do Controller
A Dependência do Thymeleaf no Vídeo
Aqui está o link para a dependência Thymeleaf no repositório Maven.
Mas o que acontece se você não seguir essa abordagem?
Bem, tecnicamente, nada. Mesmo que toda a lógica de negócio seja escrita no controller, conectando ao banco de dados e retornando a resposta ao cliente do mesmo local, tudo funcionará da mesma forma.
No entanto, é improvável que você se lembre do que escreveu ali após algumas semanas, pois toda a lógica da aplicação estará em um único lugar, o que é extremamente inconveniente.
Resumo
A arquitetura em três camadas proporciona uma separação clara de responsabilidades entre as camadas de controllers
, services
e repositories
, tornando o processo de desenvolvimento mais organizado e fácil de manter.
Cada camada concentra-se em sua tarefa específica, o que simplifica tanto o fluxo de trabalho quanto o gerenciamento do projeto.
Obrigado pelo seu feedback!