Disclaimer: Eu sei que muita gente odeia mapeamentos e geradores de código.
:-)

Normalmente se fala em Mapeamento Objeto-Relacional, que a grosso modo
consiste em pegar um modelo O-O (modelado talvez em UML) e gerar um modelo
E-R. A modelagem é feita pensando em objetos e quem modela a camada de
persistência que se vire depois pra encaixar tudo numa DDL.

A idéia é fazer o caminho inverso: fazer o modelo de dados PRIMEIRO e depois
gerar um conjunto de classes. Cada tabela vira uma classe, cada tupla vira
uma instância, cada coluna vira uma propriedade. O objetivo é facilitar a
vida do programador para algumas tarefas simples e repetitivas: carregar um
objeto por sua(s) PK e depois atualizar ou deletar este objeto, por exemplo.
Os SELECT mais complexos continuam sendo feitos em SQL, as VIEWs continuam
sendo usadas normalmente. Não seria uma O-O de verdade, mas apenas um
wrapper para simplificar as tarefas.

O grande problema das camadas de persistência é que nunca se sabe a
qualidade do SQL gerado e é relativamente fácil para o programador usar
alguma classe de forma a gerar SQL ruim (ou mesmo péssimo). No entanto, a
maioria dos SQL usados pelas telas de cadastro em uma aplicação comercial
são simples. Nesses casos, um "SELECT <campos> FROM cliente WHERE codigo =
1234" pode ser gerado automaticamente de maneira eficiente. Da mesma forma,
um "UPDATE cliente SET nome = 'Zeca' WHERE codigo = 1234" ou um "DELETE FROM
cliente WHERE codigo = 1234" podem ser gerados automaticamente sem
problemas.

Escrevi em 2003 uma OPF e um Gerador de Código que faz exatamente isso para
Delphi e FPC. Até agora, as vantagens têm superado as desvantagens com
folga... :-) O programador não perde tempo com os SQL triviais (que acabam
sendo em grande volume), podendo dedicar mais atenção aos códigos SQL e
PL/pgSQL realmente importantes, mais diretamente relacionados com as regras
do negócio.

-- 
Atenciosamente,

Alexsander da Rosa
Linux User #113925
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a