Lazy Loading
O Lazy Loading (Carregamento Preguiçoso) permite carregar dados relacionados apenas quando eles são acessados pela primeira vez, economizando recursos e memória.
Como Funciona
No BridgeFrameWork, o Lazy Loading é transparente. Você define os relacionamentos com atributos e usa tipos especiais (TLazy<T> e TLazyList<T>).
Tipos de Relacionamento
N:1 (Muitos para Um) - [BelongsTo]
Use quando sua entidade "pertence" a outra. Exemplo: Um Produto pertence a um Grupo.
[BelongsTo('ID_GRUPO')] // A coluna na tabela Produto que aponta para Grupo
FGrupo: TLazy<TGrupo>;
Uso:
// O grupo NÃO é carregado aqui (apenas o ID é lido)
LController.Load(LProduto, 1);
// O SELECT na tabela de grupos acontece AQUI, na primeira leitura
ShowMessage(LProduto.Grupo.Value.Descricao);
1:N (Um para Muitos) - [HasMany]
Use quando sua entidade "tem vários" filhos. Exemplo: Um Cliente tem muitos Pedidos.
[HasMany('ID_CLIENTE')] // A coluna na tabela Pedido que aponta para Cliente
FPedidos: TLazyList<TPedido>;
Uso:
LController.Load(LCliente, 1);
// O SELECT na tabela de pedidos acontece AQUI
for LPedido in LCliente.Pedidos.List do
begin
// ...
end;
Benefícios
- Performance Inicial: Carregar um Cliente não carrega automaticamente todos os seus 5.000 pedidos.
- Economia de Memória: Objetos não usados não ocupam espaço.
- Simplicidade: Não é necessário escrever JOINs manuais para relacionamentos simples.