Core Data和Swift中计算属性与持久化存储的区别

3
我有一种感觉这是一个愚蠢的问题,但我是新手,找不到明确的答案。
我有一个Activity实体和一个Sessions实体。每个Activity可以有多个Sessions。每个Session都有一个持续时间属性。
现在我想要计算一个Activity的平均会话时间。我应该向我的Activity实体添加一个averageSessionDuration属性,在用户添加或删除会话时更新并保存它,还是可以只向Activity类添加一个计算属性,在每次调用时计算平均会话时间?
我猜使用计算属性来计算平均会话时间可能会比必要的计算频繁一些,但我不知道这是否重要,最终有什么区别?
我不知道幕后发生了什么,获取每个会话持续时间并取平均值是否比仅获取在必要时更新和持久化的averageSessionDuration属性更昂贵?在这种情况下最佳实践是什么?我有遗漏的东西吗?
谢谢您的帮助!
丹尼尔

1
好问题。@Animal 是正确的。计算属性会更清晰,也不太可能出错。只有在观察到真正的性能影响时才会采取存储平均值的方法。 - Mike Taverne
2个回答

3

最可能不影响性能,但如果使用计算属性而不是尝试确保在保存其他值时始终更新它,代码会更清晰(我认为)。

如果担心性能问题,您可以在每个会话中缓存计算出的值,并在更改应用程序中的值时使其失效。这可能是两全其美的最佳选择。

这是一个品味问题,我相信有支持双方的论点。


谢谢回答!那是我的第一个想法,但我想知道是否只是我懒惰。 - dbmrq

2

如果您将来要在该属性上进行提取操作,则需要将其持久化。这是基于SQLite存储的假设。

如果您永远不会从中提取数据,则计算属性将更加清晰。

这是做出决定时唯一重要的问题。


那么它就是一个计算属性。谢谢! - dbmrq
这是更好的答案。勾选标记应该属于你。 - Moriya
@Animal 好的,你因为帮助和绅士风度而获得了一枚赞。 ;) - dbmrq

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