agosto 19, 2025

ORM com Repository no Delphi

Por Diógenes Henrique

ORM com Repository no Delphi

Introdução

Bem-vindo ao blog! 👋
Hoje vamos explorar um tema muito importante para quem trabalha com desenvolvimento de software: ORM (Object-Relational Mapping) em conjunto com o padrão Repository.

Se você já se perguntou como organizar melhor o acesso a dados da sua aplicação ou como deixar o código mais limpo e fácil de manter, este post é para você.

Aqui veremos:

  • Como o ORM transforma tabelas em objetos e facilita a manipulação dos dados.
  • Como o Repository atua como uma camada intermediária, separando o acesso a dados da lógica de negócios.

Juntos, esses dois conceitos ajudam a criar um código mais robusto, organizado e escalável. Vamos lá? 🚀

Criando a Tabela

Para o exemplo, utilizaremos o Firebird 3.0 e criaremos uma tabela simples de cadastro de clientes:

CREATE TABLE PESSOAS (
    ID     INTEGER NOT NULL,
    NOME   VARCHAR(100),
    EMAIL  VARCHAR(100)
);


Com isso, já temos a estrutura básica de dados para trabalhar.

Criando a Classe Cliente (ORM)

A seguir, criamos uma classe que representa a entidade Cliente, fazendo o mapeamento entre os campos da tabela e propriedades no Delphi:

unit cCliente;

interface

type
  TClienteORM = class
  private
    fid    : integer;
    fnome  : string;
    femail : string;
  public
    property Id    : integer read fid write fid;
    property Nome  : string  read fnome write fnome;
    property Email : string  read femail write femail;
  end;

implementation

end.

Criando o Repository

O padrão Repository é usado para centralizar as operações de acesso ao banco de dados.
Ele funciona como um “gerente” que lida com as operações de leitura e escrita, mantendo a lógica de negócios isolada.

unit repCliente;

interface

uses
  FireDAC.Comp.Client, FireDAC.DApt, FireDAC.Stan.Param,
  System.SysUtils, System.Generics.Collections, cCliente;

type
  TClienteRepository = class
  private
    FConnection: TFDConnection;
  public
    constructor Create(AConnection: TFDConnection);

    function BuscaPorId(AId: Integer): TClienteORM;
    function BuscaTodos: TObjectList<TClienteORM>;

    procedure Inserir(ACliente: TClienteORM);
    procedure Atualizar(ACliente: TClienteORM);
    procedure Excluir(AId: Integer);
  end;

implementation

{ Implementação dos métodos do Repository }

Por que usar Repository?

  • Evita SQL espalhado pelo código.
  • Centraliza a manipulação de dados.
  • Facilita manutenção e testes.
  • Permite trocar de banco de dados futuramente sem grandes impactos.

Conectando ao Formulário

Agora que temos nossa classe ORM e o Repository, podemos conectar tudo à interface do usuário.

No formulário, declare as variáveis:

Cliente           : TClienteORM;
ClienteRepository : TClienteRepository;

Exemplo de uso em botões:

Buscar Cliente

var
  IdCliente: Integer;
begin
  ClienteRepository := TClienteRepository.Create(FDConnection1);
  Cliente := TClienteORM.Create;
  try
    IdCliente := StrToInt(EditCodigo.Text);

    if IdCliente > 0 then
    begin
      Cliente := ClienteRepository.BuscaPorId(IdCliente);
      if Assigned(Cliente) then
      begin
        EditNome.Text  := Cliente.Nome;
        EditEmail.Text := Cliente.Email;
      end
      else
        ShowMessage('Cliente não encontrado na base.');
    end
    else
      ShowMessage('Informe um ID válido.');
  finally
    Cliente.Free;
    ClienteRepository.Free;
  end;
end;

Inserir Cliente

Cliente := TClienteORM.Create;
ClienteRepository := TClienteRepository.Create(FDConnection1);
try
  Cliente.Nome  := EditNome.Text;
  Cliente.Email := EditEmail.Text;

  ClienteRepository.Inserir(Cliente);
  EditCodigo.Text := IntToStr(Cliente.Id);

  ShowMessage('Incluído com sucesso!');
finally
  Cliente.Free;
  ClienteRepository.Free;
end;

Alterar Cliente

Cliente := TClienteORM.Create;
ClienteRepository := TClienteRepository.Create(FDConnection1);
try
  Cliente.Id    := StrToInt(EditCodigo.Text);
  Cliente.Nome  := EditNome.Text;
  Cliente.Email := EditEmail.Text;

  ClienteRepository.Atualizar(Cliente);
  ShowMessage('Alterado com sucesso!');
finally
  Cliente.Free;
  ClienteRepository.Free;
end;

Excluir Cliente

var
  IdCliente: Integer;
begin
  ClienteRepository := TClienteRepository.Create(FDConnection1);
  try
    IdCliente := StrToInt(EditCodigo.Text);
    ClienteRepository.Excluir(IdCliente);

    EditNome.Clear;
    EditEmail.Clear;
    EditCodigo.Clear;

    ShowMessage('Excluído com sucesso!');
  finally
    ClienteRepository.Free;
  end;
end;

Conclusão

Neste artigo, vimos como unir ORM e Repository em Delphi para deixar o acesso a dados mais organizado.

  • O ORM converte tabelas em objetos, simplificando a manipulação de informações.
  • O Repository centraliza as operações de CRUD, mantendo o código mais limpo, reutilizável e fácil de manter.

Essa combinação torna o sistema mais flexível, escalável e preparado para mudanças futuras.

Agora é sua vez: aplique esses conceitos nos seus projetos Delphi!
Se quiser, compartilhe sua experiência nos comentários. Até a próxima! 🚀

 

📣 Se você gostou, comente, curta e compartilhe com outros devs Delphi!
💬 Sua interação ajuda nossa comunidade a crescer ainda mais!

 

🔗 Grupo Geral no WhatsApp

💬 Participe do Delphi Masters e conecte-se com desenvolvedores de todo o Brasil!
Discussões, dúvidas, dicas e muita troca de conhecimento.
👉 Entre agora: https://chat.whatsapp.com/HPwXGINRiDS65VgRDLS2lD

🔗 Canal do YouTube Delphi Masters

🎥 Conteúdo técnico, lives, tutoriais e entrevistas com feras do Delphi!
Se inscreva e ative o sininho para não perder nada.
👉 Acesse: https://www.youtube.com/@delphimasters

🔗 Comunidade no DISCORD

🎧 Bate-papo em tempo real com a galera do Delphi!
Canais organizados por temas, suporte e muito networking.
👉 Entre no Discord: https://discord.gg/pq2YvPZ7Z2

Edição/Revisão:
Diógenes Henrique
Delphi Masters