Post: Criando Classe Genérica de DataSet

Alessandro Medeiros

Fala ai Radizeiros e Radizeiras, tudo bem com vocês?

Talvez você algum dia tentou trabalhar com outros componentes de conexão e não teve sucesso devido seu projeto estar altamente acoplado, com muitas dependências, e isso gera uma dor de cabeça em manutenções e implementações futuras.

Ter um projeto altamente desacoplado e sem dependência garante que nosso projeto tenha um tempo de vida útil muito maior, pois desacoplando nossas classes ficamos livres para facilmente migrarmos para qualquer componente de manipulação de dados.

Já falei aqui no blog de como criar uma classe de conexão usando o modelo MVC, caso não tenha visto acesse aqui.

E dando continuidade ao nosso post de conexão ao banco de dados usando MVC, onde iremos começar a extrair dados do banco de dados utilizando uma arquitetura concisa, utilizando o paradigma POO.

Então vamos lá

Dentro do nosso ModelConexoes no MVC, nós já abstraímos a parte da conexão com o banco de dados, agora nós vamos precisa para trazer esse dados para tela de um DataSet, como estou trabalhando independente da minha camada de acesso a dados, não podemos fixar isso como um FDQuery, FDTable, devemos ter algo genérico, para que possamo utilizar ele sem nenhuma dependência na camada de visão.

Talvez você deve estar se perguntando, como eu posso fazer isso?

Vamos lá que irei lhe mostrar como podemos abstrair máximo as nossas classes evitando dependência e aumentando o nível da nossa aplicação.

Primeiro nós iremos criar nossa interface de DataSet, iModelDataSet, desse forma todos os nossos DataSet irão herdar dessa interface.


iModelDataSet = interface
    function Open(aTable : String) : iModelDataSet;
    function EndDataSet : TComponent;
end;

Vamos criar a classe que irá implementar essa interface utilizando o componente do Firedac.

 


Type
    TModelConexoesTableFiredac = class(TInterfacedObject, iModelDataSet)
    private
        FTable: TFDTable;
    public
        constructor Create(Conexao: iModelConexao);
        destructor Destroy; override;
        class function New(Conexao: iModelConexao): iModelDataSet;
        function Open(aTable: String): iModelDataSet;
        function EndDataSet: TComponent;
    end;

implementation

{ TModelConexoesTableFiredac }

constructor TModelConexoesTableFiredac.Create(Conexao: iModelConexao);
begin
    FTable := TFDTable.Create(nil);
    FTable.Connection := (Conexao.EndConexao as TFDConnection);
end;

destructor TModelConexoesTableFiredac.Destroy;
begin
    FTable.Free;
    inherited;
end;

function TModelConexoesTableFiredac.EndDataSet: TComponent;
begin
    Result := FTable;
end;

class function TModelConexoesTableFiredac.New(Conexao: iModelConexao)
: iModelDataSet;
begin
    Result := Self.Create(Conexao);
end;

function TModelConexoesTableFiredac.Open(aTable: String): iModelDataSet;
begin
    Result := Self;
    FTable.Open(aTable);
end;

Nessa nossa classe, como podemos observar, criamos um objeto chamado FDTable do tipo TFDTable, ele foi criado e destruído, mas sabemos que todo FDTable precisa estar conectado a um Connection do Firedac, já temos essa conexão, que criamos num post anterior.

Para que nosso objeto FTable viesse receber a conexão usamos a abstração do TComponent que fizermos para ficar bem genérico, por este motivo no Create passamos por parâmetro a conexão, e no create nós fizemos um casting para o objeto.

Esses são alguns truques que usamos para utilizar de forma bem genérica, e sem complicar de mais a utilização dentro do código.

No método Open passamos o parâmetro que irá receber o nome da tabela que iremos trabalhar.

No EndDataSet está esperando um TComponent sendo assim iremos passar para o Result o nosso objeto FTable.

Pronto já temos uma classe genérica agora para trabalhar com o FDTable do Firedac.

Mas você pode estar se perguntando, como posso fazer isso para outro Middle de acesso?

Simples! Você pode faria a mesma coisa para qualquer um Middle de acesso.

Fazendo desse jeito desacoplamos nossos projetos e tiramos qualquer dependencia podendo trocar para qualquer Middle de acesso sem dor de cabeça nenhuma.

Esse artigo foi retirado de uma das aulas da Certificação especialista em arquitetura MVC em Delphi, nesse treinamento você irá aprender de forma prática como implementar a arquitetura MVC do absoluto zero, criar menus dinâmicos, CRUD completo com estrutura MVC e ainda saberá como seu projeto pode ficar completamente independente de componente de conexão, trabalhando simultaneamente com Firedac e Zeos e ainda exemplos reais de aplicação das técnicas para resolver problemas do dia a dia, Como:

* Criando a estrutura MVC do Zero
* Criando menus desacoplados com MVC
* Estruturando a conexão com Banco de Dados
* CRUD com acoplamento Zero
* Possibilidade de trabalhar com múltiplos componente de conexão no mesmo projeto.

CLIQUE AQUI PARA SABER MAIS SOBRE A CERTIFICAÇÃO ESPECIALISTA EM ARQUITETURA MVC EM DELPHI







Faça sua busca

CATEGORIAS

POSTS RECENTES

E caso você tem interesse de conhecer mais sobre Criando Classe Genérica de DataSet, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao Criando Classe Genérica de DataSet, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
Gostou?
Compartilhe:

Embarque no foguete com milhares de devs para aprender desenvolvimento, evoluir de forma contínua e se manter relevante no mercado.

Dúvidas
Cadastre-se em nossa lista

Para ter acesso em primeira mão, a tudo que acontece na Academia do Código, basta se cadastrar em nossa lista

Grupo Thulio Bittencourt | Academia do Código

#FaçaPartedaHistória

Copyright © 2024 – Todos os direitos reservados