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
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)
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.
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)
}
}
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)
}
}
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).