Jump to content

POO e ORM


  • Este tópico foi criado há 3558 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 to comment
Share on other 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.

  • Like 1

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

www.controleautomacao.com.br

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.