1

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

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

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

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

4

2 回答 2

3

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

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

于 2013-03-17T19:30:59.350 回答
1

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

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

于 2013-03-17T09:08:58.277 回答