Pergunta

Eu estou usando o padrão Model-View-Presenter para uma página web. Caso o apresentador estar ciente de sessão ou deve apenas a vista estar ciente disso?

Eu acho que o que eu estou chegando é que conceitos como Session estão muito relacionadas com a arquitetura da exibição para que eles devem ser limitados ao uso pela vista? Caso contrário, o que aconteceria se eu queria reutilizar o apresentador em uma página semelhante em uma arquitetura diferente (ou eu não precisa se preocupar com isso, a menos que eu tenho planos de fazer isso)?

Foi útil?

Solução

Eu estou fazendo algo como este em minha MVP Implementação eu injetar uma ICookieManager, ISessionManager, ICacheManager, IConfigurationManager, IRedirector em meu apresentador que são implementados por classes que envolvem a funcionalidade para isso.

Isso permite que um apresentador, onde você pode injetar versões destes em escarnecido e você não tem dependências diretas sobre o tempo de execução asp.net em sua apresentador por isso faz o teste mais fácil.

Felicidades

Outras dicas

Pode até ser um módulo compartilhado que atua como um invólucro em qualquer sessão que você está usando. Desta forma, ele estaria disponível para todos os controladores e você pode mudar a implementação física da sessão simples.

Seu apresentador iria encher a vista com qualquer que seja o controlador obtido a partir da sessão.

Obrigado por suas respostas a todos, Então, para resumir ...

Estamos dizendo que, na verdade, o Presenter deve ser capaz de acessar dados de sessão (de preferência através de uma interface) e sua opinião de que não deve acessá-lo (permanecendo mudo)?

depende de qual objeto que você está tentando re-uso ou não contém a maior parte da lógica de negócios.

Eu diria que apenas o apresentador deve saber da sessão como esse objeto é a coisa mais próxima de um controlador em MVP.

Sim, como pomba diz, envoltório o que quer que acessa a sessão em outra classe.

Isso significa que você pode injetar uma classe de simulação deste tipo para simular valores diferentes para esta sessão.

Para responder à sua pergunta, mais especificamente, eu tendem a ir para o padrão de Supervisão-Presenter ( http: / /martinfowler.com/eaaDev/SupervisingPresenter.html ), que mantém os pontos de vista como muito burra. Assim, apenas o apresentador iria acessar a sessão (embora não diretamente como eu disse antes) e dizer ao Ver o que fazer.

Estou pesquisando MVP passivo abordagens também. Eu vi um par de coisas feitas na web, sendo que ambos deixam persistência de sessão até a vista -. Quer através de injeção, como pomba mencionado, ou gestão explícita

exemplos injeção de dependência pode ser visto aqui: http://www.codeproject.com /KB/aspnet/Advanced_MVP.aspx aqui: http : //geekswithblogs.net/opiesblog/archive/2006/06/30/83743.aspx . O truque aqui é para gerenciar todas as instâncias da sessão em uma variável estática, e impedi-los de substituir o outro. (Eu não tenho certeza o primeiro exemplo faz isso corretamente.)

A segunda abordagem é aqui: http: / /codebetter.com/blogs/jeffrey.palermo/archive/2005/03/28/128592.aspx . Neste exemplo, a vista sabe como armazenar seu estado. A desvantagem é que cada vez que o puts apresentador dados no ponto de vista, deve chamar um método de atualização na vista a força religação. Isso não é necessário nos exemplos acima, mas você não precisa gerenciar uma tabela de sessões. Não tenho certeza como essa abordagem complica testes com ferramentas de zombaria.

A dica é fazer a interface toda entidade consumível. Faz o apresentador e o modelo mais fácil de teste com zombando e concentrar os testes sobre o comportamento.

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