在GWT中存储全局所需对象的最佳实践

在GWT中存储全局所需对象的最佳实践,gwt,Gwt,我开始开发一个MVP风格(GWTP)的GWT应用程序,它在服务器端使用Spring安全性进行身份验证和授权 在应用程序的许多视图中,我必须启用或禁用与当前用户的授权相关的控件。我已经有了一个RPC服务,它提供对包含所有必要信息的UserDetailsTo的访问 现在我的问题是:在客户端存储用户DTO的最佳位置是什么 由于用户权限在许多演示者中都是相关的,所以我必须在任何地方传递它。或者,我可以在每个演示者中设置一个RPC服务实例,并每次重新查询用户详细信息(可能缓存在客户端)。但是我不喜欢仅仅为

我开始开发一个MVP风格(GWTP)的GWT应用程序,它在服务器端使用Spring安全性进行身份验证和授权

在应用程序的许多视图中,我必须启用或禁用与当前用户的授权相关的控件。我已经有了一个RPC服务,它提供对包含所有必要信息的UserDetailsTo的访问

现在我的问题是:在客户端存储用户DTO的最佳位置是什么

由于用户权限在许多演示者中都是相关的,所以我必须在任何地方传递它。或者,我可以在每个演示者中设置一个RPC服务实例,并每次重新查询用户详细信息(可能缓存在客户端)。但是我不喜欢仅仅为了这个目的在每个演示者中都有一个用户RPC服务的想法

老实说,我更喜欢一个中央注册表,在那里放置UserDetails对象,并且可以从我的应用程序中的任何地方访问它。GWT中已经有这样的注册表了吗


在我的示例中,您可能经常遇到水平使用的对象。如何在GWT中处理它们?

只需将当前用户存储在公共静态变量中即可。
它可以从任何地方访问。

我将一个“AppState”对象注入所有需要了解登录用户权限、偏好等信息的演示者。我更喜欢注入而不是公共静态变量,因为它感觉更受控制,更容易在测试中模拟,额外的打字迫使我考虑每个对象是否真的需要访问全局数据。< / P>这是我目前的解决方案。然而,1)静态变量在单元测试中是有问题的,2)很难决定哪个部分(类)负责保持该静态实例。一个演示者,RPC服务(如果我想从那里访问用户对象,这意味着我对视图对象中的RPC服务有依赖关系。我将当前用户存储在ClientFactory实现中,非常简单,并且遵循KISS原则()虽然我使用的是杜松子酒而不是客户工厂,但我喜欢这个解决方案。很明显,这个问题不可能有一个单一的真实答案(stackoverflow甚至警告我,它可能会被拒绝),因此,Riley Lark,如果我能将两个答案都标记为“正确”,我会这样做;-)在ClientFactory中存储某种数据时,我遇到了很多问题。每次浏览器刷新时,ClientFactory对象数据都会重置,并且数据会丢失。你是说通过注入将其传递给演示者的构造函数,并使用GIN的@Inject注释吗?实际上,我只是使用构造函数定义中的普通旧参数将其传递给构造函数。它没有太多额外的类型,我喜欢当我改变一些东西时的行为——在需要改变的每一点上编译错误。在所有正确的点上引起考虑,IMHO。