Mvc

Ei pessoal, tudo bem ? Primeiro post aqui :smiley:

Estou querendo aprender a trabalhar com MVC no Java, mas estou meio perdido.
Li algumas coisas na internet mas não entendi muita coisa.

O conceito acho que já sei.

Model
Vai mecher com o banco de dados, e retornar algum dado.

View
Pega os dados retornados e exibe para o usuário

Controller
Captura o “evento” da View,faz algum tratamento e manda para o Model correspondente.

Mas to perdidão em como começar com java. Aqueles XML, não entendi nada nos que eu li. Os tutoriais só falavam “coloca isso ali”, “poe isso aqui”. Dai acumulou um monte de duvias “Mas pra quê? Pra que isso serve?”
Sei que tem que usar alguns frameworks(Spring,Struts,JSf,blábláblá), mas não sei qual faz parte de qual “camada”.

Tem algum material que indiquem para começar. Ou até algo que eu deva saber antes de me meter com MVC?
Eu aprendi java na escola, não trabalho com java. Sou curioso!

Entendo OO, java console, swing/awt, e JSP(nunca mexi, mas é igual à ASP: cliente envia o formulário(com uma página indicada)-> servidor recebe o form, trata e devolve alguma coisa.Com MVC não é tão simples assim, só indicar a página no form, ou eu compliquei tudo :shock: .)

Grande Abraço!

Se você tem pouca ou nenhuma experiência em Java, comece aplicando o MVC à projetos em Java Standard, sem banco de dados mesmo. Sua camada de modelo pode recuperar os dados de arquivos, por exemplo, ou nem isso, apenas guardá-los em listas durante a execução.
Para a camada de visão (view) você pode começar estudando swing, ou simplesmente exibindo em console.
Domine a linguagem primeiro, e depois comece a trabalhar com bancos de dados, frameworks e etc.

Neste tópico eu postei um exemplo de MVC extremamente simples, usando JSE e swing, se estiver procurando um ponto de partida.
http://www.guj.com.br/posts/list/118713.java

E ae davidtiagoconceicao! Valeu por me responder!.

A idéia do MVC então é separa tudo?

Seu projeto me esclareceu muitO!
Olhei seu projeto, vi como funcionava na pratica…
Dai montei o meu!

Mas me veio uma dúvida.
Posso fazer a leitura do resultset na View ? (que nem no método visualizar(), da classe View)
O que não poder ter na view é consultas com o banco de dados, nao é ?

Model

import java.sql.*; public class Modelo{ Connection cnn_used; public Modelo(Connection cnn_used){ this.cnn_used = cnn_used; } public void grava(Pessoa pessoa){ try{ Statement s = cnn_used.createStatement(); String ins_SQL = "INSERT INTO PESSOAS(NOME,TELEFONE)"; ins_SQL += "VALUES('" + pessoa.getNome() + "','" + pessoa.getTelefone() + "')"; s.executeUpdate(ins_SQL); }catch(Exception e){System.out.println(e.getMessage());} } public void deleta(Pessoa pessoa){ try{ Statement s = cnn_used.createStatement(); String del_SQL = "DELETE FROM PESSOAS WHERE NOME = '" + pessoa.getNome() + "'"; s.executeUpdate(del_SQL); }catch(Exception e){System.out.println(e.getMessage());} } public void altera(Pessoa pessoa){ try{ Statement s = cnn_used.createStatement(); String upd_SQL = "UPDATE PESSOAS SET TELEFONE = '" + pessoa.getTelefone() + "' WHERE NOME = '" + pessoa.getNome() + "'"; s.executeUpdate(upd_SQL); }catch(Exception e){System.out.println(e.getMessage());} } public ResultSet busca(){ try{ Statement s = cnn_used.createStatement(); String sel_SQL = "SELECT * FROM PESSOAS"; return s.executeQuery(sel_SQL); }catch(Exception e){System.out.println(e.getMessage());return null;} } public ResultSet busca(String Nome){ try{ Statement s = cnn_used.createStatement(); String sel_SQL = "SELECT * FROM PESSOAS WHERE NOME = '" + Nome + "'"; return s.executeQuery(sel_SQL); }catch(Exception e){System.out.println(e.getMessage()); return null ;} } }

View

