DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da ClubeDelphi ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Video: Curso Online-Novidades no Delphi 2010-Parte 13-Mapeamento Objeto Relacional (Classe de Mapeamento)-Parte 5

Nesta última vídeo sobre pseudo Engine de mapeamento será mostrado uma segunda abordagem para a persistência de objetos.

TítuloCurso Online-Novidades no Delphi 2010-Parte 13-Mapeamento Objeto Relacional (Classe de Mapeamento)-Parte 5

Tempo: 19:57 min.

Resumo: Como dito anteriormente, a nova estrutura de RTTI do compilador Delphi win32 sem dúvida alguma é a melhor implementação desta nova versão e para ver na prática como isso pode facilitar nosso dia a dia vamos, em uma série de 5 vídeos criar um pseudo Engine de mapeamento objeto relacional para que possamos persistir nossos objetos em um banco relacional utilizando reflexão com a nova arquitetura RTTI do Delphi 2010. Esta é a última vídeo aula sobre MOR.

Metodologia de desenvolvimento do exemplo: Nesta última vídeo será mostrado uma segunda abordagem para a persistência de objetos. Enquanto na primeira abordagem nos utilizamos um objeto que se auto persiste nesta segunda abordagem criaremos uma classe de mapeamento. Além disso criamos mais duas classes para mostrar que o mecanismo se aplica a qualquer classe que possua nossos atributos.

Tecnologias utilizadas: RAD Studio 2010.

Exemplos construídos: Mecanismo de Mapeamento Objeto Relacional. 

Palavras chaves: Delphi 2010, RTTI, Reflexão, Atributos, Mapeamento Objeto Relacional.





    7 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Paulo Rogerio Oliveira Da Silva
Bom rodrigo rodrigues creio eu que o processo seria feito totalmente desconectado do banco pois como o curso é 100% oo ficaria meio sem sentido a entrada de dados ser via componentes desconectados do banco e usar o client dataset para somente exibição de dados, ^^ isso na minha humilde opinião!
[há +1 ano] - Responder

 

Rodrigo Rodrigues Da Costa
Muito bom Rodrigo...boa prática, como vc mencionou as vídeos aulas, é um exemplo didático, para uma situação real sabemos que tem muuuuito mais detalhes, mas esse exemplo ajuda muuuuito pra quem pretende utilziar essas técnicas como eu, porém tenho uma série de dúvidas. por exemplo.

Utilizando datasnap, a camada de persistência e de mapeamento ficaria no servidor correto?
na arquitetura datasnap, como os dados seriam trafegados? por JSON via objetos?
enquanto ao poderoso ClientDataSet? ficaria inválido dentro dessa abordagem?

ae vem a questão dos controles visuais, mestre-detalhe etc.
como mostraria uma consulta (select) utilizando a OO?
mostraríamos em um Dbgrid certo? como preencher o DBgrid?

gostaria de saber como fazer um mestre detalhe com essa abordagem utilizando um Dbgrid para mostrar os dados.
efetuando mudanças no dbgrid, onde teria que refletir nos objetos, teria sem dúvida que automatizar isso.

não poderia utilizar o ClientDataSet para a parte de intereção visual?


essa RTTI do delphi ta muito legal, tua didática é ótima, parabéns Rodrigo pelo trabalho.





[há +1 ano] - Responder

 

[autor] Rodrigo Carreiro Mourão
Olá Amigo desculpe a demora em responder, as coisas estão meio corrida.

Bem sem dúvida há muito mais detalhes em um projeto OO isso foi apenas um inicio uma idéia do que pode ser feito com a nova RTTI. Mas vamos às questões:

Utilizando DataSnap, a camada de persistência e de mapeamento ficaria no servidor correto?
Sim, persistência fica no servidor.

Na arquitetura DataSnap, como os dados seriam trafegados? por JSON via objetos?
Isso depende da técnica utilizada, no DataSnap antigo eu usava CDS no cliente, dava applyupdate e no servidor usava o Evento onBeforeUpdateRecord do DataSetProvider para instanciar minha classe, passar os valores do Data Package para ela e invocar minha persistência. Claro que utilizava classes Proxy que é um conceito que já temos hoje no novo DataSnap. Com a nova arquitetura podemos tirar proveito do JSON e serializar nossos objetos em JSON para trafegar para o servidor.


