【发布时间】:2019-09-26 02:49:50
【问题描述】:
基本上我的 Android 应用有一些元数据需要在不同场景下报告给后端服务器:
data class SearchMetaData(
val searchId: String?,
val isRateLimit: Boolean
)
为了让代码简洁,我做了如下的最小情况。所有的上报逻辑都差不多,每个函数subscribe元数据提供者并获取需要上报的值。
fun logEvent1() {
fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
...//lots of other events data here
val sessionMetadata = SessionMetadata()
sessionMetadata.id = metadata.searchId
sessionMetadata.limiit = metadata.isRateLimit
event1.session = sessionMetadata
...
report(event1)
})
}
fun logEvent2() {
fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
...//lots of other events data here
val sessionMetadata = SessionMetadata()
sessionMetadata.id = metadata.searchId
sessionMetadata.limiit = metadata.isRateLimit
event2.session = sessionMetadata
...
report(event2)
})
}
fun logEvent3() {
fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
...//lots of other events data here
val sessionMetadata = SessionMetadata()
sessionMetadata.id = metadata.searchId
sessionMetadata.limiit = metadata.isRateLimit
event3.session = sessionMetadata
...
report(event3)
})
}
我担心的是每次我们更改元数据的架构时,我们都需要更新所有的 logEventX ,我想知道我们是否可以在不同的函数中提取所有的 subscribe 并获取元数据?
【问题讨论】:
-
您能否提供一个更改元数据时的场景以及如何更改您的
logEventX? -
你能更好地解释一下这个案例吗?因为不太清楚你想要达到什么目的?
-
@AramSheroyan 谢谢,我已经更新了一些代码。例如
data class SearchMetaData添加一个字段val searchType: Int,我们需要在每个logEvents中添加searchType,如果我们忘记添加一些logEvents,可能会出现异常。 -
@RicardKollcaku 谢谢,我想知道我们是否可以将
val sessionMetadata = SessionMetadata()设为全局,这样每个logEvents函数都可以直接使用它。
标签: android rx-java reactive-programming rx-kotlin