[code]import java.sql.*;
public class MainView{
Modelo model;
Connection cnn;
Controlador control;
int opc;
String Nome;
String Telefone;
ResultSet rs;
public MainView(String bco){
try{
Class.forName(“com.mysql.jdbc.Driver”);
cnn = DriverManager.getConnection(bco);
model = new Modelo(cnn);
control = new Controlador(model);
while(true){
System.out.println(“1.Cadastro”);
System.out.println(“2.Edicao”);
System.out.println(“3.Exclusao”);
System.out.println(“4.Visualizar”);
System.out.println(“Escolha sua opcao:”);
opc = KeyBoard.KeyInt();
switch(opc){
case 1:{
inclusao();
break;}
case 2:{
edicao();
break;}
case 3:{
exclusao();
break;}
case 4:{
visualizar();
break;}

			}
		}
		
	}catch(Exception e){System.out.println(e.getMessage());}
}
public static void main(String[] args){
	new MainView("jdbc:mysql://localhost/teste?user=root&password=admin");
}
public void inclusao(){
	System.out.println("\nINCLUSAO");
	System.out.println("Digite o nome:");Nome = KeyBoard.KeyString();
	System.out.println("Digite o telefone:");Telefone = KeyBoard.KeyString();
	control.inserir(Nome,Telefone);
	System.out.println("\n\n");
}
public void edicao(){
	System.out.println("\nEDICAO");
	System.out.println("Digite o nome:");Nome = KeyBoard.KeyString();
	System.out.println("Digite o telefone:");Telefone = KeyBoard.KeyString();
	control.editar(Nome,Telefone);
	System.out.println("\n\n");
}
public void exclusao(){
	System.out.println("\nEXCLUSAO");
	System.out.println("Digite o nome:");Nome = KeyBoard.KeyString();
	control.excluir(Nome);
	System.out.println("\n\n");
}
public void visualizar(){
	System.out.println("\nVISUALIZANDO");
	rs = control.busca();
	try{
		while(rs.next()){
			System.out.print("Nome: " + rs.getString("NOME"));
			System.out.println("   Telefone: " + rs.getString("TELEFONE"));
		}
		System.out.println("\n\n");
	}catch(Exception e){System.out.println(e.getMessage());}
}

}

[/code]

Controller

import java.sql.*; public class Controlador{ Modelo model; public Controlador(Modelo model){ this.model = model; } public void inserir(String nome, String telefone){ Pessoa pessoa = new Pessoa(nome,telefone); model.grava(pessoa); } public void editar(String nome, String telefone){ Pessoa pessoa = new Pessoa(nome,telefone); model.altera(pessoa); } public void excluir(String nome){ Pessoa pessoa = new Pessoa(nome); model.deleta(pessoa); } public ResultSet busca(){ return model.busca(); } public ResultSet busca(String nome){ return model.busca(nome); } }

Pessoa

[code]public class Pessoa{
private String nome;
private String telefone;

public Pessoa(String nome, String telefone){
	this.nome = nome;
	this.telefone = telefone;
}
public Pessoa(String nome){
	this.nome = nome;
}
public String getNome(){
	return this.nome;
}
public String getTelefone(){
	return this.telefone;
}
public void setNome(String nome){
	this.nome = nome;
}
public void SetTelefone(String telefone){
	this.telefone = telefone;
}

}[/code]

O fluxo de dados ficou assim

view -> controller -> model -> controller -> view

Esta certo ?

Abraços!

scorpio, acredito que o mais indicado seria a camada de modelo tratar os result set, e à partir daí as informações serem atualizadas nas demais camadas, já que a idéia é promover a independência entre as camadas. Caso o result set seja tratado pela view, será criada uma dependência entre a visão e os dados do banco.

Então, no modelo eu poderia montar a string com o resultado edepois só mostrata para o usuário.

Por exemplo, se eu tenho uma caixa de lista(JList) e preciso preencher, no modelo posso criar um objeto DefaultListModel e retornar esse objeto. Daí na View eu coloco o conteúdo dele no JList.

Assim a View já não teria dependencia com o Banco de Dados.
Correto ?

Sim, você pode montar uma String, um Array, uma List, o que for mais interessante para a implementação.

Aaaaaa

Saquei.

Achei um texto interessante sobre MVC, alguns ja devem ter visto. Mas para quem não viu:

[quote=‘http://www.cfgigolo.com/2008/01/mvc-model-view-controller-e-os-tres-macacos/’][…]
Você provavelmente já escutou a história dos Três Macacos Sábios, não é mesmo? Muito possivelmente associada a Gandhi, que sempre levava consigo os três totens dos macaquinhos. Um os macacos está tampando os olhos, outro tampando os ouvidos e o terceiro tampando a boca, representando ?não veja o mal, não ouça o mal, não fale o mal?.

Da mesma forma, apresento os Macacos MVC (ou MVC Monkeys para os gringos?):

* A View é muda, mas faz gestos (user gestures) para o Controller e escuta mudanças no Model;
* O Model é cego, mas escuta o Controller e fala para a View sobre as mudanças nele próprio;
* O Controller é surdo, fala para o Model quando mudar de estado e vê os gestos da View.

[/quote]

Bom, vou procurar alguma coisa que fala COMO os frameworks atuam, principalmente em conjunto. Se alguém tiver algum material que seria bom eu ler, agradeço também.

Valeu pela atenção david!

uahuuha
legal!
Beleza cara, qualquer coisa poste aí!