Enquanto ao poderoso ClientDataSet? ficaria inválido dentro dessa abordagem?
Nos meus projetos não ficam não mesmo sendo OO. Eu o utilizo para montar minhas listas, exibir dados na GRID ainda mais que temos uma Unit do DBX4 que tem métodos para pegar um TDBXReader (Lista de Registros) e popular um CDS automaticamente. Isso me poupou dezenas de linhas de códigos.


Aí vem a questão dos controles visuais, mestre-detalhe etc.
como mostraria uma consulta (select) utilizando a OO? 
Lembre-se que em OO as classes têm métodos, então para as classes não existe select isso fica para as classes de persistência ou para uma framework se for o caso. Em OO você teria cliente.getallclients ou clientes.getall para retornar a lista de clientes cadastrados. Obvio que em algum momento vai rolar um select, mas para a classe e principalmente para que vai utilizar classe isso tem que ser transparente.
Já master detail são tratados através de listas, pra ser mais exato através de agregações e composições.



mostraríamos em um Dbgrid certo? como preencher o DBgrid?
Poderia utilizar TDBXReader nos retornos de métodos de lista e no cliente passar isso para um CDS e exibir num DBGrid, ou para quem não tem DBX4 utilizar ListView, pois nele você pode colocar os objetos na propriedade Pointer do ListView.

Bem como você mesmo disse tem muito mais detalhes, mas eu estou preparando um curso em vídeo sobre OO com Delphi e isso com certeza será abordado, estou apenas concluindo o curso que assumi do Renato Mattos.
No mas um abraço.

[há +1 ano] - Responder
 

Paulo Rogerio Oliveira Da Silva
Como ficaria a classe de usuario com essa abordagem? tipo tenho uma classe usuario que me retorna dados do usuario logado, como eu controlaria o insert, delete, update nesse caso?
[há +1 ano] - Responder

 

[autor] Rodrigo Carreiro Mourão
Existem várias abordagem, uma delas é o DAO (Data Access Object). Nela temos para classe de negócio uma classe de persistência, no seu caso:  TUsuario e TUsuarioDAO.


A classe DAO possui os métodos de persistência, como Insert, Update, Delete, etc.  Agora como expliquei no outro comentário existem muitos outros detalhes. Da uma olhada no google sobre DAO, tem muito coisa legal.

Existem outras abordagem, alguns autores usam o proprio CDS para pode capturar os dados e depois enviar para um classe de persistência ou mesmo um Framework de persistência feito com RTTI. Existe uma série de artigos publicadas na Clube Delphi sobre um sistema de carros feito em OO, acho que se chama DataCar OO, vale a pena dar uma olhada.


Att,
[há +1 ano] - Responder
 

Fabio T De Oliveira
Venho acompanhando seus posts sobre mapeamento de objeto com a nova RTTI , uma só palavra SHOW DE BOLA.
Mas me surgiu uma duvida quanto ao mapeamento de relacionamentos entre classes. Como seria mapear uma chave estrangeira?
[há +1 ano] - Responder

 

[autor] Rodrigo Carreiro Mourão
Olá Fábio,

Em outro comentário eu estava explicando a outros usuários sobre as peculiaridades deste processo. Eu estou estudando a publicação de um curso onde mostrarei detalhes como este.

Estou apenas organizando meu tempo!

Grande abraço e até mais!

Rodrigo Carreiro Mourão
http://www.rodrigocarreiro.com.br
Twitter: @carreiromourao
[há +1 ano] - Responder
 



Publicidade
Curso Online
Este post faz parte de:

Curso(s):
  •  Novidades no Delphi 2010

  • Autor
    Rodrigo Carreiro Mourão

    Consultor de TI especializado em Orientação e Objetos, Design Patterns e Gestão de Projetos. Instrutor certificado pela Borland e Delphi Product Certified. É sócio da RM Factory Soluções em TI e da Szeryng Traduções e Informática. Atua como Supervisor de TI do Grupo Editorial Nacional e é instrutor ...


    Space do autor
    Estatísticas
    Favorito:
    Comentários:
    Feedback:
    Utilidade:
    4   0
    [Fechar]

    Você precisa estar logado para dar um feedback.

    Clique aqui para efetuar o login
    [Fechar]


    Este post está fechado. Saiba mais sobre a assinatura MVP!
    web-03
    DevMedia  |  Anuncie  |  Fale conosco
    Hospedagem web por Porta 80 Web Hosting
    2012 - Todos os Direitos Reservados a web-03