Olá, gostaria de saber como implementar MVC Swing com Genesis.
Sei que o modelo(beans), seriam anotados com @Form e a visão anotados com @ViewHandler…
Como exemplo, tenho o bean Cliente:
@Form
public class Cliente{
private int id;
private String nome;
public Cliente(){
}
// getters e setters
}
Em seguida, tenho meu JFrame:
@ViewHandler
public CadastroCliente extends JFrame{
private Cliente c;
private SwingBinder binder;
public CadastroCliente(){
// contrução do frame....
c = new Cliente();
binder = new SwingBinder(this, aluno);
binder.bind();
}
}
Mas não tenho conhecimento de como implementar a camada Controller…
Se possível, gostaria de um exemplo…
o controller é o próprio genesis… agora, se tu quer saber das actions, tu pode tanto colocar no teu pojo o comportamento do mesmo qnt no view handler… veja as anotacoes @Action
Se eu criar um ClienteController, este deve ter uma referência ao Form(ViewHandler) que se quer dar bind??
Isso porque o SwingBinder precisa do objeto @Form e sua visão @ViewHandler como parâmetro.
A grande pergunta é: o que você quer fazer? Para que você precisa de um “controller”… com base nisso, posso te dizer o que você irá precisar neste controller.
O Controller teria uma lista de objetos Cliente, e os métodos de salvar, alterar, excluir.
Além disso, teria métodos de navegação, como próximo, último primeiro, anterior, primeiro.
Isso porque como temos uma lista, podemos navegar nesses objetos e alterá-los/excluí-los da maneira que quiser.
A visão terá seus respectivos botões de primeiro, próximo,…
Mas pelo que vejo(e não sei se estou correto), no MVC, a visão não conhece o modelo,e sim o controle.
Também não sei ao certo se o controle conhece a visão ou o contrário!!
Basicamente, estes controles que você comentou, costumam ficar no form. O form ele não representa, no conceito o qual o genesis foi concebido, o modelo da sua aplicação, e sim o estado atual da tela, além de deter as operações as quais o usuário possa executar. Ele não é exatamente o controller, já que ele efetivamente não controla nem interage com o usuário. Ele executa determinados operações com base no que o controller, aqui representado pelo binder, repassar.
Para operações de banco de dados por exemplo, é aconselhável que um bean seja criado para transitar os dados, onde você copia os dados do form para este bean e então execute as operações sobre este bean.
Espero que isso ajude a elucidar suas dúvidas.
Att.
Bom, pelo que entendi, você gostaria de ter um controller o qual efetuaria as operações mencionadas, como próximo, anterior etc. Eu acredito que a melhor forma seria ter estas ações no próprio form. Você pode estudar o exmeplo UserAdmin do genesis, onde este modelo é aplicado.
Minha opinião sobre a questão.
O pattern MVC [url]http://en.wikipedia.org/wiki/Model-view-controller[/url], muitas vezes deve ser visto como uma abstração que lhe sugere uma melhor forma de fazer as coisas. Isto significa que, dependendo da situação, vc pode não conseguir implementar o padrão de forma totalmente satisfatória; principalmente se vc incluir um componente que não tem como único objetivo ajuda-lo nesta questão. Neste caso a melhor alternativa é seguir as melhores praticas sugeridas pelos projetistas do componente(s), é claro que se vc tiver uma idéia iluminada certamente o melhor é aplica-la / testa-la.
Procure na net sobre pattern MVC com swing, você vai encontrar um montão de maneiras diferentes de implementações; compare-as com a definição do pattern e vc vai entender o que quero dizer.
Agradecido a todos pelas respostas,
Irei ver o exemplo do UserAdmin primeiramente, para ter uma noção mais ampla do Genesis.
Quem sabe com isso tenho uma idéia bacana de como implementar minha necessidade.
Fantomas, gostei do seu post. Realmente, existem inúmeras maneiras diferentes de implementar MVC.
Já estudei(e implementei algumas), mas acredito que minha dúvida está mais para como implementar
minha necessidade com Genesis do que com o MVC em si…
Se conseguir implementar o que eu quero, mandarei o código para que todos possam ver, e opinar,
de acordo com suas vontades.
Caso contrário, irei postar mais perguntas ehehehe…