【问题标题】:MVP: Presenter SingletonMVP:主持人辛格尔顿
【发布时间】:2013-03-16 17:50:56
【问题描述】:

我在我的 ajax-web-application(GWT) 中使用历史管理。当用户按下后退或前进按钮时,将显示另一个视图。每个视图只会创建一次。我的问题是如何处理演示者。

我认为有两种方法:
1. 视图保存所有数据,每次历史更改事件后,将创建一个新的演示者。当模型需要一些数据时,presenter 会向视图请求数据并将其发送给模型。

2. Presenter 保存所有数据,每次历史更改事件后,Presenter 将被重新用于视图。因此,视图只有 ui 小部件,用户所做的所有更改都将重定向到演示者。

我更喜欢第二种方式,但我不确定这是否与 mvp 兼容。你有什么推荐给我的?

【问题讨论】:

    标签: java gwt history mvp


    【解决方案1】:

    还有第三种方式,即presenter和view都不保存数据。该视图仅包含 ui 小部件,并且是可重用的单例。演示者包含逻辑和本地状态,每次调用时都会创建演示者。通过在每次调用时创建它,可以确保本地状态是新鲜的。

    演示者需要的外部数据可以作为演示者启动的一部分从服务器获取或查询,但如果您需要在演示者之间传递数据,则可能无法正常工作。因此,将数据存储在由应用程序维护的全局对象中,当调用演示者时,需要的特定对象通过演示者的构造函数传递给演示者。通过从演示者和视图中删除数据,您可以使其更简单,因为演示者/视图不必管理。如果不存在,此代码还将从服务器获取数据。当用户通过编辑将加载特定演示者/视图的 url 进入页面时,它也更加健壮。通过将数据管理移出演示者/视图,您不必担心演示者/视图中的错误数据,因为应用程序将处理用户实际获得的演示者/视图,这可能与请求的页面不同,因为请求的页面对于现有数据无效。

    【讨论】:

      【解决方案2】:

      如果您确保演示者是轻量级的,即或多或少没有状态(我的解释),那就没那么重要了。

      我更愿意将数据状态加载/保存的代码委托给从演示者调用的另一个类,并使演示者成为单例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-31
        • 1970-01-01
        • 2014-11-01
        相关资源
        最近更新 更多