MVC - Model (modelo) tem relação com a Persistência?

Gostaria de saber se a camada Model tem alguma relação com a Persistência (No Banco de dados)?

Se sim, qual a relação entre um e outro ?

Não sei se fui bem claro com minha duvida, mas de qualquer jeito muito obrigado a todos

Sim. O que se persiste é justamente os dados do model. Por isso, há uma relação quase de 1:1 entre os objetos e as tabelas. Note que eu falei “quase”. O mapeamento objeto/relacional não é tão direto assim.

Em termos de classe, a relação fica entre as classes do model e as classes de persistência. Há duas abordagens comuns aqui.
a) Criar classes DAO, classes do model que não conhecem o Dao, e usar uma terceira classe para integrar os dois;
b) Criar classes DAO, fazer com que o model chame o DAO, e as classes usam apenas o model.

Qual das duas é melhor? Boa pergunta. Já usei os dois modelos e não vi vantagem significativa em nenhum deles sobre o outro.

sim a camada model é a camada que servira de modelo para a criação das tabelas da base, quando se trabalha com anotations, os atributos da model são anotados para virarem relacionamentos e colunas nas tabelas, mais como nosso maigo acima disse QUASE!!! pois existem 2 formas de realizar o mapeamento um deles é esse que citei acima através de anotations dentro do proprio model, e o outro jeito que é através do XML puro, quando se trabalha com XML é ele que faiz a intermediação entre as classes de models e as tabelas no banco, espero ter ajudado!

O xml não faz intermediação nenhuma. Ele só descreve para as classes de persistência como o model é. Na verdade, ele faz exatamente o mesmo que os annotations, dá informações as classes de persistência sobre o que elas estão persistindo.

Annotations e xml só são necessários se suas classes de persistência usam algum mecanismo reflexivo automático, como o Hibernate faz. No final das contas, sempre quem faz a persistência é o Hibernate.

Entretanto, nada te impediria de ter classes de persistência que conheçam seu model, e usem JDBC diretamente para gravar dados, sem qualquer tipo de anotação ou XML.

[quote=ViniGodoy]Sim. O que se persiste é justamente os dados do model. Por isso, há uma relação quase de 1:1 entre os objetos e as tabelas. Note que eu falei “quase”. O mapeamento objeto/relacional não é tão direto assim.

Em termos de classe, a relação fica entre as classes do model e as classes de persistência. Há duas abordagens comuns aqui.
a) Criar classes DAO, classes do model que não conhecem o Dao, e usar uma terceira classe para integrar os dois;
b) Criar classes DAO, fazer com que o model chame o DAO, e as classes usam apenas o model.

Qual das duas é melhor? Boa pergunta. Já usei os dois modelos e não vi vantagem significativa em nenhum deles sobre o outro.[/quote]

Vini, me tira uma dúvida. Eu normalmente uso uma classe para integrar os dois. Porque acho que o model fica mais desacoplado, não dependendo de DAOs. Até na hora de criar o objeto Model ele fica mais leve, porque não tem um DAO dentro dele. Você concorda com isso?

Colocando o DAO dentro do Model o código não fica mais acoplado?

[quote=javablue][quote=ViniGodoy]Sim. O que se persiste é justamente os dados do model. Por isso, há uma relação quase de 1:1 entre os objetos e as tabelas. Note que eu falei “quase”. O mapeamento objeto/relacional não é tão direto assim.

Em termos de classe, a relação fica entre as classes do model e as classes de persistência. Há duas abordagens comuns aqui.
a) Criar classes DAO, classes do model que não conhecem o Dao, e usar uma terceira classe para integrar os dois;
b) Criar classes DAO, fazer com que o model chame o DAO, e as classes usam apenas o model.

Qual das duas é melhor? Boa pergunta. Já usei os dois modelos e não vi vantagem significativa em nenhum deles sobre o outro.[/quote]

Vini, me tira uma dúvida. Eu normalmente uso uma classe para integrar os dois. Porque acho que o model fica mais desacoplado, não dependendo de DAOs. Até na hora de criar o objeto Model ele fica mais leve, porque não tem um DAO dentro dele. Você concorda com isso?

Colocando o DAO dentro do Model o código não fica mais acoplado?[/quote]

O DAO faz parte do modelo.
Mas nada te impede de criar subcamadas e outras estratégias afim de desacopla-los. Mas o DAO continua fazendo parte do modelo.

A propósito, gostaria de lançar um alerta: Model TEM a camada de persistência, mas ele NÃO É!

[quote=Tchello][quote=javablue][quote=ViniGodoy]Sim. O que se persiste é justamente os dados do model. Por isso, há uma relação quase de 1:1 entre os objetos e as tabelas. Note que eu falei “quase”. O mapeamento objeto/relacional não é tão direto assim.

Em termos de classe, a relação fica entre as classes do model e as classes de persistência. Há duas abordagens comuns aqui.
a) Criar classes DAO, classes do model que não conhecem o Dao, e usar uma terceira classe para integrar os dois;
b) Criar classes DAO, fazer com que o model chame o DAO, e as classes usam apenas o model.

Qual das duas é melhor? Boa pergunta. Já usei os dois modelos e não vi vantagem significativa em nenhum deles sobre o outro.[/quote]

Vini, me tira uma dúvida. Eu normalmente uso uma classe para integrar os dois. Porque acho que o model fica mais desacoplado, não dependendo de DAOs. Até na hora de criar o objeto Model ele fica mais leve, porque não tem um DAO dentro dele. Você concorda com isso?

Colocando o DAO dentro do Model o código não fica mais acoplado?[/quote]

O DAO faz parte do modelo.
Mas nada te impede de criar subcamadas e outras estratégias afim de desacopla-los. Mas o DAO continua fazendo parte do modelo.

A propósito, gostaria de lançar um alerta: Model TEM a camada de persistência, mas ele NÃO É!
[/quote]

Verdade, falha na minha comunicação. Mas o que eu quis dizer foi, se é melhor separar a regra de negócio do DAO. E sim, é tudo Model mesmo.

Eu também uso uma classe externa. Mas depende de quem seja o programador que vai usar meu model. Quando faço classes para terceiros usarem em scripts, costumo a deixas os dois juntos, até porque simplifica muito a interface fazer algo assim:

qualquerCoisa.set(X); qualquerCoisa.salvar();

Quanto ao acoplamento, se você tiver inversão de dependência, não fica tão mais acoplado estar dentro ou fora do model. Quando as chamadas ao DAO estão dentro do model, também fica mais fácil passar parâmetros privados, pois não há necessidade de reflexão para acessa-los (o que não é um problema se vc usar Hibernate, como normalmente fazemos, mas pode ser mais didático se você estiver dando aula de JDBC).