Dúvida sobre Modelagens de Beans e Padrões

Pessoal… me tirem uma dúvida!

Afinal, como vocês estão usando o DAO?? VocÊs estão usando da mesma forma que eu ou usam diferente??

Abraços!

Eu costumo utilizar desta forma, só não tão expecialista, mas mais genérico.

No exemplo que voce mostrou, por exemplo, eu faria um DAO só para persistir o DVD, e dentro deste persistiria também as músicas e autores.

Mas é basicamente assim mesmo que uso.

[quote=Thiago Senna]Pessoal… me tirem uma dúvida!

Afinal, como vocês estão usando o DAO?? VocÊs estão usando da mesma forma que eu ou usam diferente??

Abraços![/quote]

Bom aqui tneho dois modos, uma é com os DAOs, tenho uma interface DAO, e um DAO com métodos especificos para cada BD. EX:

AlunoDAO - interface
AlunoOracleDAO - classe com métodos para oracle que implimenta AlunoDAO
AlunoSqlServerDAO - classe com métodos para oracle que implimenta AlunoDAO

Os negócios sempre acessam a interface, quem cuida de me trazer o DAO referente é uma Factory, desse modo posso trazer método que quiser referente ao banco que quiser, sem ter que mecher nos meus negócios e tal. É por meio de Facade sim Thiago ehehe

A seugnda opção, é usarmos Hibernate, a qual acho mais interessante, por ser mais flexível, e precisar somente passar um único objeto com seus relaiconamentos e ele cuidar do resto.

Na primeira já não existe esta flexibilidade, se precisarmos guardar algum relacionamento, segue-se a velha prática de fazer dois insert ( ecaaa) e dependo do programador(as vezes eu mesmo por preguiça :frowning: ) gera coisa duplicada, mesmo sql em 3, 4 métodos por causa desses relacionamentos, só merda ehehe

É por ae.

humm …entendi!!!

Então… o que o meu tem de diferente do seu é simplesmente que, ao invés de eu fazer a persitência dentro do próprio dvd, eu delego a tarefa de delegar a musica para o musica dao…

Então, eu chamo o dvdDAO, que persiste o dvd. O dvdDAO possui uma instância de musicaDAO, que se responsabiliza por persistir as músicas!!

Bom…
Valeu mesmo!
Abraços!

Entendi Skill…
Gostei da sua colocação quando ao Façade… hehehe!!!

Realmente… neste caso o façade é bém vindo… mas por que você não optou por usar uma fábrica abstrata de DAO???

Não seria melhor???

Abraços!

[quote=Thiago Senna]Entendi Skill…
Gostei da sua colocação quando ao Façade… hehehe!!!

Realmente… neste caso o façade é bém vindo… mas por que você não optou por usar uma fábrica abstrata de DAO???

Não seria melhor???

Abraços![/quote]

Acho que você não entendue ou eu falei pouco ehehe

Eu disse que eu tnho um Factory, que seria isso que você está dizendo, ela me traz o dao que eu pedir :wink:

Assim:

Controller -> negócio -> Facade -> Factory de DAOs -> DAO específico

é quase isso ae eheh, tem mais uns Helpers, Entytes ai no meio hehe

[quote=Thiago Senna]Pessoal… me tirem uma dúvida!

Afinal, como vocês estão usando o DAO?? VocÊs estão usando da mesma forma que eu ou usam diferente??

Abraços![/quote]

Sendo objetivo. Diferente.

Mas essa delegacao deveria ficar por conta do proprio DAO e nao tu ficar fazendo tudo na munheca.
Do jeito que eu mostrei la em cima e tu confirmou, nao existe uso de relacionamento de objetos direito, quem tem que montar os relacionamentos é a camanda de negocio e isso é muito ruim é como trabalhar com Hibernate sem usar os relacionamentos, pra quem ja fez isso (assim como eu) ja deve ter passado muitas noites sem dormir.

