Ir para o conteúdo

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

  • 1 - Os controladores recebem solicitações de clientes de entrada e aproveitam os serviços.
  • 2 - Os serviços contêm toda a lógica de negócios e também podem fazer chamadas para a camada de acesso a dados.
  • 3 - A camada de acesso a dados interage com o banco de dados realizando consultas.
  • 4 - Os resultados são repassados ​​para a camada de serviço.
  • 5 - A camada de serviço pode então devolver tudo ao controlador.
  • 6 - O controlador pode então responder ao cliente!.
  • 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

    Código

    carbon (3)

    Abstraindo nas regras de négocios do controller

    Código

    carbon (4)

    Resultado final

    Código

    carbon (6)

    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.