É exatamente o que o título diz. Alguém pode me explicar como, por exemplo, em uma classe de controle eu manipulo dados fornecidos por um JTextField em um JFrame (sem passar a informação como parâmetro, claro)?
Um amigo me disse que eu deveria criar, nessa classe de controle, atributos públicos do mesmo tipo do componente cuja informação desejo capturar e apenas passar a referência. Esse método é recomendado? Se não, qual posso utilizar?
Trabalhe com objetos. Não é bom você criar atributos públicos para os componentes (JTextField, por exemplo). O controlador vai ficar muito acoplado à view. Ao invés disso, você pode ter um método que retorna um objeto preenchido. Por exemplo, se tua View tem um cadastro de pessoas, pode ter um método que retorna um objeto Pessoa. O controlador acessa este método que já traz o objeto Pessoa populado para ele manipular. É uma opção.
Entendi, Wagner, tentarei aplicar isso daqui para frente. Mas ainda tem uma coisa.
Deixe-me explicar o que estou tentando fazer. O trabalho (faço um curso técnico e este é o primeiro trabalho prático da turma, ou seja, saímos agora da teoria pura) é a produção de um sistema bancário com tudo o que tem direito.
O que vejo no código que estou fazendo é a repetição de trechos, nos formulários JFrame (em eventos), que pegam a informação de campos e mandam como parâmetro para um método (sacar, por exemplo). Além disso, trechos de verificação são frequentes, como, por exemplo, se a conta informada existe mesmo (a condição para um alerta aparecer deve estar no evento ou no método que busca a conta?). Não sei se é paranoia minha achar que isso não é recomendado. Por isso achei que trabalhando tudo na classe controle diminuiria o código nos eventos.
Alguém pode me dizer se estou me preocupando com bobagem ou se o que faço não é mesmo recomendado? E, se este for o caso, como posso proceder?
POO é uma questão de responsabilidades… De quem (qual entidade) que é a responsabilidade de verificar, por exemplo:
sacar: tem dinheiro? tem limite?
Acredito que é correto colocar essas ‘regras de negócio’ junto com a entidade que elas pertencem.
Afinal, se vc for utilizar o mesmo modelo (regras de negócio) em outra aplicação, e estas regras estiverem
dentro de um controller (eventos do jframe), imagine que beleza que iria ficar o 2º sistema compartilhando da mesma
lógica.
[quote=d34d_d3v1l]POO é uma questão de responsabilidades… De quem (qual entidade) que é a responsabilidade de verificar, por exemplo:
sacar: tem dinheiro? tem limite?
Acredito que é correto colocar essas ‘regras de negócio’ junto com a entidade que elas pertencem.
Afinal, se vc for utilizar o mesmo modelo (regras de negócio) em outra aplicação, e estas regras estiverem
dentro de um controller (eventos do jframe), imagine que beleza que iria ficar o 2º sistema compartilhando da mesma
lógica.
[/quote]
Entendi, valeu.
Estava pensando: é uma solução válida passar os componentes, que irão pegar as informações, como parâmetros para o método “sacar”, por exemplo? Aí toda a verificação ficaria dentro desse método, deixando para o evento do botão apenas o chamamento do método (e mais nada).
Tem que passar os dados, valores já tratados… tipo…
//no action do botão:
double num = 0;
try{
num = Double.parseDouble(campoDouble.getText());
if(num <= 0){
//erro, numero menor que zero
}
}catch(NumberFormatException n){
//erro, numero invalido
}
//se tudo estiver ok
Conta conta = new Conta();
boolean sacou = conta.sacar(num);
if(!sacou){
//erro ao sacar :)
}