Qual a melhor maneira de passar os dados da view para o controller?

Pessoal qual a melhor forma de passar os dados da view pro controller no MVC em java? Eu posso instanciar uma classe de modelo na view para passar o objeto para o controller, ou isso quebra a arquitetura MVC?

1 curtida

Geralmente se usa o padrão Observer/Observable, este é um exemplo usando um comando:

// models
interface Comando {
  void executar(Object resultado);
}

class Pessoa {
  nome;
  idade;
}

class PessoaDAO {
  void salvar(pessoa);
}

// view
class TelaCadastro {
  nomeTextField;
  idadeTextField;
  salvarButton;
  comandoSalvar;
  pessoaDAO; // setter e getter
  construtor() {
    salvarButton.addActionListener(acaoDoBotao());
  }
  String getNome() {
    return nome.getText();
  }
  void setNome(nome) {
    nomeTextField.setText(nome);
  }
  void salvar() {
    pessoa = new Pessoa(getNome(), getIdade());
    pessoaDAO.salvar(pessoa);
    comandoSalvar.executar("Sucesso" ou "Falha");
  }
}

// controle
class Controle {
  pessoaDAO = new PessoaDAO();
  telaCadastro = new TelaCadastro();
  // atribui os modelos
  telaCadastro.setPessoaDAO(pessoaDAO);
  // navegação
  telaCadastro.setComandoSalvar(
    if "Sucesso" {
      telaSucesso.setVisible(true);
      telaCadastro.setVisible(false);
      telaListaDePessoas.setVisible(true);
    } if "Falha" {
      telaErro.setVisible(true);
    }
  );
}

Acho que o MVC é somente a separação dos componentes e não tem relação entre a “comunicação” entre eles. A classe do modelo pode ser instanciada em qualquer lugar, mas os que são instanciados no controle geralmente são compartilhados em outras partes do sistema.