在Silverlight中持久化用户偏好

8
我正在开发一个Silverlight客户端和相关的ASP.NET Web服务(非WCF),需要实现一些包含用户偏好设置的功能,例如“收藏项”系统和是否需要自动换行。为了提供愉快的用户体验,我希望在会话之间保留这些设置。初步调查显示有两个主要可能性:
1. Silverlight独立存储 2. ASP.NET访问数据库
我知道选项2可能是最好的选择,因为它确保即使用户禁用了Silverlight的独立存储,他们的偏好设置仍然存在,但此时我想避免维护数据库的负担,并且我喜欢即使在没有服务器连接时也可以加载和编辑偏好设置的想法。然而,如果有理由认为现在采取这种方式比以后更可取,我也愿意接受。
我希望获得有关在任一情况下实现设置持久性的最佳建议。例如,如果使用独立存储,我应该使用XML格式还是其他文件布局来持久化设置;如果采用数据库方法,我是否必须设计一个设置表,或者ASP.NET中是否有内置机制支持此操作,并如何将偏好设置提供给客户端?

所以:

哪种解决方案更适合用户偏好的持久化?在该解决方案中,设置如何被持久化,客户端如何访问和更新它们?

先前研究

请注意,我已经对此事进行了一些先前的研究,并找到了以下链接,根据您阅读的文章,这些链接似乎支持任一解决方案。

更新

事实证明,微软已经将设置持久性作为Silverlight的内置部分提供在隔离存储中(在实现替代方案之后,我不知何故错过了这一点)。 下面我的答案 更详细地介绍了这一点。

虽然微软提供客户端设置持久性,但这并不一定是持久化用户首选项的最佳方法,我想征求更多意见和建议,所以我保留了这个问题。


这有点晚了,但我遇到了同样的问题,并找到了一个很好的读写器类来访问设置 - http://yinyangme.com/blog/post/Settings-for-Silverlight-using-IsolatedStorageSettings.aspx。 - Rodney
3个回答

2
经过进一步调查和实现自己基于 XML 文件的设置持久化,使用 IsolatedStorage,我发现了 IsolatedStorageSettings 类和 IsolatedStorageSettings.ApplicationSettings 对象,它是一个键/值集合,专门用于存储用户特定的应用程序设置。
现在一切都显得很明显。当然,在长期来看,使用服务器数据库备份和还原设置的机制将是这个客户端设置持久化的一个很好的增强。

1

我认为一般情况下默认应该存储在服务器上;只有在有特定强制性原因尝试存储在客户端时,我们才应该这样做。你越依赖于存储在你无法控制的介质中,你就承担了越多的风险。

话虽如此,作为“数据库”派系的一员,我想问一下使用数据库的缺点是什么?你提到使用 XML - 你的数据只是半结构化的吗?如果是这样,为什么不将 XML 存储在 SQL 数据库中呢?设置这样一个简单的东西通常不会被大多数标准视为“负担”。一个简单的 Web 服务可以充当你的 Silverlight 客户端和设置数据库之间的中间人。


数据库解决方案的负担在于我需要负责备份和维护数据。此外,我将控制存储,但不控制与该存储的连接(即互联网),因此我认为这是将一个问题(无法控制用户的机器以及他们是否允许Silverlight存储)换成另一个问题(无法控制我的客户是否连接到我的数据库)。 - Jeff Yates

1

如果对于用户在离线状态下访问其偏好设置是一个重要的功能,那么看起来隔离存储是您的选择。如果更重要的是即使关闭了隔离存储也能保存偏好设置(这真的是个问题吗?我会倾向于在这方面采用YAGNI,但我对Silverlight平台并不是非常熟悉...),那么您需要托管一个数据库。如果两者都很重要,那么您可能正在寻找某种混合解决方案;如果可用,使用隔离存储,然后回退到数据库。

换句话说,我认为您的应用程序的需求比一些抽象的最佳实践更重要。


我倾向于同意你的观点,Greg,但由于我对大部分内容都很陌生,所以我想请教更有经验的人,以防我漏掉了什么。在我看来,服务器是一个很好的备份设置位置,但客户端应该始终拥有一流的访问权限,并可以选择从服务器备份/恢复。 - Jeff Yates

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接