A meu ver nao usar relacionamento de objetos, tu acaba criando um dominio muito pobre e isso pode influenciar até na camada de visao em relatorios, telas master-detail, etc.

]['s

Ter que usar expressoes como “eu delego a tarefa de delegar a Musica para o MusicaDAO” por si so ja indica que algo esta errado, nao?

Eu imagino um cara pegando o sistema pra dar manutencao depois de 1 ou 2 anos.
O cara ira tecer elogios ao Thiago nao muito bons de falar aqui no Forum :mrgreen:

aff… pronto… lá vem malhação!!!

Mas como assim o domínio fica pobre???
Por acaso vocês criam um dao que se chama dvdDAO e ai dentro do método ele sai persistindo musica, dvd e artista… mas tudo no mesmo corpo do método??? O que eu faço é que dentro do método dvdDao.create() eu chamo musicaDao.create()… simplesmente para reaproveitar código!!

Isso não é melhor??? Afinal, onde estou ferindo os relacionamentos da classe de negócio??

[quote=Thiago Senna]aff… pronto… lá vem malhação!!!

Mas como assim o domínio fica pobre???
Por acaso vocês criam um dao que se chama dvdDAO e ai dentro do método ele sai persistindo musica, dvd e artista… mas tudo no mesmo corpo do método??? O que eu faço é que dentro do método dvdDao.create() eu chamo musicaDao.create()… simplesmente para reaproveitar código!!

Isso não é melhor??? Afinal, onde estou ferindo os relacionamentos da classe de negócio??[/quote]

Que tal pegar tudo esses DAO largar na lixeira e comecar a usar Hibernate? :mrgreen:

Sinceramente eu nao gosto desse negocio ai. Imagina a seguinte situacao, alem de DVD minha loja tem CD, Vinil. Ai tu vai criar uns DAO’s para eles.

CDDao
VinilDAO

Como tu faz? Fica espalhando instancia de MusicaDao dentro deles??

]['s

é seria isso sim… espalhamento de musicaDAO…

Bom… como você já citou uma vez fabgp, hibernate na cabeça e IoC na veia!!!

Eu só usando os daos por que sou obrigado a usá-los… por enquanto né…
Mas já comecei a estudar e spring e hibernate para sair desse mundo escuro dos daos!!!

Valeu pelo apoio… mas só vamos tomar cuidado para não dar um nó na cabeça da galera que tá começando… tipo igual esse nó que vcs colcaram na minha cabeça agora!!!

Abraços!!! :lol: :lol:

[quote=Thiago Senna]tipo igual esse nó que vcs colcaram na minha cabeça agora!!!

Abraços!!! :lol: :lol: [/quote]

Nós são bons, principalmente quando desatam :slight_smile:

Imagine se não houvesse estes nós, até hoje eu estaria fazendo tudo na mesma classe hehehe

Nao esquenta Thiago, eu tb uso coisas que nao gosto, mas o cara faz o que é preciso. :mrgreen:

]['s

Olá

Não há nada errado em usar DAOs. Eles continuam sendo ótimos como uma camada de abstração para separar a lógica de persistencia da lógica de negócios. DAO foi definido no livro Core J2EE Design Patterns como um pattern para abstrair e encapsular todos os acessos as fontes de dados sendo estas bases de dados, repositórios LDAP ou qualquer outra que se imaginar. Na realidade DAO é apenas um caso especial do pattern Strategy do GoF.

É importante saber que as vezes a separação é dificil de se conseguir e até mesmo impossível sem comprometer a performance ou sem forçar cada implementação a usar um mapeamento O/R ou um VO. Lembro que DAO pode usar um mapeamento O/R, mas DAO não é o mesmo que mapeamento O/R.

O importante é tentar que a interface DAO permita uma implementação eficiente sem ditar a estratégia de persistência. Falei interface porque se deve criar os DAOs como interfaces ao invés de classes.

Thiago, espero que você continue usando DAOs e cada vez melhor. Aproveite tudo o que foi falado aqui para organizar suas idéias e aprender. Não pense que o Fábio ou o CV nasceram sabendo tudo isto, eles devem ter lido muito. Este é o caminho.

[]s
Luca

Galera eu comecei a discursão e aprendi um monte de coisas, comecei a usar esse DAO, mas voltando a minha primeira pergunta…

Comecei a programar colocando as objetos de classe ao invés de de só o campo id.

Antes

class CD{
int id;
String desc;
int idArtista;
}

class Artista{
int id;
String desc;
}

Depois:

class CD{
int id;
String desc;
Artista a;
}

class Artista{
int id;
String desc;
}

Meu dilema agora é:

class Main{
CD cd = new CD();
Artista a = new Artista(); // Meio estranho não é? eu só presciso do id!
a.setId(1) ;
a.setNome(“EU”);
cd.setA(a) ;
}

Tou achando meio estranho ter que instanciar um objeto da classe Artista, popular e depois salvar no cd.

Pois digamos que eu esteja no servlet CD no método processaSalvar, eu só presciso do id do artista pra cadastrar o cd, mesmo assim tenho que le o request, instancia um objeto artista, setar a propriedade id depois setar no cd, Não é mais trabalhoso se eu só tivesse na classe cd o id do Artista?

Deu pra entender? (hehehehe)

Por enquanto não estou vendo vantagens.

Elias, quer uma dica pra resolver isso?

Você deveria estar usando 1 framework MVC que te popula VOs baseado no request, correto? Se ele for flexivel o suficiente, altere para aceitar popular a propriedade artista instanciando um objeto e passando a PK.

Não uso framework, apenas servlets.

Elias, isso não é estranho!!!

É mais trabalhoso… mas você não pode fazer suas classes como se fossem banco de dados… aqueles diagramas DER!!

se vocÊ precisa do ID, é só vc escrever o seguinte

cd.getArtista().getID()… pronto!!!

Abraços!

O pessoal tem cada fetiche estranho :mrgreen: