【问题标题】:MVP - Should the Presenter use Session?MVP - Presenter 应该使用 Session 吗?
【发布时间】:2008-11-03 10:44:49
【问题描述】:

我正在为网页使用模型-视图-演示者模式。演示者应该知道 Session 还是应该只有视图知道它?

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

【问题讨论】:

    标签: web-applications session mvp


    【解决方案1】:

    我在我的 MVP 实现中正在做类似的事情,我将 ICookieManager、ISessionManager、ICacheManager、IConfigurationManager、IRedirector 注入到我的演示者中,它们由包装此功能的类实现。

    这允许演示者在其中注入这些模拟版本,并且您的演示者中没有对 asp.net 运行时的直接依赖,因此它使测试更容易。

    干杯

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        我们是说实际上 Presenter应该 能够访问会话中的数据(最好通过接口)及其不应该访问它的视图(保持沉默)?

        【讨论】:

        • 这是我的看法,是的。
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          是的,正如 dove 所说,将访问 Session 的任何内容包装在另一个类中。

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

          为了更具体地回答您的问题,我倾向于使用监督演示者模式 (http://martinfowler.com/eaaDev/SupervisingPresenter.html),这会使视图保持非常愚蠢。所以只有 Presenter 会访问 Session(虽然不是像我之前说的那样直接访问)并告诉 View 要做什么。

          【讨论】:

            【解决方案6】:

            我也在研究被动 MVP 方法。我在网络上看到过一些事情,它们都将会话持久性留给了视图——要么通过注入,如 dove 所提到的,要么显式管理。

            可以在此处查看依赖注入示例:http://www.codeproject.com/KB/aspnet/Advanced_MVP.aspx 和此处:http://geekswithblogs.net/opiesblog/archive/2006/06/30/83743.aspx。这里的技巧是在一个静态变量中管理所有会话实例,并防止它们相互覆盖。 (我不确定第一个示例是否正确完成此操作。)

            第二种方法在这里:http://codebetter.com/blogs/jeffrey.palermo/archive/2005/03/28/128592.aspx。在这个例子中,视图知道如何存储它的状态。缺点是每次演示者将数据放入视图时,它都必须在视图上调用 Update 方法来强制重新绑定。在上面的示例中不需要这样做,但您不需要管理会话表。我不确定这种方法如何使使用模拟工具进行测试变得复杂。

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-07-15
                • 1970-01-01
                • 1970-01-01
                • 2017-05-26
                • 1970-01-01
                • 2010-12-10
                相关资源
                最近更新 更多