0

问题定义:

项目设置GWT在客户端和Spring服务器端使用 有 100 个对象的对象树。该对象描述了一个链接到一个用户的复杂配置文件。该对象必须在服务器端持久化,并且可以由客户端请求。客户端和服务器都可以访问 Object 中的所有方法和字段。一旦被客户端请求,这个对象树就会被缓存。对象可以被客户端和服务器修改。如果文件被服务器修改,客户端下载新版本。添加额外功能应该很容易到配置对象,即增加版本号并将对象添加到树中。配置文件是一个项目文件,它保存用户为使项目保持原样所做的所有更改。用户会定期(每 3 秒)更改配置文件。例如,将其与 Gimp 项目/PowerPoint 文件进行比较。

当前架构:

XML服务器以某种格式存储配置文件。RequestFactory当请求配置时,这将转换为使用( )从服务器发送到客户端的 Java 对象GWT。客户端可以修改该对象并将更改发送到服务器。客户端完成后,服务器通过替换旧XML文件来保存新对象。HML5Storage客户端还使用( )缓存此 Java 对象GWT。5MB 的限制不是问题。当在服务器创建对象的新版本时,例如将新对象类型添加到树中,客户端下载新对象树并丢弃旧对象树。

问题:

  • 这是解决问题的好方法吗?

也许我应该XML在初始化时将文件直接从服务器发送到客户端。客户端修改此文件并在完成后将其发送回服务器。客户端可以将XML文件按原样存储在HML5Storage. 也许有人可以指出一些奇怪的选择。

  • 是否有更好的格式来存储此数据服务器端而不是XML

我之所以选择XML它,是因为它具有良好的库,可以将 Java 对象映射到XML文件,并且可以轻松添加其他功能。此外,此数据链接到一个用户,并且不会以其他方式使用该数据。因此,将其存储在关系数据库中并将所有这些对象组合在树中是一个坏主意(这需要很长时间才能组装)。

  • RequestFactory对对象树的初始下载也有好处吗?

我读过RequestFactory可能需要很长时间才能下载大量对象的案例。(与 相比,x 10 时间RPC)。

如果您做到了这一点并且还不清楚,我很乐意在需要的地方添加额外的细节。

4

1 回答 1

0

这是解决问题的好方法吗?

在登录时预加载对象是个好主意。当用户需要编辑配置的特定部分时,更好的方法是将对象树分成小部分并根据请求加载每个部分。这假设不是提供单个视图来编辑所有配置属性,而是您在某种程度上将其“组织”成许多单独的表单,这些表单将仅在适当时请求他们需要的部分配置。它需要一些工作,但如果该对象稍后发生更改,您的架构师将更易于维护。

我认为您没有正确执行此操作,因为您将对象树(我理解它是一些大型 Java 对象)转换为 XML,而不是立即将该对象发送到客户端。GWT RPC 将处理序列化/反序列化(实际上是使用 JSON 而不是 XML)。操作普通 Java 对象不是比 XML 更容易(即使有好的库)?

有没有更好的格式来存储这个数据服务器端而不是 XML?

我通常使用 JSON。它也有很好的图书馆。我只在人类需要直接读取文件时使用 XML。

但我不明白你为什么需要它们中的任何一个。GWT RPC 机制会自动将你的 java 对象序列化为 json。只需提供一个“共享”对象和(如果需要)一个转换器来将您的对象树转换为其共享形式并返回。

RequestFactory 是否也适用于对象树的初始下载?

由于 XML 比 JSON 占用更多空间,并且操作 XML 比操作 java 对象慢,我实际上建议使用 RPC。

于 2013-08-26T12:23:34.020 回答