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

É, não deixamos de evoluir a cada dia não é verdade?

No nosso dia a dia vemos grandes evoluções, seja na medicina, seja na tecnologia, seja na nossa vida, seja em qualquer coisa, tudo evolui.

Mas eu lhe pergunto, se tudo está em constante evolução por que seu software não tem evoluído?

Você pode até achar que tem evoluído, mas não está conseguindo acompanhar o mercado que está em constante evolução.

Se o seu software não tem conseguido evoluir com o mercado ele pode um dia morrer neste caminho, por causa disso eu me preocupo com  você, e quero que você e seu software possam evoluir constantemente e se manter nesse mercado competitivo.

Quando você mantém um código bem estrutura, com nomenclaturas que falam o que faz, seguindo as boas práticas, com toda certeza, você irá conseguir acompanhar, então não deixe de participar dessa nossa série de post aqui no blog sobre a utilização de MVC com ORM, onde eu irei lhe mostrar como o ter um código escalável e de fácil manutenção.

A cada semana um post diferente, onde eu tenho mostrado a evolução de um projeto utilizando MVC com ORM, e nesse nosso novo episódio da nossa série irei mostrar como aumentar mais a abstração da conexão.

Já temos nossa classe de conexão, e minha classe de query prontas para que possamos utilizar.

Agora vamos para a última etapa, iremos precisar de uma fábrica, eu tenho essas duas classes, só que não irei ficar chamando eles diretamente, se não irei gerar acoplamento, então para cada camada que criamos, por exemplo, conexão, iremos precisar de uma Factory, dessa forma todas as vezes que eu precisar de uma conexão eu chamo essa minha Factory e não minha conexão diretamente.
Então vamos criar uma interface para essa nossa Factory.

iModelConexaoFactory = interface
    ['{80A4A88B-F808-4689-8201-9E42FE0454B6}']
    function Conexao : iModelConexao;
    function Query : iModelQuery;
  end;

Observe que eu criei um método nessa nossa interface chamado Conexao, onde ele retorna iModelConexao, porque se criarmos uma conexão com o Zeos, a minha conexão com o Zeos irá implementar a interface iModelConexao, onde irá ter todos os métodos dessa classe, assim como foi feito com o Firedac, então eu posso simplesmente trocar na Factory, dessa forma eu não preciso mudar todo o meu projeto para mudar do Firedac para o Zeos, só mudando duas linhas de código, ou uma linha.

Vamos criar nossa classe Factory.

Iremos fazer algumas implementações nessa nossa classe.

 type
  TModelConexaoFactory = class (TInterfacedObject, iModelConexaoFactory)
    private
    public
      constructor Create;
      destructor Destroy; override;
      class function New : iModelConexaoFactory;
      function Conexao : iModelConexao;
      function Query : iModelQuery;
  end;

implementation

uses
  Blog.Model.Conexao.Firedac.Query;

{ TModelConexaoFactory }

function TModelConexaoFactory.Conexao: iModelConexao;
begin
  Result := TModelConexaoFiredac.New;
end;

constructor TModelConexaoFactory.Create;
begin

end;

destructor TModelConexaoFactory.Destroy;
begin

  inherited;
end;

class function TModelConexaoFactory.New: iModelConexaoFactory;
begin
  Result := Self.Create;
end;

function TModelConexaoFactory.Query: iModelQuery;
begin
  Result := TModelConexaoFiredacQuery.New;
end;

Agora temos uma fábrica, e com esta fábrica não iremos precisar ter que reutilizar códigos, ao acessar essa nossa Factory irá ter as conexões, onde poderá utilizar a mesma estrutura de conexão para diversos campos do seu software, seja um PDV ou ERP.

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.

CLIQUE AQUI E SAIBA MAIS SOBRE O TREINAMENTO COMO IMPLEMENTAR ORM EM ARQUITETURA MVC