Pergunta

Estou prestes a refatorar uma aplicação Swing de usar ActionListeners para as classes Action porque eu percebi que muitos dos meus itens de menu estão indo para ser usado em uma barra de ferramentas também.

Agora eu tenho uma classe chamada ImportExport que lida com o estado do modelo subjacente e, em seguida, exibe os diálogos de usuário apropriados. ImportExport tem as funções save(), saveAs() e open(). Quando um usuário clica no item de menu "Open", o ouvinte ação chama open(), open() primeiro verifica se o modelo tem mudanças e se esse for o caso exibe um diálogo perguntando ao usuário se ele quer salvar primeiro. Agora, se o usuário clicar em "Sim" chamadas open() save() que novamente executa algumas verificações e exibe diálogos usuário. save() é bastante persistente: A única maneira de sair desta ação é salvando sucesso ou o usuário decidir que quer cancelar. Eu confio fortemente no feedback que save() fornece e se um usuário quer cancelar Eu também cancelar a função open() chamando.

Eu queria dividir a classe ImportExport em três classes (OpenAction, SaveAction & SaveAsAction), cada um deles subclasse AbstractAction e, eventualmente, se livrar da classe ImportExport. E é aí que o meu problema que surge é: Como posso dizer a SaveAction para executar se o usuário quer salvar o modelo antes de abrir outro? E como faço para obter o feedback se o usuário decide cancelar?

É este mesmo o caminho certo? Eu não gosto de ter código duplicado no Salvar e aberto ação e eu já ter colocado tanta funcionalidade quanto possível no meu modelo subjacente, mas diálogos usuário são obiously fora do lugar lá, então isso não é opção. Foi Action projetado em tudo para manter esse tipo de funcionalidade ou sould eu continuo minha classe ImportExport e simplesmente delegar todas as chamadas de ação para as funções apropriadas no ImportExport. Como você usa Actions?

Foi útil?

Solução

Às vezes eu adicionar uma ação de 'controller', quando há uma árvore de decisão envolvidos. OpenAction, SaveAction e SaveAsAction iria subclasse esta ação do controlador. A ação do controlador iria determinar o estado do modelo e solicitar mais informações do usuário se apropriado e, em seguida, chamar a subclasse correta.

Outras dicas

Gostaria de criar uma classe ImportExportController, tendo estes métodos: open, save, saveAs. Este controlador saberia a lógica de negócios.

As minhas aulas Action não contêm uma grande quantidade de lógica de negócios. Eles só chamaria o controlador.

Mas essas Ações iria conter todos os rótulos, ícones, acelerador ... que deve ser exibido na JButton, JMenuItem, etc.

Para mim, Actions são orientados GUI classes, utilizados por conveniência (e eles são muito conveniente!), Mas há aulas dedicadas a lógica de negócios alça.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top