Aula 51 - O Padrão de Arquitetura DAO (Data Access Object)

À medida que uma aplicação comercial cresce em complexidade, misturar comandos SQL, abertura de conexões e manipulação de leitores diretamente no código dos eventos de botões da interface gráfica (Form1.cs) torna o sistema um "código espaguete": impossível de manter, testar ou reutilizar.

Para resolver esse problema estrutural e garantir uma arquitetura limpa, a engenharia de software utiliza o Padrão de Projeto DAO (Data Access Object). O padrão DAO advoga a Separação de Responsabilidades (Separation of Concerns):
  • A camada de Interface Gráfica (View) trata apenas da interação visual com o usuário.
  • A camada de Negócios (Model/Domain) contém apenas as classes de dados e regras do negócio (Produto, ContaPagar).
  • A camada de Acesso a Dados (DAO) contém todas as instruções SQL, abertura e fechamento de conexões e mapeamento de dados.
Cada entidade principal do sistema possui sua própria classe DAO (ex: ProdutoDAO, ContaPagarDAO, FornecedorDAO). A classe DAO centraliza todas as operações de persistência daquela entidade específica.
Para maximizar a flexibilidade e permitir o uso de polimorfismo, é uma excelente prática definir primeiro uma Interface DAO que especifica o contrato das operações de dados:
// Contrato de acesso a dados para a entidade Produto
public interface IProdutoDAO {
    void Salvar(Produto produto);
    void Atualizar(Produto produto);
    void Excluir(int id);
    Produto BuscarPorId(int id);
    List<Produto> ListarTodos();
}
A classe concreta (ProdutoDAO) implementa essa interface, contendo todo o código ADO.NET/JDBC necessário para realizar as operações na tabela relacional:

public class ProdutoDAO : IProdutoDAO {
    private string _stringConexao;

    public ProdutoDAO(string stringConexao) {
        _stringConexao = stringConexao;
    }

    public void Salvar(Produto produto) {
        // Código ADO.NET limpo e isolado para fazer o INSERT no banco
    }
    // Implementação dos demais métodos do CRUD...
}
A adoção do padrão DAO traz benefícios arquiteturais imensos: desacoplamento de código, facilidade de manutenção (se o SGBD mudar, altera-se apenas a classe DAO, sem mexer nas telas) e viabilização de Testes Unitários automatizados.

Comentários

Postagens mais visitadas deste blog

Aula 42 - Linguagem SQL: Comandos DDL (CREATE, ALTER, DROP)

Aula 44 - Linguagem SQL: Consultas com SELECT e Cláusulas de Filtro

Aula 47 - Conectividade em Java com JDBC – DriverManager e Connection