如何解决Swift-计算属性与数据库操作
我对面向协议的编程非常陌生。我正在使用下载SDK开发ott产品。我的代码中有几件事。
我已确认协议VODContent
的{{1}}和RLMOfflineMedia
。这样我就可以在OfflineMedia
和OfflineMedia
之间使用VODContent
作为适配器。在SDK内,我为RLMOfflineMedia
创建了一个extension
来执行数据库操作。它具有如下相似的结构。
OfflineMedia
在SDK内,我可以使用'OfflineMedia.realmObject'或//RLMOfflineMedia+OfflineMedia.swift
//which handles the DB operations related to RLMOfflineMedia
extension OfflineMedia {
var realmObject: RLMOfflineMedia {
return //check for an existing entry in database using primary key or creates a new realm object and return it.
}
}
轻松快速地管理数据库操作。此时一切正常。但是后来我意识到,每当我使用self as? RLMOfflineMedia
时,它将执行相对繁重的数据库操作。作为一名优秀的程序员,我应该避免这种情况。我需要知道什么是解决此问题的最佳方法。我本人有一些想法,但我不确定这些想法是否正确。在下面只提及它们。
- 在
OfflineMedia.realmObject
和VODContent
内添加一个存储的属性(带有一个 二传手)。将获取的对象存储在此对象中,然后在执行数据库操作之前将其存储为nil。 (声音 就像一个讨厌的解决方案) - 创建一个数组或设置为用作数据库缓存。
注意:我假设数据库本身没有缓存机制,可以避免一次又一次地获取同一内容。
截至目前,我保留了较不优化的旧实现。我正在等待答案,以便优化代码。
**更新:-**
添加有关OfflineMedia
,VODContent
和OfflineMedia
此处RLMOfflineMedia
表示来自服务器的对象,被解析为快速对象。 VODContent
是用作将OfflineMedia
连接到SDK的桥梁的协议。通过确认VODContent
至VODContent
,我可以获取在SDK中保存/处理数据所需的任何属性。这意味着我没有将视频资产作为OfflineMedia
对象传递,而是VODContent
(我认为这称为依赖注入)。在这里,我使用OfflineMedia
作为中介。 SDK OfflineContent
内部表示一个OfflineMedia
,我可以通过将VODContent
的类确认为RLMOfflineMedia
来将其保存到DB。我为OfflineMedia
创建了几个扩展,以执行不同的操作(例如:数据库操作,下载视频资产等),只是大多数业务逻辑都写在OfflineMedia
扩展内部。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。