Fala ai Radizeiro e Radizeira, tudo bem com você?
Nossa série de post de MVC com ORM está ficando muito legal.
Claro que não poderia faltar mais um episódio dessa nossa série, e nesse episódio iremos criar nossa classe de query, lembra que em posts anteriores falei de abstrairmos nossas conexões e que iríamos precisar de uma classe de query.
Então é agora que nesse nosso episódio estaremos fazendo isso…
Vamos lá?
Já criamos nossa classe de conexão, mas só com a conexão não iremos conseguir fazer nada né, então vamos criar uma interface para essa nossa Query.
Como vamos utilizar um ORM não iremos utilizar a Query propriamente dita, mas o FDMentable, mas se for Query é a mesma coisa.
iModelQuery = interface
['{A3826142-023B-4397-B005-0B2401712F0D}']
function Query : TDataSet;
end;
Observe que criamos um método chamado Query que tem como retorno o TDataSet, seguindo o mesmo padrão que fizemos na interface de conexão onde usamos o tipo mais ancestral possível.
Agora precisamos ter uma classe que implementa essa nossa interface.
type
TModelConexaoFiredacQuery = class (TInterfacedObject, iModelQuery)
private
FQuery : TFDMemtable;
public
constructor Create;
destructor Destroy; override;
class function New : iModelQuery;
function Query : TDataSet;
end;
implementation
{ TModelConexaoFiredacQuery }
constructor TModelConexaoFiredacQuery.Create;
begin
FQuery := TFDMemtable.Create(nil);
end;
destructor TModelConexaoFiredacQuery.Destroy;
begin
FQuery.DisposeOf;
inherited;
end;
class function TModelConexaoFiredacQuery.New: iModelQuery;
begin
Result := Self.Create;
end;
function TModelConexaoFiredacQuery.Query: TDataSet;
begin
Result := FQuery;
end;
Você pode esta estranhando ou indagando, por que eu coloquei um nome muito grande da minha classe? Eu faço isso pois é uma boa prática, seguindo os padrões do clean code, porque se você colocar abreviado nem sempre poderá compreender para que e de onde é essa classe, dessa forma você saber de onde é e para que é essa classe, simples assim.
Agora temos as diretivas para uma conexão com o banco de dados, dessa forma você pode observar que não temos nenhum acoplamento, e eu estou trabalhando com a camada mais genérica desses componentes de conexão, dessa forma posso todo o resto do meu projeto não precisa conhecer quem é o meu Dataset, se é FDMentable ou qualquer outro.
Neste treinamento você vai aprender a aplicar técnicas que darão maior escalabilidade em seus softwares criando uma estrutura de forma prática e dinâmica, aplicando os padrões de boas práticas e clean code, além de compreender como aplicar os padrões de persistência de dados sem a necessidade de criar scripts de banco de dados.
