Camadas da aplicação

No exemplo prático deste capítulo criaremos um sistema CRUD com PHP dividindo a aplicação em camadas, para tornar o código mais organizado e consequentemente mais fácil de manter a longo prazo. Aplicaremos os conceitos de Controller, DAO e View na arquitetura da nossa aplicação. Porém, antes de implementar, vamos explicar o que são e como se comunicam do momento em que a requisição chega até o retorno dos dados ao usuário.

Controller

Camada de controle, que recebe os dados da view (HTML), processa, faz validações de dados e os retorna para o DAO. Funciona como a porta de entrada das requisições. Recebe dados da View, valida ou transforma essa informação e decide o que fazer em seguida, por exemplo: criar registros ou buscar dados. Em seguida, faz chamadas ao DAO sempre que precisar manipular o banco de dados. Quando obtém uma resposta, o Controller retorna para a View os dados que deverão ser exibidos. O controller jamais deve acessar o banco de dados diretamente ou conter lógica de apresentação.

DAO - Data Access Object

Centraliza as operações de banco de dados, executando consultas SQL de criação, leitura, atualização e exclusão, realizadas por métodos específicos (ex.: createUser, getUserById, updateUser, deleteUser) que o Controller chama. Assim, se a lógica de conexão com o banco mudar (ex.: de MySQL para PostgreSQL), é necessário alterar apenas o DAO, sem afetar a camada de controle.

View

Representa a parte visual da aplicação, que é exibida no navegador. Responsável pela lógica de apresentação, receber os inputs do usuário em formulários e/ou fazer o display de dados processados nas outras camadas em páginas, listas, mensagens de erro ou sucesso. Esse fluxo de dados para a view é gerenciado pelo controller, A View em hipótese nenhuma pode ter acesso direto à camada de acesso a dados (DAO) ou aos dados em si.

exemplo - fluxo de comunicação entre as camadas:

  1. Um usuário interage com a View (envia um formulário).
  2. o navegador (client) envia uma requisição HTTP ao servidor (header: POST, body: dados inseridos pelo usuário).
  3. O Controller recebe a requisição, valida os dados e chama o metódo da classe DAO.
  4. O DAO acessa o banco, retorna o resultado ao Controller.
  5. O Controller pepara uma resposta HTTP para o navegador, contendo o status code, header e o corpo da requisição (um HTML ou Json)
  6. O navegador interpreta o código de status e os cabeçalhos e renderiza o conteúdo do corpo (HTML, JSON, XML, etc.) para o usuário.

Desse modo cada camada tem uma responsabilidade bem definida, o que torna o sistema mais modular e escalável.