Preciso fazer um trabalhinho pra facul que envolve fazer uma interface gráfica em swing para um sistema bem simples.
Não tenho dificuldades para montar a interface mas tenho algumas duvidas a respeito de como “arquitetar” a interface.
As minhas duvidas são:
É correto, em questão das boas praticas, inicializar e adicionar todos os componentes da interface no construtor da classe de interface?
Como implementar os ActionListener’s? A própria classe de interface deve ser o seu actionListener, a classe lógica/de negocio ou uma classe intermediaria entre a de negocio e a interface?
a grosso modo é assim…da uma olhada nesse link brincadeira…heheheh…
falando serio, Facade, fica mais ou menos assim: é uma classe que conhece sua camada de negocio…entao para evitar o acoplamento cria-se essa classe que tem todos os metodos que serao utilizados pela sua tela(lembrando que o seu facade é um singleton(outro padrao que consiste em pagar somente uma instacia da classe)) entao suas telas nao conehcem as classes de negocio se vc tiver de fazer alguma alteração na camada de negocio nao havera impacto forte nas telas pois elas so conehcem o facade e vc so precisara alterar o facade…a grosso modo é isso
Sim. Mais correto que isso só usando o padrão Builder em que um outro objeto adiciona os componentes na tela.
A Tela nunca deve ser listener dos seus eventos. Ou vc cria inner classes para serems os listenrs ou vc cria classes fora que são os listenrs. Um padrão aqui é o Presenter (Presentation Controler) que é usado por exemplo no JSF.funciona assim : Vc cria uma classe normal com método: o presenters. Depois vc cria um tipo especial de actionlisteners que amarra um dos métodos do presenter. É facil fazer uma classe dessas de uso generico passando o nome do método e o objeto presenter usando reflection.
Quando o botao/menu for ativado o listerns irá chamar o método. Ai vc pode fazer o botão salvar chamar o método salvar , e assim por diante.
Isto para os actions gerais ( toolbar e menu). Para os actions que são especificos de uma tabela ou componente ( por exemplo um textbox com botão de dropdown de calendário) eles têm que ficar amarrados com componentes customizados e esses componentes terão inner classes que serão os listeners.
Especifico para UI:
Presenter (Presentantino controller) para controlar as ações.
Composite para montar componentes customizados a partir de componentes padrão.
MVC : entende o MVC do Swing é fundamental
MVP : especifico para UI de negocio.
Concordo(a exceção é se vc tem uma tela mínima de testes com poucas linhas de código).E uma tela com 150 listeners associados é algo MEDONHO.(experiência própria).
Existem design patterns que poderiam me indicar?
Um link para ajudar: