Padrão MVC

Alguem teria um exemplo com código bem básico sobre a utilização do padrão MVC?
Estou tendo dificuldades em aplicar esses conceitos. E mais, alguem recomenda algum livro sobre esse assunto?

Desde já muito obrigado!!!

Um bom livro é o JavaServer Pages Avançado da Ciência Moderna. Ele implementa os padrões de MVC Model 1 e Model 2 de uma maneira simples de entender. Um Framework que te oferece essa implementação é o Struts.

Eu nao gostaria de aplicar esse padrão utilizando JSP e nem Servlets
e mas só Java mesmo, pois nao sou muito de programação pra web, apesar de ser um setor que esta crescendo muito.

Ok, é que trabalho com web! Mais o design Pattern é o mesmo, vou tentar exeplicar a idéia.

Com o MVC você tem o Model-View-Controller (Modelo-Visualização-Controle) onde o coração de tudo é o controle.

Ou seja sua classe de modelo será a sua classe com as regras de negócio.
O controlador será uma classe onde dependendo de como vc implementar, vc vai passa a o nome da classe de modelo, ou um parâmetro informando a ação.

A visão será o seu formulário.

por exemplo em um evento no formulário vc chama o método do controlador e passa uma ação para ele executar sua classe de modelo.

Oi Richardson será que vc teria um código bem básico de exemplo pra eu poder entender melhor? É que pra quem tá no mundo java a pouco tempo é um pouco dificil pegar os conceitos apenas com teoria, isso não quer dizer que eu não tenha entendido, mas é que pra eu ter uma noção completa da implementação desse padrão um código de exemplo seria de grande ajuda. Não precisa ser nada de outro mundo, pode ser o exemplo mais básico que tem. Valew

Não vai dar pra por código, pois meu NetBeans não tá funcionando, e não sei usar o eclipse ainda. Mas vamos ver se dá pra eu ajudar.

Vamos supor que você esteja modelando um cadastro simples de clientes.

No seu formulário, você teria os campos a serem preenchidos. No evento do clique do botão, você passaria as informações do formulário para um objeto, que servirá de meio de transporte para os dados.

Por que é que esse objeto é necessário? Porque se a sua visão mudar, o impacto na aplicação é pequeno. Esse objeto diria o seguinte: “Não me importa como o usuário vê o sistema, coloque os dados em mim, e sinalize ao controlador que eu tenho novas informações para o modelo processar”.

Como o controlador é avisado? Geralmente, se usa uma “ação”. Por exemplo:

  //Isso está no evento do clique do botão
  Formulario f = new Formulario();
  f.pegaDados(frameComOsDados);
  Controlador c = Controlador.getInstance();
  String resultado = c.facaAcao("cadastroCliente", f);
  if (resultado == "sucessoCadastro") {
    //td ocorreu bem
  } else {
    //algo deu errado
  }

OK. O seu controlador, no método facaAcao(), deverá mapear a String “cadastroCliente” para a ação correspondente. Nos modelos mais bem implementados, você usaria reflexão para descobrir e instanciar a classe de ação correspondente, mas por simplicidade vamos “marretar” com um HashMap.

public String facaAcao(String acao, Formulario f) {
  AcaoBasica ab = hashMapComAcoes.get(acao);
  return ab.facaAcao(f);
}
public class CadastroClienteAcao implements AcaoBasica {
  //este método vem da interface
  //ela retorna uma string informando o próximo passo
  //a ser tomado pelo controlador
  //implementacao horrível, mas é só pra ilustrar
  public String facaAcao(Formulario f) {
    //Aqui você acessa seu modelo
    Modelo m = Modelo.getInstance();
    m.cadastra(f);
    return "sucessoCadastro";
  }
}

OK. Você deve estar se perguntando: pra que tudo isso??? Meu form acessa o controlador, que acessa uma ação, que acessa meu modelo.

É que dessa forma, tanto sua visão como seu modelo tornam-se independentes. O controlador, juntamente com as ações, como o próprio nome indica, controlam a aplicação.

Espero que tenha sido claro. Acredite, embora isso possa parecer desnecessário, com a experiência você ve que ajuda bastante.

Galera, onde posso achar material referente ao padrão MVC e exemplos prontos?
Desde já agradeço!!!

Mais conteúdo sobre MVC recomendo acessar este link: http://www.guj.com.br/posts/list/129277.java
Vou adicionar este tópico como referência na lista de links sobre MVC que estão na primeira postagem do link que estou recomendando.
ATENÇÃO: Não confunda MVC com CAMADAS. Uma coisa é MVC, outra coisa é Camadas!
Espero ter colaborado! :wink: