Pessoal, já estou em fase de testes de um framework que estou desenvolvendo, seu foco único (por enquanto), é definir desacoplamento total no desenvolvimento em camadas utilizando Swing na camada de visão. Ou seja: Ter as classes de modelo, as de controle e as de visão, sem ter dependencias (inners, etc.)
Gostaria de um feedback de vocês, no que poderia incrementar ou agregar a idéia. O funcionamento dele, para alguns, vai lembrar o Genesis (na estratégia de binding), mas quem conhece bem, vai ver as diferenças.
REGRAS:
Todas as classes controladoras deverão herdar da superclasse: swingmvc.actions.SwingMVCAction (esta, por sua vez, contém um método invocador “execute”)
Dentro das controladoras, não precisa ter nenhum tipo de configuração (xmls, annotations, nada…), você apenas deve estar ciente que: Os métodos lá contidos, podem ou não ser “bindados” com os componentes da view. Tudo irá depender de como você irá configurar a sua view.
Ex:
Controller extends SwingMVCAction {
private JPanel painelPrincipal;
public void setPainel(JPanel painel) {
this.painelPrincipal = painel;
}
public void gravar() {
tal.gravar...
}
}
A VIEW:
Precisei fazer este framework para trabalhar em conjunto com o SwingBean, mas, fiz ele pra tentando ser o máximo possível independente de frameworks, Ides, etc. Por isso as anotações estão definidas para serem SOMENTE em cima dos métodos:
[code]MinhaView {
public MinhaView() {
swingmvc.bind.Binder binder = new Binder();
binder.bind(this, new Controlador());
// Isso fará com que haja o binder do form com o controller
private JButton btnGravar;
@IsAction(method=“gravar”, type=TypeActions.CLICKED)
public void getBtnGravar() {
return btnGravar;
}
//outra diferença abaixo:
private JPanel painelPrincipal;
@IsCapsule(method=“setPainelPrincipal”)
public void getPainelPrincipal() {
return painelPrincipal;
}
/*
Este cara, faz com que na hora do bind, ele execute o método (method) que deve estar presente no controller, encapsulando o retorno da invocação do método anotado com @IsCapsule, logo, como pode ver no Controller lá em cima, fazendo o controlador conhecer quem você quiser de componentes presentes na View… para poder manipula-los dentro dos outros métodos…
*/
}
}[/code]
O Bind entende a interface TypeActions, que detem todas as principais ações usadas no dia-a-dia, como CLICKED, DOUBLECLICKED, HASFOCUS, KEYPRESS, etc. E adiciona o listener, conforme a tal.
DAS DIFERENÇAS COM O GENESIS:
O intuido deste framework é principalmente separar as Actions (todos os handlers em sí) da View.
Desculpem os erros de portugues… bom, estou preparado para as pedradas…
Em breve estarei disponibilizando no SF. Valeu…