A melhor maneira de uma GUI Swing se comunicar com a lógica do domínio?
-
09-06-2019 - |
Pergunta
Tenho alguma lógica de domínio implementada em vários POJOs.Quero escrever uma interface de usuário Swing para permitir que o usuário inicie e veja os resultados de várias ações de domínio.
Qual é o melhor padrão/estrutura/biblioteca para comunicações entre a UI e o domínio?Isso se resume em:
- a IU é capaz de converter um gesto do usuário em uma ação de domínio
- o domínio é capaz de enviar informações de estado/resultado de volta à IU para fins de exibição
Estou ciente do MVC como um conceito amplo e mexi no padrão Observer (cuja implementação Java tem algumas desvantagens, se bem entendi), mas estou me perguntando se existe uma prática recomendada aceita para esse problema?
Solução
Definitivamente MVC - algo assim exemplo o que claramente divide as coisas.O problema com os exemplos do Swing é que eles parecem mostrar o MVC funcionando dentro do material do swing, o que não me parece certo
Outras dicas
MVC é fantástico para um widget individual, mas fica um pouco indisciplinado quando você tem pages
e forms
com muitos widgets.
Uma coisa que pode valer a pena investigar (e não estou endossando, na verdade não usei, apenas implementei algo muito semelhante para mim) é o Estrutura de ligação de feijão (JSR295)
Eu usei o padrão Observer (usando a magia AspectJ) no passado com alguns sucesso, mas descobri que, a menos que você tomasse cuidado, rapidamente se tornaria um cluster.ah..estalido?
Rapidamente se tornou difícil de gerenciar e, o mais importante, extremamente difícil de depurar.
Editar:
Para expandir um pouco minha resposta, estávamos usando SWT, não Swing, então YMMV.Basicamente usamos AspectJ para conectar a transferência de dados dos componentes da UI para os objetos do modelo.Esses objetos modelo eram POJOs idiotas.
A lógica de negócios real foi feita 'observando' os objetos do modelo com AspectJ e disparando o evento necessário caso eles mudassem.Portanto, se você alterasse um valor em uma caixa de texto, o AspectJ seria acionado e copiaria esse valor em um POJO.Se esse campo no POJO tivesse um evento para lógica de negócios que então fogo.Se essa lógica modificasse qualquer POJO (e poderia), o AspectJ notaria e copiaria o valor do POJO para o componente da UI.