MVP:Presenter Singleton

时间:2013-03-16 17:50:57

标签: java gwt history mvp

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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