Post: [Boas práticas para conexão de dados] Preparando a Entidade para Listar os Dados

Alessandro Medeiros

Fala Radizeiro e Radizeira, tudo bem com vocês?

Cada post dessa nossa série de boas práticas para conexão a banco de dados tem sido muito legal.

E para que possamos melhorar cada vez mais os nossos projetos, é de extrema importância a utilização das boas práticas nos seus projetos.

É muito importante a sua aplicabilidade, para que tenha menos acoplamento, e maiores possibilidades de escalabilidade dos seus projetos.

No post de hoje estarei mostrando como preparar uma classe de entidade para listar os dados de uma tabela.

Caso você não saiba, uma entidade é uma representação lógica de uma tabela do banco de dados.

E você verá como é simples e prático sua aplicabilidade, e como é muito importante entender para que os seus projetos hoje fiquem cada vez mais desacoplados.

Dentro da nossa entidade de usuários já temos um componente de query funcionando.

type
TModelEntidadeUsuario = class(TInterfacedObject, iEntidade)
private
FQuery : iQuery;
public
constructor Create;
destructor Destroy; override;
class function New : iEntidade;
end;

implementation

constructor TModelEntidadeUsuario.Create;
begin
FQuery := TControllerFactoryQuery.New.Query(nil);
end;

destructor TModelEntidadeUsuario.Destroy;
begin
inherited;
end;

class function TModelEntidadeUsuario.New : iEntidade;
begin
Result := Self.Create;
end;

O que irei simplesmente é criar um método na interface de Entidade chamada Listar, que recebe como parâmetro um DataSource.

Mas você já deve estar se perguntando, para que estou passando um DataSource nesse método?

Isso se dá pelo fato de que a maioria dos componentes DBWare do Delphi, trabalha com o DataSource, e dá a facilidade de carregar os dados e passar para os componentes visuais.

Desta forma esse nosso método irá preencher este DataSource.

iEntidade = interface
function Listar(Value : TDataSource) : iEntidade;
end;

Como nossa classe de entidade implementa a interface de entidade, iremos ter que passar esse método para nossa classe.

type
TModelEntidadeUsuario = class(TInterfacedObject, iEntidade)
private
FQuery : iQuery;
public
constructor Create;
destructor Destroy; override;
class function New : iEntidade;
function Listar(Value : TDataSource) : iEntidade;
end;

implementation

constructor TModelEntidadeUsuario.Create;
begin
FQuery := TControllerFactoryQuery.New.Query(nil);
end;

destructor TModelEntidadeUsuario.Destroy;
begin
inherited;
end;

function TModelEntidadeUsuario.Listar(Value: TDataSource): iEntidade;
begin
Result := Self;
FQuery.SQL('select * from users');
Value.DataSet := FQuery.DataSet;
end;

class function TModelEntidadeUsuario.New : iEntidade;
begin
Result := Self.Create;
end;

Observe que simplesmente passei um comando SQL para a minha query para retornar todos os meus usuários dessa tabela.

Logo em seguida eu passo para o parâmetro value a nossa query.

Mas se você observar melhor essa nossa query está passando um DataSet.

Para isso eu criei um método na interface iQuery que retorna um TDataSet, para que possamos trabalhar com o query melhor.

iQuery = interface
function SQL(Value : String) : iQuery;
function DataSet : TDataSet;
end;
...
TModelQueryFiredac = class(TInterfacedObject, iQuery)
...
function TModelQueryFiredac.DataSet: TDataSet;
begin
Result := FQuery;
end;

Com isso conseguimos preencher qualquer DataSource que for passado no método Listar.

Agora nosso projeto já está pronto e funcional.

Só com essas classes, que criamos ao longo da nossa série, já reduzimos consideravelmente o acoplamento.

Desta forma, você pode a qualquer momento alterar o driver de conexão para qualquer outro e seu projeto estará apto a trabalhar com ele sem ter que alterar toda sua aplicação.

Simplesmente mudando duas classes, a Query e a de Conexão.

Muito legal, não é pessoal?

O que você está esperando para dar mais tempo de vida aos seus projetos?

Em poder ter mais tempo em se dedicar a outras coisas que possam agregar em seu projeto.

Quando desacoplam os nossos projetos, reduzimos problemas, e retrabalhos.

Faça sua busca

CATEGORIAS

POSTS RECENTES

E caso você tem interesse de conhecer mais sobre [Boas práticas para conexão de dados] Preparando a Entidade para Listar os Dados, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao [Boas práticas para conexão de dados] Preparando a Entidade para Listar os Dados, 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