Dúvida relacionada a MVC (Diferença entre Modelo e Controle)

Gente MVC parece ser tão simples, mas mesmo assim estou cheia de dúvidas já lê bastante coisa, mas parece que estou um pouco perdida :cry: :cry: :cry:

Minha dúvida é relacionada ao que fica no Modelo e o que fica no controle, tipo o Modelo seria os meus beans que são uma representação encapsulada as minhas tabelas do banco de dados certo? E isso ficaria no modelo?

O controle poderia ser definido como as classes que possuem os métodos que são implementados nos botões que o usuário interage, definindo assim o que vai ser feito no sistema?

Mas se for assim onde ficam minhas classes de validação de dados e as classes de Dao?

OBS: Acho muita coisa relacionada servlet e sei la mais o que, só que eu nunca estudei java web. Então alguém poderia me dar um, exemplo, relacionado com uma aplicação desktop?

Editado: Quando pedi exemplos não é exemplos com código e sim exemplos com tipos de classes como classes de Dao, classes de validações e classes de regras de negocio, etc… (basta citar, não precisa programar nada)

1 curtida

O conceito é tanto usado para qualquer aplicação seja desktop, web mobile e outros. Vou te dar um exemplo, em todas as minhas aplicações eu uso o seguinte esquema:

model
Pessoa.java //aqui eu coloco como esta no banco, o nome da tupla, as colunas e relacionamento, caso existir

dao
PessoaDAO.java //aqui eu coloco os códigos que iram interagir com o banco, aqui eu coloco os métodos para inserir, alterar, excluir, pesquisar, listar, ou seja tudo o que eu preciso fazer com o banco;

controller
PessoaController.java //aqui eu recebo as informações vinda da tela, seja uma html, swing ou qualquer outra coisa e caso haja a necessidade de manipular essa informação no banco eu invoco a dao tudo aqui.

Tem programadores que colocam as regras de negócio no controller, eu prefiro criar um lugar só para eles (business) e como eu faço com a dao, uso o mesmo principio para o business.

Espero ter ajudado

1 curtida

Você encontra muita coisa relacionada a web, pois foi nesse ambiente que o conceito surgiu e para Desktop ele acaba sendo “adaptado” eu diria.

As classes de modelo são classes que manipulam os dados, seja usando getters e setters em um bean, ou persistindo-os na base de dados ou outro repositório como um arquivo xml por exemplo (o DAO também é uma classe de modelo).

Já as classes de controle manipulam as classes de modelo e visualização, além de realizarem validações também.

Imaginemos um sistema desktop de cadastro de clientes, você teria uma classe de controle:

public class ClienteController {

   public void listaClientes() {

      ClienteModelDAO dao = new ClienteModelDAO();
      
      ClienteForm form = new ClienteForm(); // seu frame aqui
      form.carregaTabela(dao.lista()); // o método lista retorna uma List<Cliente> (bean no caso)

   }

}

Clareou mais as idéias?

Acho que você acabou confundindo. O controller não deve ser responsável por chamar a View. Porque fizemos sistemas em camadas? Para caso um dia eu queira migrar de um tecnologia nova eu consiga. Pense que nesse caso você queira reaproveitar seu bean e seu controller para um sistema web? Você não consegue. Segue o exemplo ajustado:


public class ClienteView {

private ClienteController controller;

public ClienteView(){
   ClienteForm form = new ClienteForm();
   form.carregaTabela(controller.listaClientes());
}

}

public class ClienteController {

   public List<Cliente> listaClientes() {
      //aqui fica toda a regra de negócio..
      ClienteModelDAO dao = new ClienteModelDAO();
          
     return dao.lista(); // o método lista retorna uma List<Cliente> (bean no caso)

   }

}

[quote=paimei]Você encontra muita coisa relacionada a web, pois foi nesse ambiente que o conceito surgiu e para Desktop ele acaba sendo “adaptado” eu diria.

As classes de modelo são classes que manipulam os dados, seja usando getters e setters em um bean, ou persistindo-os na base de dados ou outro repositório como um arquivo xml por exemplo (o DAO também é uma classe de modelo).

Já as classes de controle manipulam as classes de modelo e visualização, além de realizarem validações também.

Imaginemos um sistema desktop de cadastro de clientes, você teria uma classe de controle:

public class ClienteController {

   public void listaClientes() {

      ClienteModelDAO dao = new ClienteModelDAO();
      
      ClienteForm form = new ClienteForm(); // seu frame aqui
      form.carregaTabela(dao.lista()); // o método lista retorna uma List<Cliente> (bean no caso)

   }

}

Clareou mais as idéias?[/quote]

Bruna,

Acho q vc está no caminho certo… Essas dúvidas são normais até definir bem o conceito e distinguir o que cada classe será responsável.

A grosso modo:

  • Camada M (Model)

    • Aki ficam os POJOs, Interfaces de DAOs, a implementação dos DAOs, classes utilitárias para manipulação de retornos do banco como rowmappers, classes genéricas de montagem e execução de querys e procedures… Enfim, tudo relacionado a comunicação com seu banco de dados.
  • Camada V (View)

    • Aki vão estar seus HTMLs, XHTMLs, arquivos de mensagens, conversores de dados utilizados em telas, arquivos de internacionalização, Managed Bean (JSF), Filters e etc… Em resumo tudo relacionado a views.
  • Camada C (Controller)

    • Essa basicamente cuida da parte de negócios da sua aplicação. Validações, lógicas de decisões, preparação de status para consultas a DAOs e etc… Ela eh a responsável pela comunicação entre a tela (View) e os DAOs (Model).

Em palavras bem simples é isso!

1 curtida

Dois tópicos interessantes sobre MVC que estava lendo esses dias: