为了账号安全,请及时绑定邮箱和手机立即绑定

保存信息列表时防止用户错误

保存信息列表时防止用户错误

C#
达令说 2021-11-14 16:03:20
我有一个private List<Experience> experiences;跟踪一般体验和体验特定信息的信息。我正在使用 Json Serialize 和 Deserialize 来保存和加载我的列表。当您启动应用程序时,列表会自动使用当前保存的信息填充自身,当新体验添加到列表时,它会将新列表保存到文件中。我想提前解决的一个问题是,没有什么可以阻止用户在任何时候做类似的事情experiences = new List<Experience>();,然后为其添加新体验。保存这会导致所有以前的数据丢失,因为现在每次保存都会覆盖文件。在理想的世界中,这不会发生,但我想弄清楚如何更好地构建我的代码来防范它。基本上我想禁止从列表中删除项目或在列表已经从加载中填充后将列表设置为新列表。我曾考虑过将最新添加到文件中的想法,但我也想涵盖更改列表中现有项目的属性的情况,并且考虑到列表永远不会有那么大的文件,我认为覆盖将是最简单的方法,因为成本不是问题。非常感谢在找出最佳方法方面的任何帮助。编辑 * 查看存储库模式https://www.infoworld.com/article/3107186/application-development/how-to-implement-the-repository-design-pattern-in-c.html这似乎是一个潜力方法。
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

我假设您的用户在这种情况下是您的 API 的代码级使用者,并且他们将使用同一内存堆栈中的结果,这让您担心引用突变。

在这种情况下,我会在读取操作时返回列表的副本而不是列表本身,并且在写入时只允许添加和删除,因为 maccettura 在评论中建议。如果您希望消费者能够改变它们,您可以保持对列表中项目的引用完整无缺,但我会仔细考虑这是否适合您的用例,并考虑要求消费者调用更新函数(这可能与您的添加函数 a-la HTTP PUT 相同)。


查看完整回答
反对 回复 2021-11-14
?
绝地无双

TA贡献1946条经验 获得超4个赞

有时当你想强调你的集合不应该被修改时,将它作为一个 IEnumerable 公开,除了 List 可能就足够了,但如果你正在编写一些严肃的 API,像存储库模式这样的东西似乎是一个很好的解决方案。


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信