No mvc o Dao é Controller ou Model?

Olá Pessoal. Será que alguém poderia me esclarecer uma dúvida referente ao pattern MVC.

Suponha que eu tenho uma view que seria o Formulário para cadastro de pessoa.
Então eu também terei um model para Pessoa.(setters e getters)
Consequentemente eu terei um controller para gerenciar esse processo.

Eu já pesquisei bastante, mas tem uma coisa que não esclarece para mim.
Eu sei que o model é onde fica toda a lógica de negócio, setters e getters. Mas suponha que eu tenha os metodos para inserir na tabela Pessoa no db, esses métodos ficariam no DaoPessoa. Certo? Então a pergunta é esse Dao é model ou Controller, e é dentro dele que eu ponho os metódos de acesso(set() get())?

Quanto mais eu pesquiso. Mais eu me confundo, tem lugar que falam que Dao é Controller e tem lugar que falam que é model. Mas se for model eu não sei onde vai ficar a lógica de negócio. Ou eu coloco a lógica de negócio junto com os metodos de acesso ao banco?

Sei que tem bastante tópicos aqui no guj, mas nenhum esclareceu essa dúvida.

Obrigado. Se tiver algum exemplo na prática baseado nesse contexto eu agradeceria.

Ah mais uma coisa. Esse artigo esclareceu e me deixou com mais dúvida. Alguém tem alguma coisa aprovar ou questionar sobre ele.
http://www.devdaily.com/ooa-ood/java-model-view-controller-mvc-example-1

Valeu Pessoal.

1 curtida

A classe DAO faz parte da Model, nela você pega os dados da bean e persiste no banco ou ela pega os dados do banco e joga na bean.

Segue um artigo interessante sobre o assunto http://www.jandersonfc.com/mvc-da-teoria-para-a-pratica/

Obrigado pelo artigo, já havia lido antes, mas mesmo assim muito obrigado pela atenção.

Obrigado pela resposta.
Então eu poderia fazer da seguinte forma?

//  Model

   private String nome;
   public class Pessoa(){
      public Pessoa(){
 
      }
    
      public void setNome(String pNome){
        this.nome = pNome;
      }
      public String getNome(){
       return this.nome;
      }
   }

//No meu Dao

public class DaoPessoa(){

   public DaoPessoa(){

   }
   public insertPessoa(Pessoa p){
      //Chama conexão
     //Insere p.getText() no banco
   }
}

//No meu Control

public class ControlCadastro(){
  
   public ControlCadastro(){

   }

   public void inserirNoBanco(){
     Pessoa p = new Pessoa();
     p.setNome("Antônio"); //Supondo que esse seja o que eu peguei da view.

    DaoPessoa daoPessoa = new DaoPessoa();
    dao.insertPessoa(p);
     
     
   }

}

Dessa forma é errado? ou certo.

1 curtida

[quote=r-ngarcia][quote]
Segue um artigo interessante sobre o assunto http://www.jandersonfc.com/mvc-da-teoria-para-a-pratica/
[/quote]

Obrigado pelo artigo, já havia lido antes, mas mesmo assim muito obrigado pela atenção.

Obrigado pela resposta.
Então eu poderia fazer da seguinte forma?

//  Model

   private String nome;
   public class Pessoa(){
      public Pessoa(){
 
      }
    
      public void setNome(String pNome){
        this.nome = pNome;
      }
      public String getNome(){
       return this.nome;
      }
   }

//No meu Dao

public class DaoPessoa(){

   public DaoPessoa(){

   }
   public insertPessoa(Pessoa p){
      //Chama conexão
     //Insere p.getText() no banco
   }
}

//No meu Control

public class ControlCadastro(){
  
   public ControlCadastro(){

   }

   public void inserirNoBanco(){
     Pessoa p = new Pessoa();
     p.setNome("Antônio"); //Supondo que esse seja o que eu peguei da view.

    DaoPessoa daoPessoa = new DaoPessoa();
    dao.insertPessoa(p);
     
     
   }

}

Dessa forma é errado? ou certo.[/quote]

isso é o usual. ta certo

Está correto :stuck_out_tongue:

A sua solução está correta :smiley: .

Muito obrigado pessoal. Vocês ajudaram bastante. Só através de um tópico mesmo para mim conseguir esclarecer toodas as minhas dúvidas.
Valeu. :slight_smile:

Então quer dizer que no padrão mvc eu SEMPRE vou ter o DAO?

Não, um não está ligado ao outro, apesar de você quase sempre ver os 2 juntos.

A camada Model do modelo MVC, cuida também da persistência, e o DAO é um pattern que abstrai isso pra você, pra você nem precisar se preocupar em como é feita a implementação enquanto implementa sua regra de negócio.

Se quiser fazer a persistência sem o DAO, ainda pode dizer que está usando o Modelo MVC.

Certo, entendi,
Outra duvida que surgiu neste post, foi a seguinte, como vc disse geralmente dao mvc andam juntos, mais o Dao fica dentro da camada model ? Estaria errado ou fora do padrão se eu criasse outra camada para DAO ?

Pode criar uma outra “camada” acoplada ao modelo… Uma solução interessante para o DAO é criar um genérico… que consiga lidar com todas as entidades
Dá uma olhada nesse post: http://www.guj.com.br/java/276957-duvida-com-melhorias-dao-generic-com-hibernate

[quote=diegohsi]Certo, entendi,
Outra duvida que surgiu neste post, foi a seguinte, como vc disse geralmente dao mvc andam juntos, mais o Dao fica dentro da camada model ? Estaria errado ou fora do padrão se eu criasse outra camada para DAO ?[/quote]

Você quer dizer criar o modelo MVCP? Model View Controller Persistence? hehehehe

Brincadeira, bom, tudo depende da maneira que você olha, porque é conceitual. Um amigo meu diz que prefere pensar em um modelo multicamadas que se fossem colocadas no MVC ficaria algo como:

Model - Camada de domínio, camada de negócio, camada de persistência
View - Sua tela.
Controller - Camada de controle, que fica entre a view e a regra de negócio.

[quote=digaoneves][quote=diegohsi]Certo, entendi,
Outra duvida que surgiu neste post, foi a seguinte, como vc disse geralmente dao mvc andam juntos, mais o Dao fica dentro da camada model ? Estaria errado ou fora do padrão se eu criasse outra camada para DAO ?[/quote]

Você quer dizer criar o modelo MVCP? Model View Controller Persistence? hehehehe

Brincadeira, bom, tudo depende da maneira que você olha, porque é conceitual. Um amigo meu diz que prefere pensar em um modelo multicamadas que se fossem colocadas no MVC ficaria algo como:

Model - Camada de domínio, camada de negócio, camada de persistência
View - Sua tela.
Controller - Camada de controle, que fica entre a view e a regra de negócio.[/quote]
Obrigado, agora entendi, sempre tive essa dúvida entre separar ou nao o dao do mvc, mais agora compreendi.