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.