项目设置在客户端使用GWT
,在服务器端使用Spring
有一个100个对象的对象树。该对象描述了一个复杂的配置文件,链接到一个用户。此对象必须保留在服务器端,并且可以由客户端请求。客户端和服务器都可以访问Object中的所有方法和字段。一旦客户端请求,就会缓存此对象树。客户端和服务器可以修改该对象。如果服务器修改了文件,则客户端会下载新版本。它应该轻松地向配置对象添加额外的功能,即增加版本号并向树添加对象。配置文件是一个项目文件,用于保存用户为使项目按原样所做的所有更改。用户定期(每3秒)更改配置文件。将它与例如Gimp项目/ PowerPoint文件进行比较。
服务器以XML
格式存储配置文件。请求配置时,会将其转换为使用RequestFactory
(GWT
)从服务器发送到客户端的Java对象。客户端可以修改该对象,并将更改发送到服务器。客户端完成后,服务器通过替换旧的XML
文件来保存新对象。客户端还使用HML5Storage
(GWT
)缓存此Java对象。 5MB的限制不是问题。当在服务器上创建新版本的对象时,例如,一个新的对象类型被添加到树中,客户端下载新的对象树并丢弃旧的对象树。
也许我应该在初始化时将XML
文件直接从服务器发送到客户端。客户端修改此文件,并在完成后将其发送回服务器。客户端可以将XML
文件存储在HML5Storage
中。也许有人可以指出一些奇怪的选择。
XML
? 我之所以选择XML
,是因为它具有良好的库,可以将Java对象映射到XML
文件,并且可以轻松添加其他功能。此数据也链接到一个用户,否则不使用数据。所以它将一个坏主意存储在关系数据库中并将所有这些对象组合在一个树中(这需要很长时间才能组装)。
RequestFactory
是否也适合初次下载
对象树? 我已经阅读了RequestFactory
可能需要很长时间才能下载大量对象的情况。 (与RPC
相比,时间x 10。)
如果你做到了这一点并且有些不明确,我很乐意在需要的地方添加额外的细节。
答案 0 :(得分:0)
这是解决问题的好方法吗?
登录时预加载对象是个好主意。当用户需要编辑配置的特定部分时,更好的方法是将对象树分成小部分并根据请求加载每个部分。这假设不是提供单个视图来编辑所有配置属性,而是将它“组织”成许多单独的形式,这将仅在适当时请求它们所需的部分配置。它需要一些工作,但如果该对象稍后更改,您的架构将更易于维护。
我认为你没有正确地执行它,因为你将对象树(我理解它是一些大的Java对象)转换为XML,而不是立即将该对象发送到客户端。 GWT RPC将处理序列化/反序列化(实际上通过使用JSON而不是XML)。操作Plain Java对象比XML更容易(即使有好的库)?
是否有更好的格式来存储此数据服务器端而不是XML?
我通常使用JSON。它还有很好的图书馆。当人类需要直接读取文件时,我只使用XML。
但我不明白为什么你会需要其中任何一个。 GWT RPC mechanism会自动将您的java对象序列化为json。只需提供一个“共享”对象和(如果需要)转换器,将对象树转换为共享形式并返回。
RequestFactory对初始下载对象树有用吗?
由于XML占用的空间比JSON多,并且操纵XML比操作java对象慢,我实际上建议使用RPC。