Saudações pessoal!
Estou tentando implementar um padrão MVC, do meu jeito aqui, usando Observer, faço isso da seguinte maneira:
em meu pojo, defini um metodo que notifica os observadores e seta uma string action e uma string método, essas strings utilizo em uma classe que ira envocar usando reflection a action e o metodo definidos no pojo. Fiz alguns teste aqui, e funcionou perfeito, como que eu vou fazer pra retornar uma exception? Digo, tenho uma idéia aqui, criaria um observable apenas para setar mensagens, ou seja, na primeira camada do MODEL, onde a exception chegaria eu setada esse Objeto de mensagens, e a tela observaria esse cara e jogaria um dialog na tela populando ela. sei la… Queria saber se alguém tem alguma sugestão? pode me ajudar com isso?
Abraço a todo comunidade!
[code]public class MinhaTelaSwing {
private JButton botaoOk;
private JButton botaoCancelar;
private JButton botaoFazQualquerCoisa;
private JTextField textFieldCoisaDigitada;
public MinhaTelaSwing() {
// ... blablabla
}
public void addOkListener(ActionListener listener) {
botaoOk.addActionListener(listener);
}
public void addCancelarListener(ActionListener listener) {
botaoCancelar.addActionListener(listener);
}
public void addQualquerCoisaListener(ActionListener listener) {
botaoFazQualquerCoisa.addActionListener(listener);
}
public String getCoisaDigitada() {
return textFieldCoisaDigitada.getText();
}
}[/code][code]public class MeuController {
private final MinhaTelaSwing tela;
private final MinhaClasseModel model;
public MeuController(MinhaTelaSwing tela, MinhaClasseModel model) {
this.tela = tela;
this.model = model;
tela.addOkListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// fazer algo.
}
});
tela.addCancelarListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// fazer algo.
}
});
tela.addQualquerCoisaListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// fazer algo.
}
});
}
}[/code]Isso daí já deve ser o suficiente para você. Tente minimizar a quantidade de acessos a componentes swing e AWT na sua controller e mais ainda na model.
É possível (SE VOCÊ QUISER E PRECISAR) eliminar por completo o uso de swing na tua controller de forma que você possa reutilizá-la sem precisar de alterações se quiser que o projeto seja web, webservice ou qualquer outra coisa depois. Para isso, crie uma interface (MinhaTela) e fazer a sua classe já existente (MinhaTelaSwing) implementá-la. Faça a controller usar a interface ao invés da tua classe que está presa ao swing e crie novas classes e interfaces para eliminar o ActionListener e o ActionEvent.
victorwss obrigado por responder, mas onde entraria o observer nesse seu mvc? do jeito que eu pensei está totalmente fora? eu queria apenas umas sugestão para complementar minha idéia…
obrigado novamente!
Abs.
[quote=AlexSlender]victorwss obrigado por responder, mas onde entraria o observer nesse seu mvc? do jeito que eu pensei está totalmente fora? eu queria apenas umas sugestão para complementar minha idéia…
obrigado novamente!
Abs.[/quote]
Os listeners representam o pattern Observer. Não precisa ter uma classe chamada Observer (como por exemplo java.util.Observer) para implementar o padrão. Aliás, se você for ler aquele livro “Use a cabeça - padrões de projeto”, ele diz para NÃO usar a classe java.util.Observer.
Na verdade não entendi direito a tua mensagm original, não ficou claro. Mas usar reflection para implementar o observer com “actions” codificadas na forma de strings não me parece ser uma boa forma de resolver o problema.
ahh sim, entendi, até o momento pensava que o padrão estava ligado diretamente a java.util.Observer, obrigado por responder, vou pesquisar um pouco mais, mas que pena tava ficando legal aqui, tomei base no projeto web que trabalho na empresa com relação ao reflection e as target…