Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4152 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde, estou estudando POO e de cara achei um pouco trabalhoso, por exemplo, me deparei com uma tabela com mais de 100 campos, então criar as classes para uma tabela assim se torna algo complicado, de qualquer forma continuo estudando, más dai pensei em uma ferramenta que facilite este trabalho de abstração de informações de uma tabela e gera as classes de negócios e de persistência.

Então descobri que já existem frameworks que fazer isso, tem o TMS Aurellius, DoRM, AquaSoft entre outros, ocorre que a maioria dos mesmos está voltada para versões superiores ao Delphi 2009, sendo assim quem tem versão anterior já teria de procurar outras soluções, até encontrei como é o caso do InstantObjects(indicado por EMBarbosa( http://stackoverflow.com/questions/4224 ... lphi-win32)).

Então estive lendo e estudando um pouco sobre estes frameworks ORM e confesso que achei interessante, pois o mesmo agiliza bastante o processo de desenvolvimento orientado à objetos, eliminando várias etapas do desenvolvimento, mesmo com tudo isso trabalhar com tabelas muito grandes ainda continua sendo algo complicado(TA PARECENDO COISA DE PREGUIÇOSO RECLAMANDO DO TRABALHO, KKK).

Então resolvi criar uma ferramenta que se conecta há um banco de dados(no momento MySQL 5.x) e abstrai as informações das tabelas e gera a classe de negócios e de persistência, isso já está pronto, com poucos cliques do mouse você cria as duas classes independente da quantidade de registros da tabela, já com Insert, Update, Delete e Select.

Agora estou querendo fazer com que a ferramente trabalho com relacionamentos do banco, más estou com dúvida de que forma isso pode ser feito, por exemplo:

Tabela01

---------------

Id : integer

Field01 : Varchar(10)

Tabela02

---------------

Id: integer

IdTabela01 : integer;

Field01 : Varchar(30)

Como pode ser visto existe o relacionamento entre a Tabela01 e Tabela02 de 1 : N, más não tenho uma ideia fixo de como isso ficaria dentro da classe.

Acredito que na classe da Tabela01 eu devo ter um atributo do tipo Tabela02 pois assim eu consigo "resgatar" informações da Tabela02 dentro do objeto Tabela01, imagino que eu deveria trabalhar com indices, assim eu poderia ter vários objetos do tipo Tabela02 no objeto Tabela01, porem não consigo visualizar como isso ficaria no código, agradeço a ajuda de todos!

Link para o comentário
Compartilhar em outros sites

Como ficaria o Get e o Set para esta situação? Levando em consideração que gravo direto as informações referentes à FK no banco de dados? Segue anexo exemplo(fontes, script db e executavel).

Obs: Componente de conexão Zeos, não estou enviando as DLLs em anexo, caso precisem avisar!

http://sdrv.ms/QjV7hr

Link para o comentário
Compartilhar em outros sites

Hehe, realmente isso é complicado.

Por esses e outros problemas que eu resolvi criar o meu próprio framework. Nesse meu framework, usei técnicas recursos como Abstract Factory, Factory e Abstract Object, com isso, meu sistema independe de qual banco de dados você quer usar e, além disso, não é necessão escrever comandos SQL pois o próprio framework já faz isso automaticamente.

Aconselho você a tentar algo parecido.

  • Curtir 1

Sistemas para toda área Goumert, pequeno varejo e baladas.

www.controleautomacao.com.br

Link para o comentário
Compartilhar em outros sites

Daniel, na realidade é isso que estou fazendo, só que no momento estou focado no banco que trabalho que é o MySQL, más a ideia claro é que seja independente de banco, como explicado anteriormente, a aplicação já faz o trabalho de "mapeamento" da tabela, gera a classe de negócios, gera a classe de persistência(DAO), e na classe de persistência(DAO) já gera Inset, Update, Delete e Select, estou com dúvida apenas como fica uma classe no caso de relacionamento, sei que na classe deve haver uma propriedade do tipo das classes onde houver FK, acredito tambem que isso deve ocorrer com indexação, porem não compreendo bem como desenvolver isso.

Link para o comentário
Compartilhar em outros sites

Achei o assunto bem interessante...

Baixei o arquivo que mencionou...porem não consegui entender...em que momento ele cria os insert, delete, etc...

Ja que dentro dos arquivos ele ta fazendo apenas select com o ID..

Vi o video...e realmente parace ser algo show de bola..

Att.:

W7 Soluções
Ricardo Mendes
Analista/Programador
Skype: ricardo_w7
[email protected]

Link para o comentário
Compartilhar em outros sites

ricardomendes, quem cria Insert, Update, Delete e Select é a aplicação do video, no arquivo denominado "classXXXX.pas" contem apenas as regras de negócio, quem trata da parte de banco de dados propriamente dito é a classe de persistência("classXXXXXDAO.pas"), observe bem, se você for debugar verá que isso ocorre no momento do Insert, quando vc da o Insert clicando no botão, você verá que o insert dessa classe na realidade referencia outro insert da classe DAO.

Link para o comentário
Compartilhar em outros sites

Eneias...é isso que não to entendendo...

nesse trecho do codigo

function TPedidosDAO.Insert(oPedidos : TPedidos) : Boolean;

begin

Result := False;

with FSQLPedidos do

begin

Close;

SQL.Clear;

SQL.Add('Select * From Pedidos');

SQL.Add('Where(Pedido = :Pedido)');

Open;

Insert;

FieldByName('Data').Value := oPedidos.Data;

Post;

oPedidos.Pedido := FieldByName('Pedido').AsInteger;

Result := True;

end;

end;

Seria a parte responsavel pelo insert...so que aqui so tem comando sql de select...

Att.:

W7 Soluções
Ricardo Mendes
Analista/Programador
Skype: ricardo_w7
[email protected]

Link para o comentário
Compartilhar em outros sites

Eneias...é isso que não to entendendo...

nesse trecho do codigo

function TPedidosDAO.Insert(oPedidos : TPedidos) : Boolean;

begin

Result := False;

with FSQLPedidos do

begin

Close;

SQL.Clear;

SQL.Add('Select * From Pedidos');

SQL.Add('Where(Pedido = :Pedido)');

Open;

Insert;

FieldByName('Data').Value := oPedidos.Data;

Post;

oPedidos.Pedido := FieldByName('Pedido').AsInteger;

Result := True;

end;

end;

Seria a parte responsavel pelo insert...so que aqui so tem comando sql de select...

Veja bem, após abrir o dataset(Open) imediatamente eu dou o Insert, e após passar os valores para o dataset executo o Post.

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Este tópico foi criado há 4152 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.