Bom dia!
Sempre desenvolvi utilizando swing, mesmo em aplicações mais complexas utilizando J2EE…
Hoje estou envolvido em desenvolvimento Web utilizando struts, mas tenho um conhecimento
razoável em JSF também, e como consequência, em MVC.
Estou procurando a algum tempo um framework MVC para swing, e os que eu encontrei são na
maioria de pessoas que sempre trabalharam com Struts e querem “reproduzir” o struts e
suas actions com swing, o que na minha opinião não é uma boa idéia, até pelo fato de eu não
ser muito fã desse framework e achar JSF muito mais inteligente.
Outros frameworks que eu encontrei pelo caminho são sempre baseados em extender classes…
que eu também não sou muito fã.
Sei que alguns vão dizer que Swing ja é MVC e isso é uma grande discussão pelo que eu vi,
mas Swing não implementa o MVC exatamente como conhecemos, ou pelo menos, como eu gostaria!
Sei também que a especificação do JSF prevê através dos render kit que seja criado um render
kit para swing, mas não encontrei nenhum, portanto, pensei em criar algo simples e prático.
Pensei em alguma coisa do tipo:
Eu tenho uma classe (Que seria minha view)
class View {
//Essa annotation implementaria o método ActionPerformed do ActionListener no controller
@Action
private JButton botao1;
//Essa annotation implementaria o método FocusLost do FocusListener no controller
@Action(listener=FocusListener, type=FocusLost)
private JButton botao2;
//Essa annotation implementaria todos os métodos do keyListener no controller
@Action(listener=Keylistener)
private JButton botao3;
}
class view_controller {
private void botao1_clicked(JButton botao1){
//Aqui eu faço alguma coisa...simples porém com um grande problema descrito
//no final da classe
}
private void botao2_FocusLost(JButton botao2){
//Aqui eu faço alguma coisa...simples porém com um grande problema descrito
//no final da classe
}
private void botao3_FocusListener(JButton botao3){
botao3.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
});
}
}
O Maior problema desse modelo seria acessar a partir de um método outros componentes
da minha view…por exemplo se eu tivesse eu JTextField que devesse ser preenchido quando
um botão é clicado… ou sei lá!
Pensei em três saídas:
1)Criar uma anotação para “Exportar” os componentes para o controller.Ex: @Export
Então utilizando como exemplo o botao1, ficaria assim:
@Export
@Action(listener=FocusListener, type=FocusLost)
private JButton botao2;
No meu controller, ele apareceria assim:
class view_controller {
private JButton botao2;
2)Outra solução seria gerar os getters and setters na minha classe view e exportá-la inteira
para o meu controller:
class view_controller {
private View view;
Aí para acessar os componentes eu precisaria utilizar um view.getBotao2();
- Simplesmente habilitar as duas formas…
Com relação a geração do controller, idéia é que seja criada a view, e depois disso o
controller e o model são gerados automaticamente, através de um comando como no rails.
A cada alteração na minha view, eu poderia regerar o controller automaticamente, claro que
sem nunca perder o código.
A vinculação entre view, controller e model eu penso em fazer via “Convention over configuration”,
mas liberar um annotation para especificar também.
Não estou pensando no model ainda, e se eu preciso fazer alguma coisa de muito especial pois
a idéia é mais facilitar a interação entre controller e view, e facilitar a manutenção nas
duas.
Claro que tem mais um monte de coisas que imagino em fazer, afinal, essa parte fala somente
sobre as interação entre view e controller, mas tenho que começar por algum lugar!!!
O que acham ? tem utilizade? devo continuar? sugestões? críticas? to viajando?