Web applications MVP-演示者是否应该使用会话?

Web applications MVP-演示者是否应该使用会话?,web-applications,session,mvp,Web Applications,Session,Mvp,我正在为网页使用模型视图演示者模式。演示者应该知道会话,还是只有视图知道会话 我想我的意思是,像Session这样的概念与视图的体系结构非常相关,所以它们应该被视图限制使用吗?否则,如果我想在不同体系结构的类似页面上重用演示者,会发生什么情况(或者我不需要担心,除非我有计划这样做)?取决于您尝试重用的对象或包含大部分业务逻辑的对象 我假设只有演示者应该知道该会话,因为该对象是MVP中最接近控制器的对象。它甚至可以是一个共享模块,充当您正在使用的会话的包装器。这样,所有控制器都可以使用它,您可以简

我正在为网页使用模型视图演示者模式。演示者应该知道会话,还是只有视图知道会话


我想我的意思是,像Session这样的概念与视图的体系结构非常相关,所以它们应该被视图限制使用吗?否则,如果我想在不同体系结构的类似页面上重用演示者,会发生什么情况(或者我不需要担心,除非我有计划这样做)?

取决于您尝试重用的对象或包含大部分业务逻辑的对象


我假设只有演示者应该知道该会话,因为该对象是MVP中最接近控制器的对象。

它甚至可以是一个共享模块,充当您正在使用的会话的包装器。这样,所有控制器都可以使用它,您可以简单地更改会话的物理实现


您的演示者将使用控制器从会话中获取的任何内容填充视图。

是的,正如dove所说,将访问会话的任何内容包装到另一个类中

这意味着您可以注入这种类型的模拟类来模拟会话的不同值


为了更具体地回答您的问题,我倾向于使用监督演示者模式(),它使视图保持非常愚蠢。因此,只有演示者才能访问会话(虽然不像我之前所说的那样直接)并告诉视图要做什么。

我在MVP实现中做了类似的事情,我注入了一个ICookieManager、ISessionManager、ICacheManager、IConfigurationManager,IREEdirector是我的演示者的一部分,它是由包装此功能的类实现的

这允许您在演示器中插入这些的模拟版本,并且您不直接依赖于演示器中的asp.net运行时,因此测试更容易


干杯

谢谢大家的回答,总结一下


我们是说演示者实际上应该能够从会话中访问数据(最好是通过接口),而视图不应该访问数据(保持沉默)?

我也在研究被动MVP方法。我已经在web上看到了一些事情,它们都让会话持久性由视图决定——或者是通过注入(如dove所述),或者是显式管理

依赖项注入示例可以在这里看到:这里:。这里的技巧是在一个静态变量中管理所有会话实例,并防止它们相互覆盖。(我不确定第一个示例是否正确地实现了这一点。)


第二种方法是:。在本例中,视图知道如何存储其状态。缺点是,每次演示者将数据放入视图时,都必须调用视图上的更新方法来强制重新绑定。在上面的示例中不需要这样做,但您不需要管理会话表。我不确定这种方法如何使模拟工具的测试复杂化。

技巧是连接每个可消费实体。它使演示者和模型更容易通过模拟进行测试,并将测试重点放在行为上。

这是我的观点,是的。