我有一個(gè)private List<Experience> experiences;跟蹤一般體驗(yàn)和體驗(yàn)特定信息的信息。我正在使用 Json Serialize 和 Deserialize 來保存和加載我的列表。當(dāng)您啟動(dòng)應(yīng)用程序時(shí),列表會(huì)自動(dòng)使用當(dāng)前保存的信息填充自身,當(dāng)新體驗(yàn)添加到列表時(shí),它會(huì)將新列表保存到文件中。我想提前解決的一個(gè)問題是,沒有什么可以阻止用戶在任何時(shí)候做類似的事情experiences = new List<Experience>();,然后為其添加新體驗(yàn)。保存這會(huì)導(dǎo)致所有以前的數(shù)據(jù)丟失,因?yàn)楝F(xiàn)在每次保存都會(huì)覆蓋文件。在理想的世界中,這不會(huì)發(fā)生,但我想弄清楚如何更好地構(gòu)建我的代碼來防范它。基本上我想禁止從列表中刪除項(xiàng)目或在列表已經(jīng)從加載中填充后將列表設(shè)置為新列表。我曾考慮過將最新添加到文件中的想法,但我也想涵蓋更改列表中現(xiàn)有項(xiàng)目的屬性的情況,并且考慮到列表永遠(yuǎn)不會(huì)有那么大的文件,我認(rèn)為覆蓋將是最簡單的方法,因?yàn)槌杀静皇菃栴}。非常感謝在找出最佳方法方面的任何幫助。編輯 * 查看存儲(chǔ)庫模式https://www.infoworld.com/article/3107186/application-development/how-to-implement-the-repository-design-pattern-in-c.html這似乎是一個(gè)潛力方法。
2 回答

忽然笑
TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
我假設(shè)您的用戶在這種情況下是您的 API 的代碼級使用者,并且他們將使用同一內(nèi)存堆棧中的結(jié)果,這讓您擔(dān)心引用突變。
在這種情況下,我會(huì)在讀取操作時(shí)返回列表的副本而不是列表本身,并且在寫入時(shí)只允許添加和刪除,因?yàn)?maccettura 在評論中建議。如果您希望消費(fèi)者能夠改變它們,您可以保持對列表中項(xiàng)目的引用完整無缺,但我會(huì)仔細(xì)考慮這是否適合您的用例,并考慮要求消費(fèi)者調(diào)用更新函數(shù)(這可能與您的添加函數(shù) a-la HTTP PUT 相同)。

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
有時(shí)當(dāng)你想強(qiáng)調(diào)你的集合不應(yīng)該被修改時(shí),將它作為一個(gè) IEnumerable 公開,除了 List 可能就足夠了,但如果你正在編寫一些嚴(yán)肅的 API,像存儲(chǔ)庫模式這樣的東西似乎是一個(gè)很好的解決方案。
- 2 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)
0/150
提交
取消