我正在开发一个Silverlight客户端和相关的ASP.NET Web服务(而不是WCF),我需要实现一些包含用户首选项的功能,例如“喜欢的项目”系统以及他们是否喜欢自动换行或不。为了获得愉快(而非令人愤怒)的用户体验,我希望在会话中保留这些设置。一项简短的调查表明,主要有两种可能性。
我意识到选项2可能是最好的选择,因为它确保即使用户禁用Silverlight的隔离存储,他们的首选项仍然存在,但我想避免此时维护数据库的负担,而我就像即使服务器连接不可用,首选项可用于加载和编辑的想法。但是,我愿意接受合理的论据,为什么现在而不是以后可能更喜欢这种打击。
我正在寻找的是关于在任一场景中实现设置持久性的最佳方法的建议。例如,如果使用了隔离存储,我应该使用XML格式还是其他文件布局来保存设置;如果使用数据库方法,我是否必须设计一个设置表,或者ASP.NET中是否有内置机制来支持这一点,以及如何向客户端提供首选项?
所以:
哪种解决方案更适合用户偏好持久性?如何在该解决方案中保留设置,以及客户端如何访问和更新它们?
请注意,我之前就此事进行了一些研究,并找到了以下链接,这些链接似乎主张根据您阅读的文章提出解决方案。
事实证明,微软已经将隔离存储中的设置持久性作为Silverlight的内置部分提供(我在实施替代方案之前不知何故错过了它)。 My answer below有更多详细信息。
即使微软提供客户端设置持久性,我仍然保持这个问题的开放性,但这并不一定意味着这是保持用户偏好的最佳方法,我想在此上提出更多意见和建议。
答案 0 :(得分:2)
在调查了一些并使用IsolatedStorage实现我自己的基于XML文件的设置持久性后,我发现了IsolatedStorageSettings类和IsolatedStorageSettings.ApplicationSettings对象,它是一个专门用于键/值集合的对象存储用户特定的应用程序设置。
现在一切都显而易见了。当然,从长远来看,使用服务器数据库备份和恢复设置的机制将是对此客户端设置持久性的一个很好的增强。
答案 1 :(得分:1)
我认为一般来说默认是存储在服务器上;只有当有特定的令人信服的理由尝试存储在客户端时才应该这样做。您越依赖存储在无法控制的媒介中,您承担的风险就越大。
有人说过,并将自己置于争论的“数据库”一边,我会问数据库的缺点是什么?您提到使用XML - 您的数据是否只是半结构化的?如果是这样,为什么不将XML存储在SQL数据库中?设置这么简单的东西通常不会被大多数标准视为“负担”。简单的Web服务可以充当Silverlight客户端和设置数据库之间的中间人。
答案 2 :(得分:1)
如果用户在离线时可以访问他们的偏好设置是一项重要功能,那么看起来孤立存储是您的最佳选择。如果用户能够保存偏好更为重要,即使他们已关闭隔离存储(这真的是一个问题吗?我很想在此调用YAGNI,但我对Silverlight平台的经验并不是很充实。 。)然后你需要托管一个数据库。如果两者都很重要,那么你可能正在寻找某种混合解决方案;使用隔离存储(如果可用),然后回退到数据库。
换句话说,我认为您的应用程序的需求比一些抽象的最佳实践更重要。