Meu apresentador precisa para solicitar ao usuário para mais informações. Como faço para conectar-lo?

StackOverflow https://stackoverflow.com/questions/1049339

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando com o padrão Passive View. O usuário clica em um botão de nova conta. A vista delega a responsabilidade para o apresentador usando chamadas de método sem parâmetros.

O problema é que existem vários tipos de contas para que o usuário precisa escolher qual eles querem criar. Como posso resolver isso?

  1. Crie um novo formulário a partir do ponto de vista, obter as informações necessárias e expô-la como uma propriedade para que o apresentador pode recuperá-la. (Isto ignora a noção de que a visão não deve ter qualquer lógica no mesmo)
  2. Criar e usar a nova forma do apresentador. (Isto está o apresentador directamente a uma forma, ignorando todo o ponto de MVP)
  3. Criar a nova forma em outro lugar e passá-lo como um argumento construtor para o apresentador ... ou exibição.
  4. Esqueça isso e adicionar um novo botão para cada tipo de conta. (Há uma série de tipos de conta e isso irá sobrecarregar a interface do usuário, mas que assim seja.)
  5. Eu estou lidando com isso da maneira errada e precisa repensar meu projeto. (Se este for o caso, um empurrão na direção certa seria apreciada.)
Foi útil?

Solução 4

A minha solução para isso era diferente do que eu esperava. Mudei o botão o usuário clicou a um DropDownMenuButton. Então eu passei uma lista série de tipos de conta com a visão que preenche o menu suspenso. Também criei um manipulador de eventos para o drop-down item de menu clique evento, que atualiza uma propriedade pública com o nome do item de menu, em seguida, os delegados tudo o resto para o apresentador.

O apresentador só tem que obter o nome do item de menu a partir da propriedade exposta e, em seguida, procurar o tipo de conta em um dicionário particular de tipos de conta usando o nome do tipo de conta como a chave.

Outras dicas

eu provavelmente criar um outro par apresentador-view para obter o tipo de conta. Então quer

  • seu apresentador chama o outro apresentador diretamente para exibir a nova forma ou
  • seu apresentador pede seu modelo para o tipo de conta certa. O modelo sabe que deve pedir em outro lugar e invoca o "tipo apresentador conta" ou mesmo o "tipo de modelo conta".

Eu acho que eu iria com a primeira opção a menos que seu apresentador cresce pesado.

Eu não sou um especialista MVP mas eu iria lidar com isso usando um delegado para obter o tipo de conta a partir da visão. O apresentador invoca o delegado sobre a visão que abre o formulário "selecione tipo de conta" e retorna o tipo de conta selecionado quando o usuário tiver selecionado um tipo de conta e fechar o formulário.

Se você está falando de uma interface simples para a seleção de um tipo de conta, IMO depende do número de tipos de conta. Gostaria apenas de acrescentar novos botões para cada conta. No entanto, se você tem um monte de tipos de conta, eu teria um combobox com a lista de todas as contas possíveis e o primeiro (o que o usuário vê primeiro) ser um tipo inválido ou não selecionada. Também gostaria de acrescentar alguma etiqueta dizendo "tipo de conta Select para criar", em seguida, ter um toque de botão único que envia o valor na caixa de combinação com o modelo. Dessa forma, se o usuário simplesmente clica no botão, sem selecionar um tipo de conta, o modelo será válido do tipo, e retornar o problema à vista (ea vista pode-se destacar a caixa ou vermelho o texto ou qualquer outro). Isso impede que o usuário perder a seleção do tipo de conta. Esta abordagem também faria testes unitários mais fácil.

Se você está falando sobre cada tipo de conta ter informação diferente que precisa ser preenchido, então você teria que ter uma visão diferente e apresentador por cada conta. (Isto seria o que você precisa depois que o usuário seleciona o tipo de conta)

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