ORM com Repository no Delphi
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