Service Layer Pattern
Data | Versão | Descrição | Autor |
---|---|---|---|
01/04/2021 | 1.0 | Criação do documento | Lucas Lopes |
01/04/2021 | 2.0 | Adição dos conceitos e exemplos aplicados ao projeto | Lucas Lopes |
09/04/2021 | 3.0 | Adição dos links para os códigos | Lucas Lopes |
## Introdução |
O padrão de serviço é um padrão relativamente antigo que era muito popular com o Java EE. Martin Fowler o descreveu em 2004 em seu blog . O objetivo deste padrão é melhorar a modularidade da aplicação removendo a dependência entre o cliente e a implementação de uma camada de serviços . Com as camadas de serviços, podemos desacoplar componentes de software e melhorar a capacidade de manutenção do código.
O fluxo de service funciona da seguite forma
A camada de serviço deve:
Conter lógica da regra de negócios
Aproveitar a camada de acesso a dados para interagir com o banco de dados
A camada de serviço não deve:
Fazer requisições diretas
Lidar com a resposta aos clientes
Fornece qualquer coisa relacionada à camada de transporte HTTP; códigos de status, cabeçalhos, etc.
Interagir diretamente com o banco de dados
Aplicação no projeto:
No projeto foi abstraido as validações e as regras de négocio do controller de cadastro de usuário. Foi criando um serviço externo para o controller, causando assim maior legibilidade e manutenção do código. No exemplo abaixo, temos a abstração das validações e das regras de négocio
Abstraindo a validação do controller
Abstraindo nas regras de négocios do controller
Resultado final
O padrão em resumo consiste em abstrair as regras de négocios e validações afim de facilitar a manuteção,legilidade e testabilidade do código. É recomendado usar em 2 principais situações: Código muito extenso ou quando o código contém muitas validações.
Com o controller acima, podemos concluir que ficou mais limpo e organizado. Pois, toda a validação e as regras de négocios foram separados em uma camada de serviços. Antes, o controller tinha toda as validações de campos, de buscar no banco de dados se já existia um usuário com o mesmo email por exemplo. Portanto, ao aplicarmos o service pattern, o controller apenas recebe os dados do cliente e manda para a camada de serviços. A camada de serviços faz todas as verifições e validações e devolve ao controller o usuário criado. O controller, por fim devolve ao cliente as informações do usuário criado.
Referências
Node Service-oriented Architecture. Disponível em:https://www.codementor.io/@evanbechtol/node-service-oriented-architecture-12vjt9zs9i. Último acesso em: 01/04/2021.
Service Layer. Disponível em: https://java-design-patterns.com/patterns/service-layer/. Último acesso em: 01/04/2021.