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 ( A classe concreta (
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.
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();
}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...
}
Comentários
Postar um comentário