Model - View - Apresentador com Grade Virtual
Pergunta
Qual é a melhor repartição de responsabilidade ao usar uma grade virtual e o padrão MVP em um aplicativo winforms.
incluindo:
- Obter retornos de chamada da rede em atualizações celulares mudaram usuário
- Callback da rede para definir o estilo e valor de uma célula dada uma linha e coluna
Solução
As responsabilidades são em muitos padrões que são referidos como Model-View-Presenter variar. Principalmente eles variam sobre quanto controle é exercido sobre a vista pelo apresentador. Martin Fowler tem uma discussão em profundidade de um número de diferentes variantes em seu capítulo sobre GUI Arquiteturas , vale bem a pena uma leitura.
Tenha um olhar em Apresentador Primeira como ele lida com os adaptadores e as responsabilidades em alguma profundidade.
Passive View e Supervisão Controlador valem a pena olhar.
modelo (ou modelo de domínio) == representação lógica das entidades envolvidas no sistema, incluindo o seu estado e comportamento
apresentador == escutar eventos da vista (e talvez modelo) e serviço de esses pedidos, tipos de modelo converter em vista tipos (vista passiva), este é realmente o encanamento para esconder a visão eo modelo do outro. Reage ao estímulo do usuário.
vista == apresentação: a representação visual do modelo que o usuário pode interagir com, coletando entrada do usuário
As suas perguntas específicas em torno das chamadas de retorno e pegar o estilo de célula de grade são ambos vai envolver a visão manipulação de eventos de rede e elevar eventos de volta para o apresentador para requerer diligências ou recuperar dados a partir do modelo. Isto é perfeito para a chamada de retorno quando o conteúdo da célula é atualizado (isso precisa ser publicado para o apresentador para que o apresentador pode validar a mudança no modelo e fazer a mudança no modelo).
Para o estilo de célula da grade Estou a pensar que algum tipo de adaptador na visão pode precisar traduzir o estado do modelo (obtido via um evento da vista para o apresentador) para as informações de estilo de célula de grade. Isso poderia acontecer no apresentador, mas eu pessoalmente prefiro o apresentador não ter conhecimento do widget na vista.
Outras dicas
Se eu entendi corretamente, a grade é parte da implementação vista e não é visível para o apresentador. Nesse caso, o apresentador não deve precisar de saber como os dados são exibidos apenas como fornecê-los.
eu provavelmente criar uma classe auxiliar, um adaptador de algum tipo, que os comunica grade com. A grade de nada, mas esse auxiliar, idem para a vista vê.
A colaboração seria algo como:
grade <- helper <- vista <-> apresentador