8

我正在开发 Silverlight 客户端和相关的 ASP.NET Web 服务(不是 WCF),我需要实现一些包含用户首选项的功能,例如“最喜欢的项目”系统以及他们是否喜欢自动换行。为了提供愉快(而不是令人恼火)的用户体验,我想在会话中保留这些设置。一项简短的调查表明,主要有两种可能性。

  1. Silverlight 隔离存储
  2. ASP.NET 可访问的数据库

我意识到选项 2 可能是最好的选择,因为它确保即使用户禁用 Silverlight 的隔离存储,他们的偏好仍然存在,但我想避免此时维护数据库的负担,我喜欢这个想法即使服务器连接不可用,这些首选项也可用于加载和编辑。但是,我愿意接受有理由的论点,为什么现在而不是以后遭受这种打击可能更可取。

我正在寻找的是关于在任何一种情况下实现设置持久性的最佳方法的建议。例如,如果使用隔离存储,我应该使用 XML 格式还是其他文件布局来持久化设置?如果使用数据库方法,我是否必须设计一个设置表,或者 ASP.NET 中是否有内置机制来支持这一点,以及如何将首选项提供给客户端?

所以:

哪个解决方案是用户偏好持久性的更好解决方案?设置如何保留在该解决方案中,客户端如何访问和更新它们?

先前的研究

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

更新

事实证明,微软已经在隔离存储中提供了设置持久性作为 Silverlight 的内置部分(我不知何故错过了它,直到实现了一个替代方案)。我在下面的回答对此有更多详细信息。

尽管 Microsoft 提供了客户端设置持久性,但我仍将问题保持开放,但这并不一定意味着这是保持用户偏好的最佳方法,我想就此征求更多意见和建议。

4

3 回答 3

2

在研究了更多内容并使用IsolatedStorage实现了我自己的基于 XML 文件的设置持久性之后,我发现了IsolatedStorageSettings类和IsolatedStorageSettings.ApplicationSettings对象,该对象是一个键/值集合,专门用于存储用户特定的应用程序设置。

现在一切似乎都很明显。当然,从长远来看,使用服务器数据库备份和恢复设置的机制将很好地增强这种客户端设置的持久性。

于 2009-05-06T23:52:51.110 回答
1

我认为通常默认值是存储在服务器上;只有当有特定的令人信服的理由尝试存储在客户端上时,我们才应该这样做。您越依赖存储在您无法控制的介质中,您承担的风险就越大。

话虽如此,并且将自己置于论点的“数据库”方面,但我会问数据库的缺点是什么?您提到使用 XML - 您的数据只是半结构化的吗?如果是这样,为什么不将 XML 存储在 SQL 数据库中呢?按照大多数标准,设置这么简单的东西通常不会被视为“负担”。一个简单的 Web 服务可以充当 Silverlight 客户端和设置数据库之间的中介。

于 2009-05-05T20:08:21.140 回答
1

如果用户可以在离线时访问他们的偏好对您来说是一项重要功能,那么看起来隔离存储是您的最佳选择。如果用户即使关闭了隔离存储也能够保存首选项更重要(这真的是个问题吗?我很想在这个问题上打电话给 YAGNI,但我对 Silverlight 平台的经验并不丰富。. .) 那么你需要托管一个数据库。如果两者都很重要,那么您可能正在寻找某种混合解决方案;如果可用,则使用隔离存储,然后回退到数据库。

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

于 2009-05-06T14:01:25.227 回答