# Padrão camadas (controller, serviço, Acesso a dados)

Organizando a aplicação em camadas com responsabilidades definidas (uma forma de reestruturar o sistema), deixando o mesmo em um estado de fácil manutenção.

* Consiste em organizar os **COMPONENTES** do sistema em partes denominadas camadas;

Componentes entenda por SERVICE, ProductService, ClientService, objetos que fazem funções/operações. Entidades como Produto, Pedido não entram nesse quesito.

* Cada camada possui uma responsabilidade específica;

Na hora de realizar alguma manutenção, trocar qualquer coisa já sabemos onde aquilo estará pois fizemos a devidade separação das camadas;

* Componentes de uma camada só podem depender de componentes da mesma camada, ou da camada mais abaixo, veja:

<figure><img src="https://2024407363-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FttQq8IHJbWesBF8zvIzF%2Fuploads%2FgEbcXeNl1i2Vg8eLZ0hC%2Fimage.png?alt=media&#x26;token=585a0e7e-94e7-4004-a70c-e35a6c387984" alt=""><figcaption></figcaption></figure>

Controladores conversam com a camada de Service através de DTO.

Por sua vez, camada de Service conversa com a camada de acesso a dados através de Entidades (Product, Category, User).

Portanto, resumindo a imagem:

1. Na camada de acesso a dados as entidades estarão devidamente mapeadas para conversar com a camada de Service.
2. Para a camada de serviço conversar com a de Controle, as entidades mapeadas serão convertidas em DTO.

TRANSAÇÃO

Tudo que for transação, ou seja, acesso a banco de dados sera resolvido na camada de serviço com acesso a dados.
