问题描述
我对面向协议的编程非常陌生。我正在使用下载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 (将#修改为@)