Ablaze
Setembro 17, 2021, 1:10pm
#1
Estou usando o padrão MVC em uma aplicação desktop e gostaria de saber onde a camada do controller se aplicaria. pelo que sei o controller é responsável por ligar o model e a view. Ele pega os dados da view e manda pro model. Tentei implementar em uma aplicação desktop mas não sei se está correto. Eu codifico os dados da view no controller e chamo o controller na view para gerenciar os dados. Mandarei um pequeno exemplo abaixo. Alguém poderia informar se fiz correto ?
Camada controller
public class PacienteController {`
private TelaPaciente view;
public PacienteController(TelaPaciente view) {
this.view = view;
}
public void salvar() {
Paciente paciente = new Paciente();
Endereco endereco = new Endereco();
paciente.setNome(this.view.getTfNome().getText());
paciente.setIdade(Integer.parseInt(this.view.getTfIdade().getText()));
paciente.setCpf(this.view.getTfCpf().getText());
if (this.view.getrFeminino().isSelected()) {
paciente.setSexo(this.view.getrFeminino().getText());
} else {
paciente.setSexo(this.view.getrMasculino().getText());
}
endereco.setUf(this.view.getCbEstado().getSelectedItem().toString());
endereco.setBairro(this.view.getTfBairro().getText());
endereco.setCep(this.view.getTfCep().getText());
endereco.setCidade(this.view.getCbCidade().getSelectedItem().toString());
endereco.setNumero(Integer.parseInt(this.view.getTfNumero().getText()));
endereco.setRua(this.view.getTfRua().getText());
paciente.setEndereco(endereco);
repositorio.salvarPaciente(paciente, "salvar");
}
Camada view
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
this.controller.salvar()
}
Achei que essa abordagem que vc fez ficou bacana. Vc criou uma dependência da view com a controller e vice-e-versa neh.
1 curtida
Ablaze
Setembro 17, 2021, 4:39pm
#3
Isso mesmo. Eu fiz o gerenciamento dos dados da view na camada controller e na camada da view eu apenas chamo o controller para realizar o gerenciamento. Minha dúvida era se minha lógica em relação ao controller estava correta. Como vc achou legal, acredito que esteja tudo ok. Obrigado por responder!
1 curtida
Por curiosidade, vc poderia mandar o código das classes View e a Controller (dessa view) pra gente dá uma olhada?
Ablaze
Setembro 17, 2021, 5:27pm
#5
Posso sim. Se tiver algo errado ou estranho pode me avisar. Estou aqui para aprender.
Controller
public class PacienteController implements GenericInterfaceController {
private TelaPaciente view;
public PacienteController(TelaPaciente view) {
this.view = view;
}
@Override
public void atualizarTabela() {
PacienteDAO repositorio = new PacienteDAO();
ArrayList<Paciente> pacientes = repositorio.listarTodos();
DefaultTableModel modelo = new DefaultTableModel();
modelo.addColumn("ID");
modelo.addColumn("Nome");
modelo.addColumn("Idade");
modelo.addColumn("CPF");
modelo.addColumn("Sexo");
modelo.addColumn("UF");
modelo.addColumn("CEP");
modelo.addColumn("Cidade");
modelo.addColumn("Bairro");
modelo.addColumn("Rua");
modelo.addColumn("Número");
for (Paciente paciente : pacientes) {
modelo.addRow(new Object[]{
paciente.getId(),
paciente.getNome(),
paciente.getIdade(),
paciente.getCpf(),
paciente.getSexo(),
paciente.getEndereco().getUf(),
paciente.getEndereco().getCep(),
paciente.getEndereco().getCidade(),
paciente.getEndereco().getBairro(),
paciente.getEndereco().getRua(),
paciente.getEndereco().getNumero(),});
this.view.getTabelaPaciente().setModel(modelo);
}
}
@Override
public void salvar() {
Paciente paciente = new Paciente();
Endereco endereco = new Endereco();
PacienteModel validar = new PacienteModel();
paciente.setNome(this.view.getTfNome().getText());
paciente.setIdade(Integer.parseInt(this.view.getTfIdade().getText()));
paciente.setCpf(this.view.getTfCpf().getText());
if (this.view.getrFeminino().isSelected()) {
paciente.setSexo(this.view.getrFeminino().getText());
} else {
paciente.setSexo(this.view.getrMasculino().getText());
}
endereco.setUf(this.view.getCbEstado().getSelectedItem().toString());
endereco.setBairro(this.view.getTfBairro().getText());
endereco.setCep(this.view.getTfCep().getText());
endereco.setCidade(this.view.getCbCidade().getSelectedItem().toString());
endereco.setNumero(Integer.parseInt(this.view.getTfNumero().getText()));
endereco.setRua(this.view.getTfRua().getText());
paciente.setEndereco(endereco);
validar.validarPaciente(paciente, "salvar");
}
@Override
public void editar() {
Paciente paciente = new Paciente();
Endereco endereco = new Endereco();
PacienteModel validar = new PacienteModel();
int codigo = Integer.parseInt(String.valueOf(this.view.getTabelaPaciente().
getValueAt(this.view.getTabelaPaciente().getSelectedRow(), 0)));
paciente.setId(codigo);
paciente.setNome(this.view.getTfNome().getText());
paciente.setIdade(Integer.parseInt(this.view.getTfIdade().getText()));
paciente.setCpf(this.view.getTfCpf().getText());
if (this.view.getrFeminino().isSelected()) {
paciente.setSexo(this.view.getrFeminino().getText());
} else {
paciente.setSexo(this.view.getrMasculino().getText());
}
endereco.setUf(this.view.getCbEstado().getSelectedItem().toString());
endereco.setBairro(this.view.getTfBairro().getText());
endereco.setCep(this.view.getTfCep().getText());
endereco.setCidade(this.view.getCbCidade().getSelectedItem().toString());
endereco.setNumero(Integer.parseInt(this.view.getTfNumero().getText()));
endereco.setRua(this.view.getTfRua().getText());
paciente.setEndereco(endereco);
validar.validarPaciente(paciente, "alterar");
}
@Override
public void bloquearCampos(boolean bloquear) {
this.view.getTfNome().setEnabled(!bloquear);
this.view.getTfBairro().setEnabled(!bloquear);
this.view.getrMasculino().setEnabled(!bloquear);
this.view.getrFeminino().setEnabled(!bloquear);
this.view.getTfCep().setEnabled(!bloquear);
this.view.getTfCpf().setEnabled(!bloquear);
this.view.getTfIdade().setEnabled(!bloquear);
this.view.getTfNumero().setEnabled(!bloquear);
this.view.getTfRua().setEnabled(!bloquear);
this.view.getCbCidade().setEnabled(!bloquear);
this.view.getCbEstado().setEnabled(!bloquear);
}
@Override
public void limparCampos() {
this.view.getTfNome().setText("");
this.view.getTfBairro().setText("");
this.view.getTfCep().setText("");
this.view.getTfCpf().setText("");
this.view.getTfIdade().setText("");
this.view.getTfNumero().setText("");
this.view.getTfRua().setText("");
this.view.getrFeminino().setSelected(false);
this.view.getrMasculino().setSelected(false);
this.view.getCbCidade().removeAllItems();
}
}
@Override
public void btnAlterar() {
try {
this.view.setFuncao("alterar");
PacienteDAO repositorio = new PacienteDAO();
int linha = this.view.getTabelaPaciente().getSelectedRow();
long codigo = Long.parseLong(String.valueOf(this.view.getTabelaPaciente().getValueAt(linha, 0)));
Paciente pacienteEncontrado = repositorio.listarPorId(codigo);
if (pacienteEncontrado == null) {
bloquearCampos(true);
} else {
bloquearCampos(false);
}
this.view.getTfNome().setText(pacienteEncontrado.getNome());
this.view.getTfCpf().setText(pacienteEncontrado.getCpf());
this.view.getTfCpf().setEnabled(false);
this.view.getTfIdade().setText(String.valueOf(pacienteEncontrado.getIdade()));
this.view.getTfCep().setText(pacienteEncontrado.getEndereco().getCep());
this.view.getTfRua().setText(pacienteEncontrado.getEndereco().getRua());
this.view.getTfBairro().setText(pacienteEncontrado.getEndereco().getBairro());
this.view.getTfNumero().setText(String.valueOf(pacienteEncontrado.getEndereco().getNumero()));
this.view.getCbEstado().setSelectedItem(pacienteEncontrado.getEndereco().getUf());
this.view.getCbCidade().setSelectedItem(pacienteEncontrado.getEndereco().getCidade());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Escolha um paciente para editar!");
}
}
@Override
public void btnExcluir() {
try {
PacienteDAO repositorio = new PacienteDAO();
int linha = this.view.getTabelaPaciente().getSelectedRow();
long codigo = Long.parseLong(String.valueOf(this.view.getTabelaPaciente().getValueAt(linha, 0)));
Paciente paciente = repositorio.listarPorId(codigo);
switch (JOptionPane.showConfirmDialog(null, " Tem certeza que deseja excluir ? ", "Confirmar exclusão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)) {
case 0:
repositorio.excluir(paciente);
break;
case 1:
break;
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Escolha um paciente para excluir!");
}
View
public class TelaPaciente extends javax.swing.JInternalFrame {
private String funcao;
private PacienteController controller;
/**
* Creates new form TelaPaciente
*/
public TelaPaciente() {
initComponents();
controller = new PacienteController(this);
this.controller.bloquearCampos(true);
this.controller.atualizarTabela();
}
private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.controller.btnExcluir();
this.controller.atualizarTabela();
}
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here
if (this.funcao.equals("salvar")) {
this.controller.salvar();
this.controller.atualizarTabela();
this.controller.bloquearCampos(true);
} else if (this.funcao.equals("alterar")) {
this.controller.editar();
this.controller.atualizarTabela();
this.controller.bloquearCampos(true);
}
}
private void btnCancelarPesquisaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.controller.atualizarTabela();
}
private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.controller.btnAlterar();
}
private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.controller.limparCampos();
this.controller.bloquearCampos(false);
this.funcao = "salvar";
}
private void btnLimparActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.controller.limparCampos();
}
Essa ideia está muito boa pra mim. A separação deixou a responsabilidade bem definida. Uma observação que tenho é (e não tem nada a ver com a view e a controller) vc não usar DefaultTableModel . Prefira criar sua propria model herdando de AbstractTableModel .
1 curtida